centos7 openssh升级到最新版本

注意事项

本文的环境都是系统自带的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 

可能碰到的问题:

  1. /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 
0%