集群环境ssh免密码登录设置
本章我们介绍一下如何在集群环境中设置ssh免密码登录。假设我们有如下环境:
machine-A 10.133.146.59 Centos7.3 machine-B 10.133.146.250 Centos7.3
1. ssh免密码登录配置和ssh原理
在网上看到很多关于如何配置ssh免密码登录的文章,但很多都有一些问题。如下我们给出相应的原理图:
如下我们以A机器
免密码登录到B机器
上为例进行讲解,此时A机器
就是客户端,B机器
就是服务器端。
注:这里我们讲述的是从A机器的root账户登录到B机器的root账户。如果要从A机器的www账户登录到B机器的guest账户,则首先需要在主机A上创建账户www,在B机器上创建guest账户,之后相应的很多操作都要切换到对应的账户下执行。
2. 准备工作
2.1 关闭iptables及SELinux
在machine-A
及machine-B
主机上的root账户下执行如下命令关闭防火墙:
# systemctl stop firewalld.service
# systemctl disable firewalld.service
# setenforce 0
# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
2.2 建立主机名与IP地址对应
- 在
机器A
上执行如下命令修改主机名
# hostname machine-A //临时修改,不需要重启即可生效 # hostname -s machine-A # hostnamectl --static --transient --pretty set-hostname machine-A //永久修改,需要重启机器生效 # cat /etc/hosts #127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 #::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.133.146.59 machine-A 10.133.146.250 machine-B
- 在
机器B
上执行如下命令修改主机名
# hostname machine-B //临时修改,不需要重启即可生效 # hostname -s machine-B # hostnamectl --static --transient --pretty set-hostname machine-B //永久修改,需要重启机器生效 # cat /etc/hosts #127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 #::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.133.146.59 machine-A 10.133.146.250 machine-B
2.3 配置ssh
1) 安装sshd服务
在machine-A
及machine-B
上执行如下命令安装sshd服务:
# yum install openssh-server # ps -ef | grep ssh
2) 修改sshd_config配置
这里我们要从机器A
免密码登录到机器B
,这通常需要我们修改机器B
上的ssh配置:
# vi /etc/ssh/sshd_config
#禁用root账户登录,如果是用root用户登录请开启
PermitRootLogin yes
# 是否让 sshd 去检查用户家目录或相关档案的权限数据,
# 这是为了担心使用者将某些重要档案的权限设错,可能会导致一些问题所致。
# 例如使用者的 ~.ssh/ 权限设错时,某些特殊情况下会不许用户登入
StrictModes no
# 是否允许用户自行使用成对的密钥系统进行登入行为,仅针对 version 2。
# 至于自制的公钥数据就放置于用户家目录下的 .ssh/authorized_keys 内
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# 有了证书登录了,就禁用密码登录吧,安全要紧
PasswordAuthentication no
3) 重启ssh
执行如下命令重启机器B
上的ssh服务,并设置为开机启动:
# systemctl restart sshd # systemctl enable sshd
3. 生成公私钥
这里因为我们只需要机器A
免密码登录,因此我们需要在机器A
上生成公私钥文件(如下在机器A上操作):
注:由于我们是采用机器A的root账户免密登录到机器B的root账户,对于机器A来说我们需要在root账户的Home目录下执行如下操作。
1) 清除旧的公私钥文件
# cd ~/.ssh/ # rm -rf id_rsa id_rsa.pub
2) 产生新的公私钥文件
# ls -al ~/.ssh
ls: cannot access /root/.ssh: No such file or directory
# mkdir ~/.ssh
# cd ~/.ssh
# ssh-keygen --help
# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
0b:aa:9e:7a:5f:7d:b5:e9:35:49:27:f4:d6:ba:83:73 root@machine-A
The key's randomart image is:
+--[ RSA 2048]----+
| |
| |
| . |
| . ..|
| . S . o =|
| . o . . + * |
| . . o . o.= |
| .o . . .o.Eo |
|.++.. .o.. |
+-----------------+
# ls
authorized_keys id_rsa id_rsa.pub
上面按三次回车之后,该目录下将会产生id_rsa、id_rsa.pub文件:
-
authorized_keys: 存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥。
-
id_rsa: 生成的私钥文件
-
id_rsa.pub: 生成的公钥文件
-
known_hosts: 已知的主机公钥清单
3) 分发公钥
这里我们需要将机器A
上生成的公钥id_rsa.pub分发给机器B
。有三种方法,这里我们建档介绍一下:
- 方法1
使用ssh-copy-id命令
将主机A上的id_rsa.pub拷贝到主机B:
# ssh-copy-id -i ~/.ssh/id_rsa.pub root@machine-B
- 方法2
在机器A上生成的id_rsa.pub
其实是一个文本文件,我们可以直接通过scp
命令将其拷贝到主机B,然后将其追加到主机B
的authorized_keys
文件中。
在主机A上执行如下命令:
# scp /root/.ssh/id_rsa.pub root@machine-B:/root/.ssh/machine-a-id_rsa.pub
在主机B上执行:
# cat /root/.ssh/machine-a-id_rsa.pub
# cat /root/.ssh/machine-a-id_rsa.pub >> authorized_keys
- 方式3
采用纯手工复制。将本地id_rsa.pub文件(这里为主机A
上的id_rsa.pub文件)的内容拷贝至远程服务器的~/.ssh/authorized_keys
文件中也完全可以的。先使用cat命令查看当前的公钥,然后复制,在到目标服务器上去粘贴。
4. 调整目录及文件访问权限
在机器A
上执行如下命令调整目录的访问权限:
# chmod 0700 ~/.ssh/
在机器B
上执行如下命令调整目录及文件的访问权限:
# chmod 0700 ~/.ssh/ # chmod 0600 ~/.ssh/authorized_keys
5. 测试验证
在机器A
上执行如下命令登录机器B
:
# ssh root@machine-B
自此,免密码登录已经设定完成。注意第一次ssh登录时需要输入密码,再次访问时即可免密码登录。
6. 附录
用OpenSSH的人都知ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts
。当下次访问相同计算机时,OpenSSH会核对公钥,如果公钥不同,OpenSSH会发出警告。假设我们重新安装系统,其公钥信息还在,连接会出现如下所示:
# ssh root@192.169.0.100
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:xv9d+LHzS3VcVK4PVwMcmzoGRQ5ZPqvDGmdJ0CjCB9o.
Please contact your system administrator.
Add correct host key in /Users/faker/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/faker/.ssh/known_hosts:2
ECDSA host key for 192.169.0.100 has changed and you have requested strict checking.
Host key verification failed.
问题处理:
1) 方法1
# rm -rf ~/.ssh/known_hosts
优点:干净利索
缺点:把其他正确的公钥信息也删除,下次链接要全部重新经过认证
2) 方法2
# vi ~/.ssh/known_hosts
删除对应ip的相关rsa信息.
优点:其他正确的公钥信息保留
缺点:还要vi
,还要找到对应信息,稍微优点繁琐
3) 方法3
清除旧的公钥信息:
# ssh-keygen -R 192.168.0.100
优点:快、稳、狠
缺点:没有缺点
[参看]: