操作系统版本和Openssh版本
查看操作系统版本:
[test@test ssh]$ cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
查看Openssh版本:
[test@test ~]$ ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
下载Openssh安装包,进行安装
OpenSSH安装包下载地址:http://ftp.jaist.ac.jp/pub/OpenBSD/OpenSSH/portable/
我这里下载的8.2版本:
[test@test ~]$ wget http://ftp.jaist.ac.jp/pub/OpenBSD/OpenSSH/portable/openssh-8.2p1.tar.gz
--2020-09-27 16:25:11-- http://ftp.jaist.ac.jp/pub/OpenBSD/OpenSSH/portable/openssh-8.2p1.tar.gz
正在解析主机 ftp.jaist.ac.jp (ftp.jaist.ac.jp)... 150.65.7.130, 2001:df0:2ed:feed::feed
正在连接 ftp.jaist.ac.jp (ftp.jaist.ac.jp)|150.65.7.130|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:1701197 (1.6M) [application/x-gzip]
正在保存至: “openssh-8.2p1.tar.gz”
73% [=========================================================================> ] 1,244,943 12.8KB/s 剩余 33s
[test@test ~]$ tar -xvf openssh-8.2p1.tar.gz
[test@test ~]$ ll
drwxr-xr-x 5 test test 12288 2月 14 2020 openssh-8.2p1
-rw-rw-r-- 1 test test 1701197 2月 14 2020 openssh-8.2p1.tar.gz
[test@test ~]$ cd openssh-8.2p1
##准备编译OpenSS服务,注意编译前,需要将/etc/ssh进行备份如:mv /etc/ssh /etc/ssh-bak
[test@test openssh-8.2p1]$ ./configure --prefix=/usr/local/openssh-8.2 --sysconfdir=/etc/ssh --with-pam --with-zlib --with-md5-passwords --with-tcp-wrappers
##这个过程中会出现各种报错,都是由于编译环境缺少某些插件造成的,按错误安装相关插件即可
这里我的环境主要确实如下插件:
sudo yum install zlib-devel
sudo yum -y install openssl-devel
sudo yum -y install pam-devel
##执行完成后进行编译
[test@test openssh-8.2p1]$ make
[test@test openssh-8.2p1]$ make install
##编译完成后修改环境变量
[test@test openssh-8.2p1]$ vim /etc/profile
##加入以下配置
export SSH_HOME=/usr/local/openssh-8.2 export PATH=$SSH_HOME/bin:$SSH_HOME/sbin:$PATH
[test@test openssh-8.2p1]$ source /etc/profile
##查看ssh是否已经配置成功
[test@test openssh-8.2]$ which ssh
/usr/local/openssh-8.2/bin/ssh
[test@test openssh-8.2]$ ssh -V
OpenSSH_8.2p1, OpenSSL 1.0.2k-fips 26 Jan 2017
[test@test openssh-8.2]$ service sshd restart
当到这里时你以为你升级成功了,too young too simple,因为你旧版的还没有卸载掉,实际上你用的还是7.4版本的,so开始卸载
卸载当前系统默认的OpenSSH
注意:这里卸载之后会导致系统无法通过ssh命令连接,所以在卸载之后一定不要退出当前命令框,直到版本升级完成打开新窗口能够通过ssh命令连接后在退出。如果条件允许最好对系统做快照备份方便恢复。或者在系统中安装telnet命令,如果ssh无法连接则通过telnet连接。
##查看当前openssh
[test@test openssh-8.2p1]$ rpm -qa | grep openssh
openssh-clients-7.4p1-21.el7.x86_64
openssh-server-7.4p1-21.el7.x86_64
openssh-7.4p1-21.el7.x86_64
##开始卸载,卸载前将/etc/ssh中的文件进行备份,因为卸载过程中会自动修改相关文件,主要是:ssh_config和sshd_config
[test@test ssh]$ ll
-rw-r--r-- 1 root root 1484 9月 27 14:18 ssh_config
-rw-r--r-- 1 root root 1484 9月 27 14:18 ssh_config.bak
-rw-r--r-- 1 root root 3388 9月 27 15:42 sshd_config
-rw-r--r-- 1 root root 3388 9月 27 15:42 sshd_config.bak
[test@test openssh-8.2p1]$ rpm -e --nodeps openssh-5.3p1-111.el6.x86_64
[test@test openssh-8.2p1]$ rpm -e --nodeps openssh-server-5.3p1-111.el6.x86_64
[test@test openssh-8.2p1]$ rpm -e --nodeps openssh-clients-5.3p1-111.el6.x86_64
[test@test openssh-8.2p1]$ rpm -e --nodeps openssh-askpass-5.3p1-111.el6.x86_64
##再次查看什么都没有了表示卸载成功
[test@test openssh-8.2p1]$ rpm -qa | grep openssh
##卸载后你会发现ssh_config和sshd_config没有了,这时你的备用文件就起到作用了,恢复一下就行
##从程序包中拷贝可执行文件
[test@test openssh-8.2p1]$ sudo cp /usr/local/src/openssh-8.2p1/contrib/redhat/sshd.init /etc/init.d/sshd
##如果sshd.init文件找不到,通过以下命令查找,如果sshd没有可执行权限记得赋权限
[test@test openssh-8.2p1]$ find / -name sshd.init
##添加到自动启动
[test@test openssh-8.2p1]$ chkconfig --add sshd
[test@test openssh-8.2p1]$ chkconfig sshd on
##重启sshd服务,这一步可能会报错
[test@test openssh-8.2p1]$ sudo systemctl restart sshd
##如果报错通过以下命令查看报错原因
[test@test openssh-8.2p1]$ systemctl status sshd.service
##这我的报错是因为ssh-keygen和sshd不在/usr/bin/和/usr/sbin,找到这两个文件拷贝到相应的目录下,这两个文件在你的安装目录下
[test@test openssh-8.2p1]$ sudo cp ssh-keygen /usr/bin/
[test@test openssh-8.2p1]$ sudo cp sshd /usr/sbin
[test@test openssh-8.2p1]$ ll |grep ssh-keygen
-rwxrwxr-x 1 test test 1720888 9月 24 17:13 ssh-keygen
[test@test openssh-8.2p1]$ ll |grep sshd
-rwxrwxr-x 1 test test 3308176 9月 24 17:12 sshd