ssh如何实现免密码登录?
在 linux 系统管理中,设置免密码登录,进行机器的批量管理是最常用的一个方法。比如针对几十甚至上百台线上机器,通常我们会设置一台“发布机”作为中央控制机对其它线上机器免密码登录,然后进行软件、配置文件的分发、更新、部署。当然了,针对上面的问题,解决方案并非最优且唯一,比如也可以用 expect 模拟自动输入来完成自动登录验证这一过程,或者用现在一些开源的软件自动化配置和部署工具,比如 Puppet。
本节的重点是:ssh免密码登录。
1)问题:
假设:现有2台机器
1、个人机192.168.1.110
2、服务器192.168.1.112
要使110无需密码通过ssh登入112
2)步骤
1、创建密钥
2、复制公密到服务器
3、添加公密到192.168.112的信任区域
注: 2,3两步可由命令ssh-copy-id一步到位
4、测试
此时整个步骤已完成,可以尝试 ssh ip 或 /etc/hosts 中主机名试试。
3)可能遇到的问题
1、在使用 ssh-copy-id 错误提示
表现:
解决方法:
g 之发现缺少公钥路径,通过 -i 加上即可:
2、ssh ip 可以成功登录,ssh hostname 却失败
表现:
解决方法:
看下对方的主机名是不是在 /etc/hosts 文件中和 ip 做了映射,没有就加上即可。
3、ssh 的配置目录权限问题
由于 ssh 的权限直接关系到服务器的安全问题,因此 ssh 每次读取配置都会校验相关文件夹和文件的权限,以防止权限过大对外暴露。
表现:
设置了.ssh目录,在authorized_keys设置了key后登录还提示需要输入密码。
解决方法:
注意权限,.ssh权限700,authorized_keys权限600。
4、ssh localhost:publickey 授权失败
sudo vi /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
service sshd restart
注:ssh可同时支持publickey和password两种授权方式,publickey默认不开启,需要配置为yes。
如果客户端不存在.ssh/id_rsa,则使用password授权;存在则使用publickey授权;
如果publickey授权失败,依然会继续使用password授权。(www.jb200.com 脚本学堂)
不要设置 PasswordAuthentication no ,它的意思是禁止密码登录,这样就只能本机登录了!
5、ssh localhost:Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
最后重启linux 执行:
ssh localhost
6、ssh localhost:需要密码
7、ssh ip 或 hostname 均提示:connection refused
目标主机的ssh server端程序是否安装、服务是否启动,是否在侦听22端口;
是否允许该用户登录;
本机是否设置了iptables规则,禁止了ssh的连入/连出;
具体请参考: http://hi.baidu.com/leejun_2005/item/bfc0ded296cb8ebf32db907e
4)最后的问题
以上介绍的建立基于免密码登录,双机互信的管理方式简单、直接,但是安全就是个问题了,稍有不慎容易被一锅端,建议加上防火墙的端口、ip 策略,有条件的话试试动态口令,这样会更稳妥些。
另外,当机器规模达到上百、上千台的时候,如果对文件数据、机器状态的实时同步、一致性的要求很高的时候,这种管理方式的弊端就出来了。