在 linux 系统管理中,设置免密码登录,进行机器的批量管理是最常用的一个方法。比如针对几十甚至上百台线上机器,通常我们会设置一台“发布机”作为中央控制机对其它线上机器免密码登录,然后进行软件、配置文件的分发、更新、部署。当然了,针对上面的问题,解决方案并非最优且唯一,比如你也可以用 expect 模拟自动输入来完成自动登录验证这一过程,或者用现在一些开源的软件自动化配置和部署工具,比如 Puppet,但这都不在本文的讨论范畴,今天咱们要说的就是这种最原始、最有效、最直接的方式:免密码登录。
假设:现有2台机器
1、个人机192.168.1.110
2、服务器192.168.1.112
要使110无需密码通过ssh登入112miao@u32-192-168-1-110:~/.ssh$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): (忽略:直接回车即可) Enter same passphrase again: (忽略:直接回车即可) Your identification has been saved in /home/miao/.ssh/id_rsa. Your public key has been saved in /home/miao/.ssh/id_rsa.pub. /******************
miao@u32-192-168-1-110:~/.ssh$ scp id_rsa.pub [email protected]:/home/miao/.ssh/192.168.1.110 [email protected]'s password: id_rsa.pub 100% 404 0.4KB/s 00:00 miao@u32-192-168-1-110:~/.ssh$
miao@debian-192-168-1-112:~/.ssh$ cat 192.168.1.110 >> authorized_keys miao@debian-192-168-1-112:~/.ssh$
注: 2,3两步可由命令ssh-copy-id一步到位
miao@ubuntu-192-168-1-110:~/.ssh$ ssh-copy-id [email protected] #如果错误就用 ssh-copy-id -i ~/.ssh/id_rsa.pub IP Password: Now try logging into the machine, with "ssh '[email protected]'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting.
此时整个步骤已经完成,你可以尝试 ssh ip 或者 /etc/hosts 中的主机名试试。
ssh-copy-id:/usr/bin/ssh-copy-id: ERROR: No identities found
表现:# 公钥,私钥已经生成,执行上述命令完毕出现如下错误:
$ ssh-copy-id remote-machine
/usr/bin/ssh-copy-id: ERROR: No identities found
解决方法:
g 之发现缺少公钥路径,通过 -i 加上即可:$ ssh-copy-id -i ~/.ssh/id_dsa.pub user@remote_ip
表现:
ssh hostname
ssh: connect to host localhost port 22: Connection refused
解决方法:
看下对方的主机名是不是在 /etc/hosts 文件中和 ip 做了映射,没有就加上即可。
由于 ssh 的权限直接关系到服务器的安全问题,因此 ssh 每次读取配置都会校验相关文件夹和文件的权限,以防止权限过大对外暴露。
表现:设置了.ssh目录,在authorized_keys设置了key后登录还提示需要输入密码。
解决方法:
注意权限,.ssh权限700,authorized_keys权限600,就KO啦!
chmod 700 ~/.ssh/chmod 600 ~/.ssh/authorized_keys
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授权。 不要设置 PasswordAuthentication no ,它的意思是禁止密码登录,这样就只能本机登录了!
vi /etc/selinux/config SELINUX=disabled chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys 最后重启你的 linux 执行 ssh localhost
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
本文介绍的建立基于免密码登录,双机互信的管理方式简单、直接,但是安全就是个问题了,稍有不慎容易被一锅端,建议加上防火墙的端口、ip 策略,有条件的话试试动态口令,这样会更稳妥些。再有就是当机器规模达到上百、上千台的时候,如果对文件数据、机器状态的实时同步、一致性的要求很高的时候,这种管理方式的弊端就出来了。
http://blogread.cn/it/article/6103?f=wb ssh-copy-id帮你建立信任
http://www.lvtao.net/server/54.html ssh无密码登入设置 ssh-keygen ssh-copy-id
http://hi.baidu.com/leejun_2005/item/bfc0ded296cb8ebf32db907e SSH的安装及登录提示:connection refused的解决办法
http://www.cnblogs.com/qcly/archive/2013/07/27/3219535.html 一次由SELinux引起的ssh公钥认证失败问题