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个步骤依葫芦画瓢即可。