使ssh不用输入密码
来源:互联网 发布:ubuntu 如何使用汉语 编辑:程序博客网 时间:2024/06/05 11:27
有些时候,我们在复制/移动文件到另一台机器时会用到scp,因为它比较安全。但如果每次都要输入密码,就比较烦了,尤其是在script里。不过,ssh有另一种用密钥对来验证的方式。下面写出我生成密匙对的过程,供大家参考。
第一步:生成密匙对,我用的是rsa的密钥。使用命令 “ssh-keygen -t rsa”
[user1@rh user1]$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/user1/.ssh/id_rsa): Created directory '/home/user1/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/user1/.ssh/id_rsa. Your public key has been saved in /home/user1/.ssh/id_rsa.pub. The key fingerprint is: e0:f0:3b:d3:0a:3d:da:42:01:6a:61:2f:6c:a0:c6:e7 user1@rh.test.com [user1@rh user1]$
生成的过程中提示输入密钥对保存位置,直接回车,接受默认值就行了。接着会提示输入一个不同于你的password的密码,直接回车,让它空着。当然,也可以输入一个。(我比较懒,不想每次都要输入密码。) 这样,密钥对就生成完了。其中公共密钥保存在 ~/.ssh/id_rsa.pub私有密钥保存在 ~/.ssh/id_rsa
然后改一下 .ssh 目录的权限,使用命令 “chmod 755 ~/.ssh”
[user1@rh user1]$ chmod 755 ~/.ssh[user1@rh user1]$
之后把这个密钥对中的公共密钥复制到你要访问的机器上去,并保存为
~/.ssh/authorized_keys.
[user1@rh user1]$ scp ~/.ssh/id_rsa.pub rh1:/home/user1/.ssh/authorized_keys user1@rh1's password:id_rsa.pub 100% 228 3.2MB/s 00:00[user1@rh user1]$
之这样就大功告成了。之后你再用ssh scp sftp 之类的访问那台机器时,就不用输入密码了,用在script上更是方便。
原贴:使ssh不用输入密码
http://bbs.chinaunix.net/thread-343905-1-1.html
(出处: http://bbs.chinaunix.net/)
但这并不是常规的解决方案,如果是ftp连接就没辙了,况且,你不可能为了执行某些命令去给每个你要连接的主机都手动建立ssh信任,这已经偏离了今天主题的本意,今天要说的是在脚本里自动输入密码,我们可以想象下,更优雅的方式应该是在脚本里自己配置密码,当屏幕交互需要输入时自动输入进去,要达到这样的效果就需要用到expect。
安装
CentOS下安装命令很简单,如下
sudo yum install expect
测试脚本
我们写一个简单的脚本实现scp拷贝文件,在脚本里配置密码,保存为scp.exp如下
#!/usr/bin/expect set timeout 20 if { [llength $argv] < 2} { puts "Usage:" puts "$argv0 local_file remote_path" exit 1 } set local_file [lindex $argv 0] set remote_path [lindex $argv 1] set passwd your_passwd set passwderror 0 spawn scp $local_file $remote_path expect { "*assword:*" { if { $passwderror == 1 } { puts "passwd is error" exit 2 } set timeout 1000 set passwderror 1 send "$passwd\r" exp_continue } "*es/no)?*" { send "yes\r" exp_continue } timeout { puts "connect is timeout" exit 3 } }
注意,第一行很重要,通常我们的脚本里第一行是#!/bin/bash,而这里是你机器上expect程序的路径,说明这段脚本是由expect来解释执行的,而不是由bash解释执行,所以代码的语法和shell脚本也是不一样的,其中set passwd your_passwd设置成你自己的密码,然后执行如下命令
./scp.exp ./local_file user@host:/xx/yy/
执行前确保scp.exp有执行权限,第一个参数为你本地文件,第二个为远程主机的目录,运行脚本如果报错“connect is timeout”,可以把超时设长一点,第二行set timeout 20可以设置超时时间,单位是秒。脚本执行效果如下
还能做什么
细心的同学一定发现了,其实expect提供的是和终端的一种交互机制,输入密码只是其中一种应用形式,只要是在终端阻塞需要输入时,都可以通过expect脚本完成自动输入,比如前面脚本里配置了两种交互场景,一种是终端提示”password:”时输入密码,还有一种是提示”yes/no)?”时输入“yes”,如果和远程主机是第一次建立连接,执行scp.exp脚本效果是这样的
所以我们可以根据终端的提示来配置输入命令,这样就能达到了自动化的效果。至于处理其它交互场景,只需要照着上面的脚本依葫芦画瓢就行了
http://www.jb51.net/article/62349.htm
- 使ssh不用输入密码
- 使ssh不用输入密码
- 使ssh不用输入密码
- 使ssh不用输入密码
- 使ssh不用输入密码
- 使ssh不用输入密码
- 使ssh不用输入密码
- ssh 不用输入密码
- 使ssh scp sftp不用输入密码
- ssh登录不用输入密码
- 使用scp、ssh等不用输入密码
- 使用scp、ssh等不用输入密码
- ssh登录时不用输入密码
- linux scp ssh命令不用输入密码
- ssh scp不用输入密码 配置
- 使用ssh传输文件不用输入密码
- 使scp不用输入密码
- 使scp不用输入密码
- mongoose中数组循环查询find结果的同步实现
- SpringMVC和FreeMarker整合中使用注解方式的后台数据校验validate(部分自己扩展)
- Java(4):基础算法(1)--斐波那契数列之小兔子生孩子
- c++初级 之 类型转换
- Java 阿里官方代码规范标准手册终极版下载
- 使ssh不用输入密码
- zookeeper和dubbo
- 判断二叉树是否是二叉搜索树
- 为mysql数据库建立索引
- 机器学习_贝叶斯公式/先验概率/后验概率
- vtkactor 用GetProperty()设置颜色属性不起作用
- Markdown语法说明
- Yii框架防止sql注入,xss攻击与csrf攻击的方法
- 用户与组管理