前言:
1、
OpenSSH是什么
OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现。SSH协议族可以用来进行远程控制, 或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议)、 rcp ftp、 rlogin、rsh都是极为不安全的,并且会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控件和文件传输过程中的数据,并由此来代替原来的类似服务。
2、
OpenSSH和telnet有什么区别?
两者都是通过网络协议连接服务器的工具,但OpenSSH是使用的TCP协议,更为安全,而telnet则是使用的UDP协议,从根本上来说,这个协议是不安全,不可控的,因此,telnet并不能取代sshd,在生产环境通常也是禁止使用telnet来进行远程连接的
3、
为什么要升级OpenSSH
OpenSSH是用于安全远程登录和其他安全网络服务的软件包,对于大多数Linux发行版来说,它都是默认安装的。随着时间的推移,OpenSSH的新版本可能会引入安全性更新和改进,因此升级到最新版本是很有必要的。特别是对于CentOS 7,由于它已经停止了官方支持,因此及时升级系统组件变得更加重要。
4、
OpenSSH升级的必要流程
第一,需要对旧的sshd以及客户端ssh以及相关配置文件做备份;
第二,获取到需要的安装升级包,可以是源码包的形式也可以是rpm包或者deb等等的形式;
第三,需要给自己留一个后门,防止升级失败把自己关在门外的情况发生,通常,我们是暂时启用telnet连接,并测试好telnet,确定telnet是可用的就可以了;
第四、开始正式升级安装sshd服务,可以是yum 或者apt升级的形式,也可以是rpm -Uvh这样的形式,也可以是编译安装并配置动态链接库,运行程序,配置文件这样的形式;
第五、OpenSSH升级安装完成后,检测sshd服务是否正常,可用,检查OpenSSH的各项功能,检查OpenSSH的版本;
第六、如果发现OpenSSH升级有问题,不能正常ssh链接服务器,执行回滚操作,主要是利用第一步的备份文件进行恢复
第七、如果OpenSSH升级确认没有问题,清除安装过程产生的垃圾文件,关闭telnet这个后门,圆满结束此次升级工作
🆗,我已经在虚拟机编译生成了一个可用的OpenSSH rpm包,可用于centos7全系列,欧拉2.0以及欧拉2.5系列服务器
二、
OpenSSH最新版本9.8.p1版本的rpm包下载地址
链接:https://pan.baidu.com/s/1c1bq8wvXQE4fo0BKjpyr-A?pwd=sshd
提取码:sshd
三、
备份sshd
二进制文件不需要备份,主要是备份配置文件,命令为
cp -r /etc/ssh{,.bak}
四、
telnet-server的安装
该服务安装非常简单,一般配置好本地仓库就可以非常简单的安装了,安装命令为:
yum install telnet-server -y
修改telnet的配置文件,不要使用默认端口23,然后开放telnet连接权限,启动telnet服务就可以了
修改/usr/lib/systemd/system/telnet.socke 这个文件,端口修改为10023
[Unit]
Description=Telnet Server Activation Socket
Documentation=man:telnetd(8)
[Socket]
ListenStream=23
Accept=true
[Install]
WantedBy=sockets.target
开放telnet连接权限,这个pts/数字是表示登陆的终端号,必须要有这些才允许登陆:
echo "pts/0">>/etc/securetty
echo "pts/1">>/etc/securetty
echo "pts/2">>/etc/securetty
echo "pts/3">>/etc/securetty
echo "pts/4">>/etc/securetty
启动telnet服务,然后随便打开一个xshell,并配置协议为telnet 测试是否可以成功连接就可以了
启动telnet服务命令:
systemctl start telnet.socket
五、
正式升级OpenSSH
这一步非常简单,如果是把这些rpm包制作成yum仓库,使用yum安装,会自动给你备份配置文件,如果rpm安装,不会自动备份配置文件
rpm命令为:
rpm -Uvh *.rpm
该命令会将旧的rpm包删除,大体执行后的日志如下:
[root@centos10 x86_64]# rpm -Uvh ./*.rpm
Preparing... ################################# [100%]
Updating / installing...
1:openssh-9.8p1-1.el7 ################################# [ 13%]
2:openssh-askpass-gnome-9.8p1-1.el7################################# [ 25%]
3:openssh-clients-9.8p1-1.el7 ################################# [ 38%]
4:openssh-server-9.8p1-1.el7 ################################# [ 50%]
5:openssh-debuginfo-9.8p1-1.el7 ################################# [ 63%]
Cleaning up / removing...
6:openssh-server-7.4p1-21.el7 ################################# [ 75%]
7:openssh-clients-7.4p1-21.el7 ################################# [ 88%]
8:openssh-7.4p1-21.el7 ################################# [100%]
六、
测试sshd服务是否正常
1、
打印sshd服务的版本号
[root@centos10 x86_64]# sshd -V
OpenSSH_9.8p1, without OpenSSL
这里稍微解释一下,without OpenSSL并不是说OpenSSL 就不需要了,只是我编译的时候和OpenSSL解绑了而已,OpenSSH服务完全是可以正常使用的,这点无需担心
2、
ssh-keygen 生成密钥
[root@centos10 x86_64]# ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/root/.ssh/id_ed25519):
/root/.ssh/id_ed25519 already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_ed25519
Your public key has been saved in /root/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:qtiHX2pKI0C88MsRMvVXjMLIXIt5PmOAa1+ziY9clgU root@centos10
The key's randomart image is:
+--[ED25519 256]--+
| o.+. o. |
|.o++o.... |
|=o= +E. |
|o=.= .. |
|ooo =o .S |
|.o.+oo*. |
| +ooB. . |
| .=*ooo |
| .o+*o |
+----[SHA256]-----+
可以看到十分正常的就生成了,但是需要说明一点rsa密钥用不了,原因未知,如果介意就不要用这个升级包了
3、
ssh-copy-id
在上面的百度网盘内有提供,放到系统环境变量下就可以使用了,经测试该命令也是没有问题的
其它的ssh族命令经测试都是正常的,这里我就不把测试结果贴出来了
4、
sshd服务的重启
sshd服务重启命令为
systemctl restart sshd
第一次重启,发现有很多报错,无所谓,这个说的是证书文件权限太高而已,都修改成0600权限就可以了
- Unit sshd.service has finished shutting down.
Jul 08 04:38:48 centos10 systemd[1]: Starting SYSV: OpenSSH server daemon...
-- Subject: Unit sshd.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit sshd.service has begun starting up.
Jul 08 04:38:48 centos10 sshd[27344]: Starting sshd:@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Jul 08 04:38:48 centos10 sshd[27344]: @ WARNING: UNPROTECTED PRIVATE KEY FILE! @
Jul 08 04:38:48 centos10 sshd[27344]: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Jul 08 04:38:48 centos10 sshd[27344]: Permissions 0640 for '/etc/ssh/ssh_host_rsa_key' are too open.
Jul 08 04:38:48 centos10 sshd[27344]: It is required that your private key files are NOT accessible by others.
Jul 08 04:38:48 centos10 sshd[27344]: This private key will be ignored.
Jul 08 04:38:48 centos10 sshd[27344]: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Jul 08 04:38:48 centos10 sshd[27344]: @ WARNING: UNPROTECTED PRIVATE KEY FILE! @
Jul 08 04:38:48 centos10 sshd[27344]: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Jul 08 04:38:48 centos10 sshd[27344]: Permissions 0640 for '/etc/ssh/ssh_host_ed25519_key' are too open.
Jul 08 04:38:48 centos10 sshd[27344]: It is required that your private key files are NOT accessible by others.
Jul 08 04:38:48 centos10 sshd[27344]: This private key will be ignored.
Jul 08 04:38:48 centos10 sshd[27344]: sshd: no hostkeys available -- exiting.
Jul 08 04:38:48 centos10 sshd[27344]: [FAILED]
Jul 08 04:38:48 centos10 systemd[1]: sshd.service: control process exited, code=exited status=1
Jul 08 04:38:48 centos10 systemd[1]: Failed to start SYSV: OpenSSH server daemon.
-- Subject: Unit sshd.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
例如:
chmod 0600 /etc/ssh/ssh_host_ed25519_key
权限文件解决后,查看sshd服务的配置文件,确认没有问题,再次重启sshd服务就可以结束升级了
七、
关于回滚问题
for i in `rpm -qa |grep openssh`;do rpm -e $i --nodeps ;done
一般用for循环强制删除,删除后,利用本地仓库安装原来的旧sshd服务就可以了
本地仓库相关知识见我的博客:Linux的完全本地仓库搭建指南(科普扫盲贴)_linux7如何搭建本地仓库-CSDN博客
OpenSSH-9.8.p1的源码安装包的下载地址:https://openbsd.cs.toronto.edu/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz