直接使用ssh连接到服务器时,需要手动输入密码。如果能够不用手动输入密码,且自动登录到SSH服务器的话,那就爽了。
经过一晚上的研究,终于搞定了。(原因在于旧的配置方式已不能正确使用了)
在进行配置前,先假定ssh客户端为ssh-client,ssh服务器为ssh-server(运行ssh服务的一边)。
二. 配置方法
1. 在ssh-client一边使用ssh-keygen生成一对rsa key
$ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/abee/.ssh/id_rsa): <回车>
Enter passphrase (empty for no passphrase): <回车>
Enter same passphrase again: <回车>
执行过程中连续回车即可,成功生成key后。private key 保存在~/.ssh/id_rsa,而public key保存在~/.ssh/id_rsa.pub
2. 在ssh-client一边使用ssh-add将刚生成的private key加入到ssh agent中(旧配置方式没有这步哟)
$ssh-add ~/.ssh/id_rsa
Identity added: id_rsa (id_rsa)
3. 将上述的public key(id_rsa.pub)的内容附加到ssh-server端的.ssh/authorized_keys中
$cat ~/.ssh/id_rsa.pub | ssh username@ssh-server "cat - >> authorized_keys"
4. 此时,配置完成啦。当再次使用ssh username@ssh-server登录时,不再使用密码啦。
三. 重启ssh-client
重启ssh-client后,需要重新使用ssh-add将上面的private key加入到ssh-agent中。因为ssh-agent重启后,其没有保留上次记录的private key,因此需要重新使用ssh-add将private key加入。
经过测试,对同一个private key进行多次ssh-add是没有问题的,总体感觉ssh-add或者ssh-agent会过滤重复的private key。
为了实现一次配置,重复使用。可以考虑将ssh-add的执行放到~/.profile下,每次重新登录X或者Console后,系统就会自动从~/.profile中的ssh-add命令将private key加到ssh-agent中。
$echo "ssh-add ~/.ssh/id_rsa" >> ~/.profile
这个方法在Ubuntu10.04测试通过。
四. 单个ssh-client与多个ssh-server
经过测试,在不止一个ssh-server的情况下,每一个ssh-server可以共用上述的publice key。而ssh-client仅用一个pirvate key.
五. 特别注意
1. 上述使用RSA方式进行ssh身份验证,具体可以查看man ssh。从上面两种环境可以看出,ssh-keygen产生的private key是关键文件,可以说这个就是ssh的登录密码。因此在ssh-client一侧,该文件的权限一般设置为600。
2. 在ssh-server侧存储public key的authorized_keys文件的权限至少是400,即最少也要用户可读。另外由于该public key可以计算出private key,且一般还会写入其他public key,所以其权限一般设置为700。
3. 一般情况下,对于多个ssh-server,最好的方案是针对每一个ssh-server使用唯一一对RSA key。这样可以防止一个private key泄漏后,只有一个ssh-server的ssh安全受影响,其他ssh-server不受影响(因为使用不同的RSA key)。
六. 与旧配置的区别
1. .ssh/目录在ssh-server/ssh-client端都没有权限要求,所以默认的755即可。
2. 上述配置均不需使用root权限,也不需要配置/etc/ssh/sshd_config(默认即可),更不需要重启ssh服务器。
最后,希望对大家有用哈。