0


centos7|操作系统|低版本的OpenSSH升级到最新版本OpenSSH-9.8.p1

言:

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/1yYvThN2ayjWZLlHOUqVHXA?pwd=open 提取码:open

以上是已经编译好的rpm包,直接就可用的,适用于centos7和欧拉2.0,或者配置成yum仓库,或者直接yum localinstall ,或者rpm -ivh 都可以,完全无毒,可放心使用

附件1是最新版的openssh-9.8的安装包,附件2是ssh-copy-id程序,附件3是openssh-9.3的升级文档,里面包含有telnet-server,附件4是通用的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

八、

通用的sshd配置文件:

此配置文件基本已在几十台服务器使用过,基本没有什么问题

cat >/etc/ssh/sshd_config<<EOF

$OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $

This is the sshd server system-wide configuration file. See

sshd_config(5) for more information.

This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/openssh/bin

The strategy used for options in the default sshd_config shipped with

OpenSSH is to specify options with their default value where

possible, but leave them commented. Uncommented options override the

default value.

#Port 22

Port 10022

#AddressFamily any

#ListenAddress 0.0.0.0

#ListenAddress ::

#HostKey /usr/local/openssh/etc/ssh_host_rsa_key

#HostKey /usr/local/openssh/etc/ssh_host_ecdsa_key

#HostKey /usr/local/openssh/etc/ssh_host_ed25519_key

Ciphers and keying

#RekeyLimit default none

Logging

#SyslogFacility AUTH

#LogLevel INFO

Authentication:

#LoginGraceTime 2m

#PermitRootLogin yes

#StrictModes yes

#MaxAuthTries 6

#MaxSessions 10

#PubkeyAuthentication yes

The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2

but this is overridden so installations will only check .ssh/authorized_keys

AuthorizedKeysFile .ssh/authorized_keys

#AuthorizedPrincipalsFile none

#AuthorizedKeysCommand none

#AuthorizedKeysCommandUser nobody

For this to work you will also need host keys in /usr/local/openssh/etc/ssh_known_hosts

#HostbasedAuthentication no

Change to yes if you don't trust ~/.ssh/known_hosts for

HostbasedAuthentication

#IgnoreUserKnownHosts no

Don't read the user's ~/.rhosts and ~/.shosts files

#IgnoreRhosts yes

To disable tunneled clear text passwords, change to no here!

#PasswordAuthentication yes

#PermitEmptyPasswords no

Change to no to disable s/key passwords

#ChallengeResponseAuthentication yes

Kerberos options

#KerberosAuthentication no

#KerberosOrLocalPasswd yes

#KerberosTicketCleanup yes

#KerberosGetAFSToken no

GSSAPI options

#GSSAPIAuthentication no

#GSSAPICleanupCredentials yes

Set this to 'yes' to enable PAM authentication, account processing,

and session processing. If this is enabled, PAM authentication will

be allowed through the ChallengeResponseAuthentication and

PasswordAuthentication. Depending on your PAM configuration,

PAM authentication via ChallengeResponseAuthentication may bypass

the setting of "PermitRootLogin without-password".

If you just want the PAM account and session checks to run without

PAM authentication, then enable this but set PasswordAuthentication

and ChallengeResponseAuthentication to 'no'.

#UsePAM no

#AllowAgentForwarding yes

#AllowTcpForwarding yes

#GatewayPorts no

#X11Forwarding no

#X11DisplayOffset 10

#X11UseLocalhost yes

#PermitTTY yes

#PrintMotd yes

#PrintLastLog yes

#TCPKeepAlive yes

#PermitUserEnvironment no

#Compression delayed

#ClientAliveInterval 0

#ClientAliveCountMax 3

#UseDNS no

#PidFile /var/run/sshd.pid

#MaxStartups 10:30:100

#PermitTunnel no

#ChrootDirectory none

#VersionAddendum none

no default banner path

#Banner none

override default of no subsystems

Subsystem sftp /usr/libexec/openssh/sftp-server

Example of overriding settings on a per-user basis

#Match User anoncvs

X11Forwarding no

AllowTcpForwarding no

PermitTTY no

ForceCommand cvs server

PermitRootLogin yes

PubkeyAuthentication yes

EOF

九、

升级OpenSSH经常遇到的三个错误:

第一种情况:

如果有遇到sshd服务状态(systemctl status sshd命令)里带有Permissions字样的报错,例如下面这样的:

[root@pg2 aarch64]# systemctl status sshd

● sshd.service - SYSV: OpenSSH server daemon

Loaded: loaded (/etc/rc.d/init.d/sshd; bad; vendor preset: enabled)

Active: active (running) since Thu 2024-07-11 12:58:12 CST; 10s ago

 Docs: man:systemd-sysv-generator(8)

Process: 30984 ExecStop=/etc/rc.d/init.d/sshd stop (code=exited, status=0/SUCCESS)

Process: 31113 ExecStart=/etc/rc.d/init.d/sshd start (code=exited, status=0/SUCCESS)

Main PID: 31121 (sshd)

CGroup: /system.slice/sshd.service

       └─31121 sshd: /usr/sbin/sshd [listener] 0 of 10-100 startups

Jul 11 12:58:12 pg2 sshd[31113]: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Jul 11 12:58:12 pg2 sshd[31113]: Permissions 0640 for '/etc/ssh/ssh_host_ecdsa_key' are too open.

Jul 11 12:58:12 pg2 sshd[31113]: It is required that your private key files are NOT accessible by others.

Jul 11 12:58:12 pg2 sshd[31113]: This private key will be ignored.

Jul 11 12:58:12 pg2 sshd[31113]: Unable to load host key "/etc/ssh/ssh_host_ecdsa_key": bad permissions

Jul 11 12:58:12 pg2 sshd[31113]: Unable to load host key: /etc/ssh/ssh_host_ecdsa_key

Jul 11 12:58:12 pg2 sshd[31121]: Server listening on 0.0.0.0 port 10022.

Jul 11 12:58:12 pg2 sshd[31113]: [ OK ]

Jul 11 12:58:12 pg2 sshd[31121]: Server listening on :: port 10022.

提示有哪些报错的文件赋权,赋权后重启sshd服务,示例如下:

chmod 0600 /etc/ssh/ssh_host_ecdsa_key

systemctl restart sshd

第二种情况:

如果sshd服务状态(systemctl status sshd命令)内有format字样,需要回退到低版本7.4p,然后重新生成sshd服务的证书文件,一般是四个

报错如下,主要是有format字样

[root@pg1 aarch64]# chmod -Rf 0600 /etc/ssh/

[root@pg1 aarch64]# systemctl restart sshd

[root@pg1 aarch64]# systemctl status sshd

● sshd.service - SYSV: OpenSSH server daemon

Loaded: loaded (/etc/rc.d/init.d/sshd; bad; vendor preset: enabled)

Active: active (running) since Thu 2024-07-11 14:14:39 CST; 11s ago

 Docs: man:systemd-sysv-generator(8)

Process: 65356 ExecStart=/etc/rc.d/init.d/sshd start (code=exited, status=0/SUCCESS)

Main PID: 65364 (sshd)

CGroup: /system.slice/sshd.service

       └─65364 sshd: /usr/sbin/sshd [listener] 0 of 10-100 startups

Jul 11 14:14:39 pg1 systemd[1]: Starting SYSV: OpenSSH server daemon...

Jul 11 14:14:39 pg1 sshd[65356]: Starting sshd:Unable to load host key "/etc/ssh/ssh_host_rsa_key": invalid format

Jul 11 14:14:39 pg1 sshd[65356]: Unable to load host key: /etc/ssh/ssh_host_rsa_key

Jul 11 14:14:39 pg1 sshd[65356]: Unable to load host key "/etc/ssh/ssh_host_ecdsa_key": invalid format

Jul 11 14:14:39 pg1 sshd[65356]: Unable to load host key: /etc/ssh/ssh_host_ecdsa_key

Jul 11 14:14:39 pg1 sshd[65364]: Server listening on 0.0.0.0 port 10022.

Jul 11 14:14:39 pg1 sshd[65364]: Server listening on :: port 10022.

Jul 11 14:14:39 pg1 sshd[65356]: [ OK ]

Jul 11 14:14:39 pg1 systemd[1]: Started SYSV: OpenSSH server daemon.

证书生成命令如下:

ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key

ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key

ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key

每个命令都需要先手动输入y,表示同意覆盖,然后回车直到命令结束

证书文件生成后,在利用for循环命令删除低版本sshd,然后再次升级sshd就可以正常升级完成了,如果懒得修改配置文件,直接使用上面的通用配置文件就可以了

第三种情况:

systemctl status sshd 查看sshd服务状态,里面有shadow字样报错

这个错误是由于操作系统的selinux没有关闭产生的,非常简单,关闭selinux,如果服务器不方便重启,就执行如下命令暂时关闭selinux:

setenforce 0

本文转载自: https://blog.csdn.net/alwaysbefine/article/details/140252735
版权归原作者 晚风_END 所有, 如有侵权,请联系我们删除。

“centos7|操作系统|低版本的OpenSSH升级到最新版本OpenSSH-9.8.p1”的评论:

还没有评论