ssh 双机互信:免密码登录设置步骤及常见问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ssh 双机互信:免密码登录设置步骤及常见问题相关的知识,希望对你有一定的参考价值。

参考技术A 在 linux 系统管理中,设置免密码登录,进行机器的批量管理是最常用的一个方法。比如针对几十甚至上百台线上机器,通常我们会设置一台“发布机”作为中央控制机对其它线上机器免密码登录,然后进行软件、配置文件的分发、更新、部署。当然了,针对上面的问题,解决方案并非最优且唯一,比如你也可以用 expect 模拟自动输入来完成自动登录验证这一过程,或者用现在一些开源的软件自动化配置和部署工具,比如 Puppet,但这都不在本文的讨论范畴,今天咱们要说的就是这种最原始、最有效、最直接的方式:免密码登录。

(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 错误提示

表现:
公钥,私钥已经生成,执行上述命令完毕出现如下错误:

$ ssh-copy-id remote-machine

/usr/bin/ssh-copy-id: ERROR: No identities found

解决方法:

g 之发现缺少公钥路径,通过 -i 加上即可:

2、ssh ip 可以成功登录,ssh hostname 却失败

表现:

ssh hostname

ssh: connect to host localhost port 22: Connection refused

解决方法:

看下对方的主机名是不是在 /etc/hosts 文件中和 ip 做了映射,没有就加上即可。

3、ssh 的配置目录权限问题

由于 ssh 的权限直接关系到服务器的安全问题,因此 ssh 每次读取配置都会校验相关文件夹和文件的权限,以防止权限过大对外暴露。

表现:
设置了.ssh目录,在authorized_keys设置了key后登录还提示需要输入密码。

解决方法:

注意权限,.ssh权限700,authorized_keys权限600,就KO啦!

chmod 700 ~/.ssh/
chmod 600 ~/.ssh/authorized_keys

4、ssh localhost:publickey 授权失败

注:ssh可同时支持publickey和password两种授权方式,publickey默认不开启,需要配置为yes。
如果客户端不存在.ssh/id_rsa,则使用password授权;存在则使用publickey授权;
如果publickey授权失败,依然会继续使用password授权。
不要设置 PasswordAuthentication no ,它的意思是禁止密码登录,这样就只能本机登录了!
5、ssh localhost:Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

最后重启你的 linux 执行 ssh localhost
6、ssh localhost:需要密码

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

7、ssh ip 或 hostname 均提示:connection refused

目标主机的ssh server端程序是否安装、服务是否启动,是否在侦听22端口;
是否允许该用户登录;
本机是否设置了iptables规则,禁止了ssh的连入/连出;
具体请参考: http://hi.baidu.com/leejun_2005/item/bfc0ded296cb8ebf32db907e
(4)最后的问题

本文介绍的建立基于免密码登录,双机互信的管理方式简单、直接,但是安全就是个问题了,稍有不慎容易被一锅端,建议加上防火墙的端口、ip 策略,有条件的话试试动态口令,这样会更稳妥些。再有就是当机器规模达到上百、上千台的时候,如果对文件数据、机器状态的实时同步、一致性的要求很高的时候,这种管理方式的弊端就出来了。

(5)Refer:

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公钥认证失败问题

SSH免密钥互信及企业案例

SSH远程免密码: 
原理简述:客户端 创建公钥和私钥,公钥是锁,私钥是自己留在客户端的钥匙。 客户端将公钥(锁)发出到服务端,以后自己就能用客户端本地的私钥进行登陆,不用输入密码!
1.客户端,和服务端都 执行命令后生成公钥和私钥 (客户端IP: 130, 服务端IP :131):
ssh-keygen -t rsa -C "ssh-client"      <----------------->ssh-keygen
其中-C 是用来做描述的, 可以不用这个参数
密钥类型可以用 -t 选项指定。如果没有指定则默认生成用于SSH-2的RSA密钥。
所以  可以把命令简写为: ssh-keygen
2.客户端 将公钥 发送给服务端的特定位置,并改名。(需要在服务端   mkdir /root/.ssh/)

scp /root/.ssh/id_rsa.pub [email protected]:/root/.ssh/authorized_keys 

或者
ssh-copy-id  -i  .ssh/id_rsa.pub [email protected]192.168.126.131
3.修改服务端收到的公钥权限(IP:131)
chmod 600 /root/.ssh/authorized_keys
4.客户端ssh登陆服务端实现免密码    (第一次登陆需要输入yes)
ssh -l root 192.168.126.131
注意:要保证.ssh和authorized_keys都只有用户自己有写权限。否则验证无效。(今天就是遇到这个问题,找了好久问题所在),其实仔细想想,这样做是为了不会出现系统漏洞。
 
===============================================
公司的一个需求:
ABCD等多台服务器  需要传输文件到 S服务器上,但需要免交互。
 
解决方案:
ABCD等多台服务器上 利用ssh-keygen命令生成公钥 和 私钥, 将其中一台服务器的公钥/root/.ssh/id_rsa.pub传输到 S服务器 改名为 ./ssh/authorized.key;然后 同样在BCD服务器上创建公钥和私钥,通过查看公钥文件,然后将每台服务器的公钥文件内容拷贝到 S服务器的 authorized.key 文件中。
解决问题!

 

 

以上是关于ssh 双机互信:免密码登录设置步骤及常见问题的主要内容,如果未能解决你的问题,请参考以下文章

多台服务器双机互信,免密码登录,快捷登录多台服务器

linux下配置远程免密登录方法教程

linux配置了免密,如何不使用免密登录

Archlinux配置免密Samba

linux学习日记 | 非root普通用户添加互信进行免密登录服务器

linux学习日记 | 非root普通用户添加互信进行免密登录服务器