首先打开telnet预防升级ssh不成功导致远程连接无法使用
1、安装telnet并开启
yum -y install telnet-server telnet xinetd
配置telnet,xinetd必须设置开机自启动不然无法启动
systemctl enable xinetd
systemctl enable telnet.socker
systemctl enable telnet.socket
systemctl enable xinetd
2、设置允许root连接(默认不允许root连接)
主机端执行 tail -f /var/log/secure
客户端 telnet连接输入用户名:root
主机跳出信息如截图
这个pts/2(请根据弹出信息灵活修改)就是登录需要开放的,需要在/etc/securetty里面添加pts/2,即可使用root正常连接。
开始升级源码openssh,本人使用了三个版本的源码包,包括openssh-8.2p1.tar.gz、
openssl-1.1.1g.tar.gz、zlib-1.2.11.tar.gz
1、安装gcc、make命令
yum -y install gcc make
2、解压进入开始编译安装三个软件
tar zxvf openssh-8.2p1.tar.gz
tar zxvf openssl-1.1.1g.tar.gz
tar zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11./configure --prefix=/usr/local/zlib
make && make install
cd ../openssl-1.1.1g
./config --prefix=/usr/local/ssl -d shared
#默认没有编译出.so的文件,而openssh编译的时候需要,所以需要手动添加 -d shared的选项
make && make install
echo '/usr/local/ssl/lib' >> /etc/ld.so.conf
ldconfig -v
cd ../openssh-8.2p1
./configure --prefix=/usr/local/openssh --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/ssl
make && make install
如果是采用root用户登录需要,修改openssh的配置文件 /usr/local/openssh/etc/sshd_config(取消PermitRootLogin注释并改为yes)
3、关掉旧的ssh启动新的ssh
ps -ef|grep sshd 直接杀死 /usr/bin/sshd的进程号
再/usr/local/openssh/sbin/sshd启动新的ssh
4、替换/bin下的ssh为新版的ssh
mv /usr/bin/ssh /usr/bin/ssh_bak
cp /usr/local/openssh/bin/ssh /usr/bin
此时执行ssh -V即可查看现有ssh和ssl版本。
5、替换/sbin下的sshd方便开机自动启动
mv /usr/sbin/sshd /usr/sbin/sshd_bak
cp /usr/local/openssh/sbin/sshd /usr/sbin/
6、替换openssl命令
mv /usr/bin/openssl /usr/bin/openssl_bak
cp /usr/local/ssl/bin/openssl /usr/bin/
7.打开新的ssh服务开机自启动
cp -p contrib/redhat/sshd.init /etc/init.d/sshd
sshd.init 在/usr/local/openssh-8.2p1/contrib/redhat/sshd.init(解压路径下)
升级遇到过的问题
1、如果按照我的流程走一般不会有问题,但是如果例如未在ssl编译处添加 -d share openssh编译容易报以下错误
此时为缺少openssl的动态库可以通过yum -y install openssl-devel 解决,安装过后编译就不需要指定openssl的具体路径了,指定至上一级即可(ssh就直接使用了yum的ssl不用源码)
2、还有编译openssl遇到缺少类似perl包的报错,一般直接yum装一下即可解决。
最后记得关掉你的telnet并取消开机自启动(明文传输不安全)