注意事项
本文的环境都是系统自带的openssh,若是手动编译安装的,不保证成功。若是自带的,则升级过程中不需要卸载旧版本openssh。
安装之前可以先试试yum更新,若是可以更新,就不需要往下看了
# centos8
$ yum update openssh -y
# 重启sshd
$ systemctl restart sshd
准备工作
系统说明
- 系统版本:CentOS Linux release 7.7.1908 (Core)
- openssh:OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
- openssl: OpenSSL 1.0.2k-fips 26 Jan 2017
下载最新包
本文选择的是: openssh-8.2p1.tar.gz openssl-1.1.1g.tar.gz
$ wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.2p1.tar.gz
$ wget https://ftp.openssl.org/source/openssl-1.1.1g.tar.gz
安装telnet备用(可选)
安装新的ssh之后,只要配置好启动,就可以做到无缝切换,但是中途断开就不能连接了,为了防止这种情况,我们可以安装telnet当作备用,若是你能保证中途不会断开,此步骤可以忽略
1.安装
$ yum install telnet telnet-server -y
2.启动
$ systemctl enable telnet.socket
$ systemctl start telnet.socket
3.连接
# telnet 默认禁止root用户连接,我们先生成一个普通用户
$ useradd testuser
$ passwd testuser
# 本地测试
$ telnet 127.0.0.1
VM_0_6_centos login: testuser
Password:
[testuser@VM_0_6_centos ~]$
# 切换root
[testuser@VM_0_6_centos ~]$ su
升级openssl
备份
$ mv /usr/bin/openssl /usr/bin/openssl_old
安装
$ tar xzvf openssl-1.1.1g.tar.gz
$ cd openssl-1.1.1g/
$ ./config shared && make && make install
配置软连接
$ ln -s /usr/local/bin/openssl /usr/bin/openssl
如果执行openssl version
报下面的错误
openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
则执行下面命令解决:
$ ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/
$ ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/
旧版本:
$ openssl_old version
OpenSSL 1.0.2k-fips 26 Jan 2017
升级openssh
安装所需依赖
$ yum install zlib-devel openssl-devel pam-devel -y
备份
$ mkdir /etc/ssh_old
$ mv /etc/ssh/* /etc/ssh_old/
解压、编译安装
$ tar xzvf openssh-8.2p1.tar.gz
$ cd openssh-8.2p1/
$ ./configure --prefix=/usr/ --sysconfdir=/etc/ssh --with-ssl-dir=/usr/local/lib64/ --with-zlib --with-pam --with-md5-password --with-ssl-engine --with-selinux
# 安装
$ make && make install
# 验证
$ ssh -V
OpenSSH_8.2p1, OpenSSL 1.1.1g 21 Apr 2020
$ ls /etc/ssh
moduli ssh_config sshd_config ssh_host_dsa_key ssh_host_dsa_key.pub ssh_host_ecdsa_key ssh_host_ecdsa_key.pub ssh_host_ed25519_key ssh_host_ed25519_key.pub ssh_host_rsa_key ssh_host_rsa_key.pub
配置
1.修改sshd_config
$ vim /etc/ssh/sshd_config
# 例子:配置root登录, 根据你以前的配置来
PermitRootLogin yes
2.启动
# 移走以前的ssh服务, 防止与新的冲突
$ mv /usr/lib/systemd/system/sshd.service /etc/ssh_old/sshd.service
$ mv /usr/lib/systemd/system/sshd.socket /etc/ssh_old/sshd.socket
# 在解压包中拷贝一些文件
$ cp -a contrib/redhat/sshd.init /etc/init.d/sshd
# 重新启动
$ /etc/init.d/sshd restart
$ systemctl daemon-reload
# 添加自启动
$ chkconfig --add sshd
$ chkconfig sshd on
可能碰到的问题:
/etc/init.d/sshd restart
之后报错
Reloading systemd: [ 确定 ]
Restarting sshd (via systemctl): Job for sshd.service failed because the control process exited with error code. See "systemctl status sshd.service" and "journalctl -xe" for details.
[失败]
是selinux导致,需要关闭
# 临时修改
setenforce 0
# 永久修改
sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
# 重启
/etc/init.d/sshd restart