linux升级openssh及其相关问题解决方法

一、下载最新版本 OpenSSH

https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/下载最新版本openssh-8.2p1.tar.gz,将版本存放到某个目录下,没有特定要求,比如我放在了/home/ssh目录下
二、编译安装 OpenSSH

tar xzvf openssh-8.2p1.tar.gz
cd openssh-8.2p1
./configure --prefix=/usr --sysconfdir=/etc/ssh 配置文件路径必须是/etc/ssh

三、把老版本的ssh放到另外一个目录,这步是关键,这样就不用卸载旧版本

mkdir /etc/sshbak  新建文件夹
mv  /etc/ssh/* /etc/sshbak/  备份原文件

四、编译源码包

make&&make install

五、编译安装成功后,进行配置

cp /home/ssh/openssh-8.2p1/opensshd.init  /etc/init.d/sshd  复制启动文件
注意:这里的opensshd.init脚本是在openssh安装包中,与你安装包存放路径有关,如果不是放在/home/ssh,则需要做修改
chmod +x /etc/init.d/sshd 添加执行权限

修改配置文件 /etc/ssh/sshd_config

#Port 22  去掉注释#
#PermitRootLogin prohibit-password
去掉注释并改为    PermitRootLogin yes
可以使用下面两条命令
sed -i 's/#Port 22/Port 22/' /etc/ssh/sshd_config
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

注意:必须去掉注释,不然重启后ssh无法连接

六、必须重启ssh服务

service  sshd  restart 或者 /etc/init.d/sshd restart

使用ssh -V 命令查看,这里ssh的版本已升级为8.2。
最关键的一步就是把老的ssh文件夹移到其他地方,然后新的ssh的目录仍然放在/etc/ssh下面,这样的升级过程中ssh就不会断开。

七、问题汇总
当然在安装的过程中并不是都那么顺利,会出现各种问题
1.在运行./configure的时候提示libcrypto not found错误,那可能是缺少依赖
安装依赖

apt  install  libzip-dev  libssl-dev libxml2 openssl-devel

如果apt install命令使用不了,可以尝试使用yum -y install此命令
如果由于网络问题无法下载依赖包的话,可以尝试更新重装openssl,然后运行./configure要指定ssl的路径,操作可以参考第2和第4步。
2.openssl library not found
可能openssl不是默认路径urs/local/ssl,设置下实际路径,不然会报错,一般可以在usr/local路径下查找;也可以使用openssl version -a查找对应ENGINESDIR:的路径
在这里插入图片描述

./configure --prefix=/usr --sysconfdir=/etc/ssh --with-ssl-dir=ssl的实际路径

3.如果运行./configure出现 zlib.h missing,则需要安装zlib源码文件
下载解压,编译安装

wget http://www.zlib.net/zlib-1.2.11.tar.gz
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure --prefix=/usr/local
make
make install

4.出现关于openssl版本低的问题:OpenSSL library version... configure: error: OpenSSL >= 1.0.1 ,则更新升级openssl
下载解压,编译安装

wget https://www.openssl.org/source/openssl-1.1.1.tar.gz --no-check-certificate
tar -zxvf openssl-1.1.1.tar.gz
cd /openssl-1.1.1
./config shared zlib --prefix=/usr/local/openssl
make && make install

备份原来的openssl

mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak 

配置链接新版本

ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl

配置库搜索路径并测试

echo "/usr/local/openssl/lib" >> /etc/ld.so.conf  配置动态库链接
/sbin/ldconfig -v
openssl version -a   查看版本

如果执行openssl version报错,可能是库文件位置不对,需做软连接

ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib/libssl.so.1.1
ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1

或者是

ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1   
ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

5.ssh升级之后连接报algorithm negotiation failed的错误,这时需要手动添加加密算法到/etc/ssh/sshd_config文件中
查询ssh -Q cipher,查询结果因系统而异
linux升级openssh及其相关问题解决方法_第1张图片
将查询到的结果拼接起来写入到/etc/ssh/sshd_config中

echo "Ciphers 3des-cbc,aes128-cbc,aes192-cbc,aes256-cbc,[email protected],aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected],[email protected]" >> /etc/ssh/sshd_config

如果还是连接出错,再添加下面两段

echo "KexAlgorithms diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group1-sha1,[email protected]" >> /etc/ssh/sshd_config
echo "MACs hmac-md5,hmac-sha1,[email protected],hmac-ripemd160,hmac-sha1-96,hmac-md5-96" >> /etc/ssh/sshd_config

6.登录ssh出现Access denied,或是重启ssh服务出现/usr/sbin/sshd: error while loading shared libraries: libcrypto.so.1.1: failed to map segment from shared object: Permission denied问题,可通过关闭SELinux解决

getenforce  查看状态
setenforce 0 临时关闭,但重启会失效
vim /etc/selinux/config
设置SELINUX=disabled,重启机器生效

7.suse系统升级之后连接出现Permission denied (publickey,keyboard-interactive)的问题,网上查询结果都是说密钥认证的问题,但手动生成密钥未能解决问题。后经多番排查,发现是启动脚本的问题
原先步骤中复制启动脚本的路径为

cp /home/ssh/openssh-8.2p1/opensshd.init  /etc/init.d/sshd

需更改为

cp /home/ssh/openssh-8.2p1/contrib/suse/rc.sshd  /etc/init.d/sshd

你可能感兴趣的:(Linux系统)