SSH介绍
SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定;SSH 为建立在应用层和传输层基础上的安全协议。SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
SSH原理:节点A要实现无密码公钥认证连接到节点B上时。需要在客户端A上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到服务端B上。当客户端A通过ssh连接服务端B时,服务端B就会生成一个随机数并用客户端A的公钥对随机数进行加密,并发送给客户端A。客户端A收到加密数之后再用私钥进行解密,并将解密数回传给B,B确认解密数无误之后就允许A进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将客户端A公钥复制到B上。
通俗一点说,A要免密登录B机器,需要先将A的公钥(id_rsa.pub文件内容)放到B机器(~/.ssh目录下)的authorized_keys文件中。
准备
操作系统为:centos-release-7-5.1804.el7.centos.2.x86_64
三台机器
机器名 | IP |
master | 192.168.0.128 |
slave1 | 192.168.0.129 |
slave2 | 192.168.0.130 |
检查是否安装SSH
[root@slave1 ~]# rpm -qa |grep ssh
libssh2-1.4.3-10.el7_2.1.x86_64
openssh-clients-7.4p1-16.el7.x86_64
openssh-7.4p1-16.el7.x86_64
openssh-server-7.4p1-16.el7.x86_64
已经安装里SSH,如果没安装的话,使用yum install ssh安装。
在hosts里添加各机器名和IP
在hosts里添加各机器名和IP的映射后,就可以通过机器名访问对应的机器,不需要记忆和输入复杂的IP了。
在文件/etc/hosts文件的末尾添加如下内容:
192.168.0.128 master
192.168.0.129 slave1
192.168.0.130 slave2
机器master免密登录slave1和slave2:
步骤1: 在master机器上执行ssh-keygen -t rsa命令:
[root@master ~]$ 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:
SHA256:uQ/B0OnhIiG8P2Uj6NmVZ1+ZiXgRNiBFoCqMI82HzDI root@master
The key's randomart image is:
+---[RSA 2048]----+
| o++.+ |
| . . o o o |
| o o . + . |
|o= * . * + o + |
|E.X + B S o = |
|.* = * = = . |
| o + o . |
| . o |
| . |
+----[SHA256]-----+
[root@master ~]$
步骤2:将master机器上的公钥( id_rsa.pub)传送到slave1和slave2上
# 1.进入master的.ssh文件夹
[root@master ~]$ cd ~/.ssh/
# 2. 执行传送公钥指令:
# 命令样式: ssh-copy-id -i id_rsa.pub root@远端ip
[root@master .ssh]$ ssh-copy-id -i id_rsa.pub root@slave1
[root@master .ssh]$ ssh-copy-id -i id_rsa.pub root@slave2
步骤3:免密登录测试
# master免密登录slave1:
[root@master .ssh]$ ssh slave1
Last login: Tue Aug 4 09:39:44 2020 from 192.168.0.128
[root@slave1 ~]$
# master免密登录slave2:
[root@master .ssh]$ ssh slave2
Last login: Tue Aug 4 09:39:51 2020 from 192.168.0.128
[root@slave2 ~]$
slave1免密登录master和slave2,slave2免密登录master和slave1,按照上面3个步骤依葫芦画瓢即可。