1. SSH概述
SSH(Secure Shell)是⼀种协议,它使⽤客⼾端-服务器架构在两个系统之间提供安全通信,并允 许⽤⼾远 程登录到服务器主机系统。和其它远程沟通协议,如 FTP 或 Telnet 不同,SSH 会加密登录会 话,它会阻⽌⼊侵者从连接中收集未加密的密码。
SSH(安全 Shell)是⼀个登录远程机器并在该机器上执⾏命令的程序。SSH 协议通过不安全的 ⽹络在两 个不可信主机间提供安全加密的通讯。您还可以通过安全频道转发 X11 连接和任意 TCP/IP 端 ⼝。
系统范围的 SSH 配置信息保存在 /etc/ssh/ ⽬录中。
⽤⼾特定的 SSH 配置信息保存在⽤⼾主⽬录中的 ~/.ssh/ 中。
2. OPENSSH概述
OpenSSH 是 Linux、UNIX 和类似操作系统⽀持的 SSH 协议的实现。它包括 OpenSSH 客⼾端和 服务器需要的核⼼⽂件。
OpenSSH 组件由以下⽤⼾空间⼯具组成:
ssh 是⼀个远程登录程序(SSH 客⼾端)
. sshd 是⼀个 OpenSSH SSH 守护进程。
scp 是⼀个安全的远程⽂件复制程序。
sftp 是⼀个安全的⽂件传输程序。
ssh-agent 是⽤于缓存私钥的⾝份验证代理。
ssh-add 为 ssh-agent添加私钥⾝份。
ssh-keygen ⽣成、管理并转换 ssh 验证密钥。
ssh-copy-id 是⼀个将本地公钥添加到远程 SSH 服务器上的 authorized_keys ⽂件中的脚本。
ssh-keyscan 可以收集 SSH 公共主机密钥。
OpenSSH 作为 RHEL 的核⼼加密⼦系统之⼀,使⽤系统范围的加密策略。这样可确保在默认配 置中禁⽤ 弱密码套件和加密算法。
OpenSSH 套件使⽤两组配置⽂件:⼀个⽤于客⼾端程序(即 ssh、scp 和 sftp),另⼀个⽤于服 务器( sshd 守护进程)。
3. 连接加密技术介绍
⽬前常⻅的⽹络数据包加密技术通常是:⾮对称密钥。就是通过两把不⼀样的公钥与私钥来进⾏加密与解密的过程 。
公钥(public key):提供给远程主机进⾏数据加密的⾏为,所有⼈都可获得你的公钥来将数据 加密。
私钥(private key):远程主机使⽤你的公钥加密的数据,在本地端就能够使⽤私钥来进⾏解 密。私钥只有⾃⼰拥有。
SSH⼯作过程:在整个通讯过程中,为实现SSH的安全连接,服务端与客⼾端要经历如下五个阶 段:
过程 | 说明 |
---|---|
版本协商阶段 | SSH⽬前包括SSH1和SSH2两个版本,双⽅通过版本协商确定使⽤的版 本 |
密钥和算法协商 阶段 | SSH⽀持多种加密算法,双⽅根据本端和对端⽀持的算法,协商出最终 使⽤的算法 |
认证阶段 | SSH客⼾端向服务器端发起认证请求,服务器端对客⼾端进⾏认证 |
会话请求阶段 | 认证通过后,客⼾端向服务器端发送会话请求 |
交互会话阶段 | 会话请求通过后,服务器端和客⼾端进⾏信息的交互 |
4. 配置并启动SSH 服务器
4.1 启动ssh服务器
[root@node2 ~]# systemctl status sshd
启动之后就会出现如下图:
注:在默认RHEL 安装后,sshd 守护进程已经启动,服务器主机密钥会⾃动被创建。
4.2 服务配置⽂件
[root@node2 ~]# vim /etc/ssh/sshd_config
配置文件信息
注意:更改该配置文件后要重新启动服务器。
5. 配置基于密钥的⾝份验证(Linux------Linux)
5.1 要提⾼系统安全性,通过在 OpenSSH 服务器上禁⽤密码⾝份验证来强制进⾏基于密钥的⾝份验证。也就是关闭ssh连接密码验证登录。
进入配置文件
[root@node2 ~]# vim /etc/ssh/sshd_config
将配置文件中的 PasswordAuthentication 改为 no
重新启动ssh服务器
[root@node2 ~]# systemctl restart sshd
断开当前连接, 再重新连接该服务器时,就会出现如下图所示:
此时已经无法用登录密码登录连接了
5.2 ⽣成 SSH 密钥
对使⽤这个流程在本地系统中⽣成 SSH 密钥对,并将⽣成的公钥复制到OpenSSH 服务器中。如果正确配置了服务器,您可以在不提供任何密码的情况下登录OpenSSH 服务器。
[root@node2 ~]# ssh-keygen
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:p/qkTY/HbJ2+S6m/vIS6Xp9k0fJtVAo7B9gH3AoL3vM root@node2
The key's randomart image is:
+---[RSA 3072]----+
| ... |
| . .o... |
| . o.o+.. .|
| . + .* ..|
| S .o= + .|
| o .EB o |
| +oo.*.. o|
| * ==Oo. . |
| ooB+oo@= |
+----[SHA256]-----+
传递公钥到另一个服务器
[root@node2 ~]# ssh-copy-id root@10.10.10.100 #传送公钥到另一台服务器
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '10.10.10.100 (10.10.10.100)' can't be established.
ED25519 key fingerprint is SHA256:S8Es6Wxoi+qYxjFdYUFMMjEsxAmbDDZnvkT8jsnBUFQ.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes #输入yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@10.10.10.100's password: #输入另一台服务器的登录密码
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@10.10.10.100'"
and check to make sure that only the key(s) you wanted were added.
通过刚才公钥的传输,现在可以免密访问另一台服务器了
[root@node2 ~]# ssh root@10.10.10.100
Activate the web console with: systemctl enable --now cockpit.socket
Register this system with Red Hat Insights: insights-client --register
Create an account or view all your systems at https://red.ht/insights-dashboard
Last login: Tue Mar 28 15:54:15 2023 from 10.10.10.1
[root@node1 ~]#
我们也可以查看另一台服务器拿到的公钥
[root@node1 ~]# cd .ssh/
[root@node1 .ssh]# ls
authorized_keys known_hosts known_hosts.old
[root@node1 .ssh]# cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCtsQIUZ1CDW4PCvUp9q2nkbtC0YbEPEifdXL5yqfYzd7r5wk35RaFbpdd43fIKp4/zwi1X/QGVO9s9KQi0uggwmRDpQ3awEEbUQMfrgvHzAaHl+//vaEonbroxtqQtDrazAyo+J9KHvuqYgU0xneUks3fWsc1axu/kaz0l4R+Lo2sI5cxxJAWQHFNqk9gmD2mZQXQMhvChHM9tSccZ5akTaIww7HgJvlmYz0cc7S5F6S8dRpOuy7uLFkMnuhuKIRwBqiTxpior6GPfhdTbVQvSpOZ6zw6jTRQezRvR2qWEGW+OM/YAF+YPPazB+74YmsQM5Wwesqwwa3aap7qjm/IQUswwmXKXTGEGlk/gb63AV/saSB8f0/GEJ7fDq4tJ3LT0C63lpfLLVKFoBTY7UcVhS+ttjc5n9NZFtwAQHlHBBt3/gm0QYFmNakebPSpE36C1cw+F5+eDXRuIrPktCDrNtgdbeyI2Erb3vRLy0JFcteAk0mJdgLnZ/Wmsph81J9k= root@node2