自动ssh登录的几种方法
1. 自动认证ssh/scp登录
本文使用ssh-keygen命令来生成rsa类型的ssh密钥(private key)和公钥(public key),其中密钥留在本地计算机,公钥追加到服务器端的authorized_keys文件中。
在A上运行命令:
# 1.在本地生成公钥和私钥(直接敲击三次回车) ssh-keygen -t rsa # 2.在服务器端新建.ssh目录 ssh root@host1 "mkdir .ssh" # 3.将本机.ssh目录下的公钥复制到服务器端.ssh目录下 scp ~/.ssh/id_rsa.pub root@host1:.ssh/ # 4.将公钥信息追加到authorized_keys文件中 cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
测试:本地主机运行
# 不需要密码, 登录成功 ssh root@host1
这样一来,scp也能够无障碍传输文件了。
2. ssh-copy-id
感谢lyxint的评论,本节已经更新!
ssh-copy-id是一款现成的脚本,可以将本地生成的公钥自动追加到服务器端的.ssh/authorized_keys文件中。
用法:
ssh-copy-id [-i [identity_file]] [user@]machine
/!\注意:-i参数需要指定公钥文件(如,id_rsa.pub)
3. 多个服务器的自动登录
上一节中,生成公钥和密钥的时候使用了默认的名称:id_rsa(密钥)、id_rsa.pub(公钥)。SSH客户端在连接服务器端的时候使用的是密钥(id_rsa),服务器端验证时使用的是保存在authorized_keys文件中的公钥。
虽然私钥和密钥是成对存在的,但是私钥中不保存和服务器有关的信息,也就是一份私钥可以和多个服务器进行配对,只要把公钥追加到对应服务器上的authorized_keys文件中即可。但是这样不安全,由于只有一份私钥,一旦被非法使用将会连累所有服务器。特别是连你都忘记到底和多少服务器配对过的情况下。因此,我们有必要使用多份“私钥-公钥”对于进行验证。
由于SSH客户端默认读取id_rsa密钥,因此我们需要通过-i参数告诉SSH客户端使用哪个密钥。假如我们又生成了id_rsa_host2“私钥-公钥”对,并已将公钥追加到sever的authorized_keys文件中,此时只要使用ssh命令的-i参数指定本地密钥:
# ssh -i /root/.ssh/id_rsa_host2 someone@host2
scp也是一样的
# scp -i /root/.ssh/id_rsa_host2 filename someone@host2:/home/someone
4. 建立ssh/scp通道
比如说我的机器是A,中间服务器为B,目标服务器是C
从A可以ssh到B,从B可以ssh到C,但是A不能直接ssh到C
现在展示利用ssh通道技术(本地端口转发)从A直接传输文件到C
ssh -L1234:C:22 userid@B input B's password (1234是本机A的空闲端口,该指令需要A机器上的root用户权限,实际上是在本机1234端口建立了一个通道)
打开一个新的console,键入:
scp -P1234 filename userid@localhost: input C's password (其中-P制定远程主机A的端口)
References
[1] 自动ssh登录的几种方法
lyxint
2011-07-24 at 15:12
man ssh-copy-id
柳城
2011-12-21 at 15:28
学习了第一种方法。非常好用。
name
2013-05-19 at 18:49
其实关键就是修改远程机器配置文件,http://blog.pickbox.me/archives/177,注意参数PubkeyAuthentication、AuthorizedKeysFile、PasswordAuthentication的配置