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

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

(1)问题:

假设:现有2台机器

1、个人机192.168.1.110

2、服务器192.168.1.112

要使110无需密码通过ssh登入112
(2)步骤

1、创建密钥

miao@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.
/******************

2、复制公密到服务器

miao@u32-192-168-1-110:~/.ssh$ scp id_rsa.pub miao@192.168.1.112:/home/miao/.ssh/192.168.1.110
miao@192.168.1.112's password:
id_rsa.pub                                                                   100%  404     0.4KB/s   00:00
miao@u32-192-168-1-110:~/.ssh$

3、添加公密到192.168.112的信任区域

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 miao@192.168.1.112
#如果错误就用
ssh-copy-id -i ~/.ssh/id_rsa.pub IP
Password:
Now try logging into the machine, with "ssh 'miao@192.168.1.112'", and check in:
  .ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.

4、测试

此时整个步骤已经完成,你可以尝试 ssh ip 或者 /etc/hosts 中的主机名试试。

(3)可能遇到的问题

1、在使用 ssh-copy-id 错误提示

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

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 授权失败

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 ,它的意思是禁止密码登录,这样就只能本机登录了!
5、ssh localhost:Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

vi /etc/selinux/config
SELINUX=disabled  

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

最后重启你的 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公钥认证失败问题

时间: 2024-08-13 14:05:57

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

浅谈ssh的相互免密码登录

2台Linux机器之间的相互ssh免密码登录,假设A, B 2台电脑,都有用户user1. 在Host A上, 以用户user1执行命令 ssh-keygen 生成私钥id_rsa和公钥id_rsa.pub, 再执行命令 ssh-copy-id user1@HostB 将公钥拷贝到Host B上,并需要输入Host B上的user1密码,则Host A到Host B ssh 免密码登录 将Host A上的私钥scp到Host B上 scp ~/.ssh/id_rsa user1@HostB:~/

如何在 CentOS / RHEL 上设置 SSH 免密码登录

如何在 CentOS / RHEL 上设置 SSH 免密码登录 作为系统管理员,你计划在 Linux 上使用 OpenSSH,完成日常工作的自动化,比如文件传输.备份数据库转储文件到另一台服务器等.为实现该目标,你需要从主机 A 能自动登录到主机 B.自动登录也就是说,要在 shell 脚本中使用ssh,而无需要输入任何密码. 本文会告诉你怎样在 CentOS/RHEL 上设置 SSH 免密码登录.自动登录配置好以后,你可以通过它使用 SSH (Secure Shell)和安全复制 (SCP)来

如何在CentOS/RHEL上设置SSH免密码登录

作为系统管理员,你计划在 Linux 上使用 OpenSSH,完成日常工作的自动化,比如文件传输.备份数据库转储文件到另一台服务器等.为实现该目标,你需要从主机 A 能自动登录到主机 B.自动登录也就是说,要在 shell 脚本中使用ssh,而无需要输入任何密码. 本文会告诉你怎样在 CentOS/RHEL 上设置 SSH 免密码登录.自动登录配置好以后,你可以通过它使用 SSH (Secure Shell)和安全复制 (SCP)来移动文件. SSH 是开源的,是用于远程登录的最为可靠的网络协议

CentOS/RHEL上设置SSH免密码登录的教程

以下步骤在 CentOS 5/6/7.RHEL 5/6/7 和 Oracle Linux 6/7 上测试通过. 节点1:192.168.0.9 节点2 : 192.168.l.10 步骤一 : 测试节点1到节点2的连接和访问: [root@node1 ~]# ssh root@192.168.0.10 The authenticity of host '192.168.0.10 (192.168.0.10)' can't be established. RSA key fingerprint i

ssh免密码登录-ssh 免密码登录 ,不成功 ,还要密码

问题描述 ssh 免密码登录 ,不成功 ,还要密码 总是做不对,每次还是要密码,,有没有 详细点的步骤呢 ,,谢谢 解决方案 是为了hadoop 做ssh免密码登录吗? 以前写过一篇博客 是关于这个的 你看下 不行继续提问http://blog.csdn.net/p_max/article/details/45701241 解决方案二: 根据文章回复 ,现在可以了,ssh-add 有的时候需要执行下 此命令,感谢

Linux下实现SSH免密码登录和实现秘钥的管理、分发、部署SHELL脚本分享_linux shell

环境: ssh server: 192.168.100.29  server.example.com ssh client: 192.168.100.30  client.example.com 通过root用户建立秘钥认证实现SHELL脚本管理,分发,部署 首先client端创建秘钥对,并将公钥分发给需要登录的SSH服务端 注:公钥相当于锁,私钥相当于钥匙,我们这里相当于在客户端创建一对钥匙和锁,想要做到SSH免密码登录,就相当于我们将锁分发到服务端并装锁,然后客户端就可以利用钥匙开锁. 一.

ssh 免密码登录

注意:如果A机器需要免密码登录B机器,则需要把A机器的公钥id_rsa.pub 加到 B机器的authorized_keys,不要弄反了 ssh 无密码登录要使用公钥与私钥.linux下可以用用ssh-keygen生成公钥/私钥对,下面我以CentOS为例. 有机器A(192.168.1.155),B(192.168.1.181).现想A通过ssh免密码登录到B. 1.在A机下生成公钥/私钥对. [chenlb@A ~]$ ssh-keygen -t rsa  不用输入任何东西,回车三次 它在/

ubuntu16.04服务器配置ssh免密码登录_Linux

在客户端操作 ssh-keygen -t rsa 文件位置写/home/try/.ssh/server_rsa,不使用默认值,我命名为server_rsa担心影响到git的key(因为我的git使用的是默认值) ssh-copy-id root@123.45.56.78(你的服务器ip), 或这使用 cat ~/.ssh/id_rsa.pub | ssh user@123.45.56.78 "mkdir -p ~/.ssh && cat >> ~/.ssh/autho

Linux下实现免密码登录(超详细)_Linux

1.Linux下生成密钥 ssh-keygen的命令手册,通过"man ssh-keygen"命令: 通过命令"ssh-keygen -t rsa" 生成之后会在用户的根目录生成一个 ".ssh"的文件夹 进入".ssh"会生成以下几个文件 authorized_keys:存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥 id_rsa : 生成的私钥文件 id_rsa.pub : 生成的公钥文件 know_hosts