Skip to content

升级OpenSSH

TIP

Zlib官网:http://www.zlib.net
OpenSSL官网:https://www.openssl.org
OpenSSH官网:https://www.openssh.com

升级SSH

先通过yum更新,将openssh升级到最新版本

shell
yum update openssh

WARNING

如果报错 /var/run/yum.pid已被锁定

则执行命令删除:

shell
rm -rf /var/run/yum.pid

由于yum中的openssh版本较低,所以需要手动编译升级openssh

安装所需依赖

shell
yum install -y gcc gcc-c++ make zlib-devel openssl-devel pam-devel

下载源码

从官网下载zlib、openssl、openssh的源码包,解压到指定目录

shell
wget https://www.openssl.org/source/openssl-1.1.1t.tar.gz
wget http://www.zlib.net/zlib-1.2.13.tar.gz
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.2p1.tar.gz

解压缩

shell
tar -zxvf openssl-1.1.1t.tar.gz
tar -zxvf zlib-1.2.13.tar.gz
tar -zxvf openssh-8.2p1.tar.gz

编译安装zlib

shell
cd zlib-1.2.13
./configure --prefix=/usr/local/zlib
make && make install

编译安装openssl

shell
cd openssl-1.1.1t
./config --prefix=/usr/local/openssl -d shared
make && make install
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
ldconfig -v

编译安装openssh

编译安装前先备份原有openssh

shell
mv /usr/sbin/sshd /usr/sbin/sshd.bak
mv /usr/bin/ssh /usr/bin/ssh.bak

备份原有openssh配置文件

此处采用systemd管理openssh,所以备份的文件较多

shell
mv /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
mv /etc/ssh/ssh_config /etc/ssh/ssh_config.bak
mv /etc/pam.d/sshd /etc/pam.d/sshd.bak
mv /etc/pam.d/ssh /etc/pam.d/ssh.bak
mv /etc/sysconfig/sshd /etc/sysconfig/sshd.bak
mv /etc/sysconfig/ssh /etc/sysconfig/ssh.bak
mv /usr/lib/systemd/system/sshd.service /usr/lib/systemd/system/sshd.service.bak
mv /usr/lib/systemd/system/sshd.socket /usr/lib/systemd/system/sshd.socket.bak
mv /usr/lib/systemd/system/sshd@.service /usr/lib/systemd/system/sshd@.service.bak
mv /usr/lib/systemd/system/sshd-keygen.service /usr/lib/systemd/system/sshd-keygen.service.bak

如不采用systemd管理openssh,则只需备份以下文件即可

shell
mv /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
mv /etc/ssh/ssh_config /etc/ssh/ssh_config.bak
mv /etc/pam.d/sshd /etc/pam.d/sshd.bak
mv /etc/pam.d/ssh /etc/pam.d/ssh.bak

编译安装openssh

shell
cd openssh-8.2p1
./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/openssl --with-pam --with-md5-passwords --with-privsep-path=/var/empty/sshd --with-privsep-user=sshd --with-tcp-wrappers
make && make install

卸载原有openssh

shell
yum remove openssh

修改配置文件

shell
vim /etc/ssh/sshd_config

修改如下配置:

shell
#Port 22
Port 22
#PermitRootLogin yes
PermitRootLogin yes
#PasswordAuthentication yes
PasswordAuthentication yes
#PermitEmptyPasswords no
PermitEmptyPasswords no
#UseDNS no
UseDNS no
#PubkeyAuthentication yes
PubkeyAuthentication yes

拷贝文件

shell
cp /usr/local/openssh/sbin/sshd /usr/sbin/sshd
cp /usr/local/openssh/bin/ssh /usr/bin/ssh

恢复备份的配置文件

此处OpenSSH采用systemd管理,所以需要恢复的文件较多

shell
cp /user/lib/systemd/system/sshd.service.bak /usr/lib/systemd/system/sshd.service
cp /user/lib/systemd/system/sshd.socket.bak /usr/lib/systemd/system/sshd.socket
cp /user/lib/systemd/system/sshd@.service.bak /usr/lib/systemd/system/sshd@.service
cp /user/lib/systemd/system/sshd-keygen.service.bak /usr/lib/systemd/system/sshd-keygen.service

如不采用systemd管理openssh,则只需拷贝以下文件即可

shell
cp openssh-9.2p1/contrib/redhat/sshd.init /etc/init.d/sshd
cp openssh-9.2p1/contrib/redhat/sshd.pam /etc/pam.d/sshd
cp openssh-9.2p1/contrib/redhat/sshd.sysconfig /etc/sysconfig/sshd

调整文件权限

shell
chmod 755 /usr/sbin/sshd
chmod 755 /usr/bin/ssh
chmod 644 /usr/lib/systemd/system/sshd.service
chmod 644 /usr/lib/systemd/system/sshd.socket
chmod 644 /usr/lib/systemd/system/sshd@.service
chmod 644 /usr/lib/systemd/system/sshd-keygen.service
chmod 600 /etc/ssh/ssh_host_rsa_key
chmod 600 /etc/ssh/ssh_host_dsa_key
chmod 600 /etc/ssh/ssh_host_ecdsa_key
chmod 600 /etc/ssh/ssh_host_ed25519_key

重启sshd服务

shell
systemctl restart sshd

常用命令

查看sshd服务状态

shell
systemctl status sshd

查看sshd版本

shell
sshd -V

查看ssh版本

shell
ssh -V

查看ssh连接

shell
netstat -anp | grep ssh

查看ssh服务端口

shell
ss -tnlp | grep ssh

查看ssh服务进程

shell
ps -ef | grep ssh

查看OpenSSL版本

shell
openssl version

查看zlib版本

shell
zlib version

记录日志

shell
vim /etc/ssh/sshd_config

修改如下配置:

shell
# Logging
SyslogFacility AUTHPRIV
LogLevel INFO

Released under the MIT License.