上次为了自动连接ssh,查了很多资料,最后使用了expect,虽然解决问题,但是由于电脑是自动获取ip地址,所以当ip地址变过之后,脚本需要重新设置,很麻烦。现在无意中发现了更好的方法,其实是ssh已经有自动连接功能:在客户端形成一对密钥,私钥保存在默认地方,公钥发送到服务端,保存在指定文件下,就可以形成密钥对,不管自动获取ip地址的两台电脑如何变换ip,都可以通过密钥来确定身份,安全又方便。
ssh 自动连接
主机IP:172.20.10.118
远程主机IP:172.20.10.97
1)在本地主机生成密钥对
ssh-keygen -t rsa
这个命令生成一个密钥对:id_rsa(私钥文件)和id_rsa.pub(公钥文件)。默认被保存在~/.ssh/目录下。
2) 将公钥添加到远程主机的 authorized_keys 文件中
将文件上传到远程主机中
scp ~/.ssh/id_rsa.pub root@172.20.10.97:/root
SSH到登陆到远程主机,将公钥追加到 authorized_keys 文件中
cat /root/id_rsa.pub >> /root/.ssh/authorized_keys
3) 重启 open-ssh 服务
/etc/init.d/ssh restart
4) 测试
[root@hostli .ssh]# ssh root@172.20.10.97
Last login: Tue Mar 22 10:19:49 2011 from 172.20.10.97
[root@localhost ~]#
成功!!
Ssh同时连接多台服务器
同样,在上面的例子中,由于密钥对不是针对某一个ip地址的,所以生成的密钥对可以重复使用:例子: 远程主机C IP:172.20.10.38
直接运行2) 将公钥添加到远程主机的 authorized_keys 文件中
将文件上传到远程主机中
scp ~/.ssh/id_rsa.pub root@172.20.10.38:/root
SSH到登陆到远程主机,将公钥追加到 authorized_keys 文件中
cat /root/id_rsa.pub >> /root/.ssh/authorized_keys
3) 重启 open-ssh 服务
/etc/init.d/ssh restart
4) 测试
[root@localhost work]# ping 172.20.10.97
PING 172.20.10.97 (172.20.10.97) 56(84) bytes of data.
64 bytes from 172.20.10.97: icmp_seq=2 ttl=64 time=0.586 ms
64 bytes from 172.20.10.97: icmp_seq=4 ttl=64 time=0.557 ms
64 bytes from 172.20.10.97: icmp_seq=5 ttl=64 time=0.555 ms
^C
--- 172.20.10.97 ping statistics ---
5 packets transmitted, 3 received, 40% packet loss, time 4726ms
rtt min/avg/max/mdev = 0.555/0.566/0.586/0.014 ms
[root@localhost work]# ssh root@172.20.10.97
[root@FriendlyARM /root]# exit
Connection to 172.20.10.97 closed.
[root@localhost work]# ssh root@172.20.10.38
Last login: Thu Mar 24 14:11:51 2011 from 172.20.10.38
[root@localhost ~]# exit
Ssh交互式远程控制:
如果两台主机A、B,根据以上方法我们可以在B端远程控制A,如果反过来想要在A端远程控制B,则需要同样的方法:
1) 在A本地主机生成密钥对
2) 将公钥添加到远程主机B的 authorized_keys 文件中
3) 重启A主机 open-ssh 服务
/etc/init.d/ssh restart