抛开场景聊需求都是耍流氓
在很多企业和高校内做私有化部署的服务的时候,信息中心都会给一台服务器,不管是虚拟机或者是实体机,都会定期做漏洞扫描,每次一扫出来,都是很多漏洞,要求中高风险的漏洞必须修复,否则谁没事去搞这玩意呢。
比较麻烦的是,这些服务器大多都是纯离线,利用VPN、跳板机、远程桌面进行访问的,这无疑给软件升级带来了很多麻烦。
这次需要升级的内容是OpenSSH,为什么有这篇文章,因为我参考了很多文章,内容很多都不一样,有点连版本号也没有,都是拼拼凑凑来实现的,所以在这里做个记录
步骤
安装Telnet
为了确保在升级过程顺利,最好安装一个Telnet服务,来确保后续可以继续操作,否则一旦服务器失联,一定是一件头皮发麻的事情。
-
下载以下文件上传到服务器:
参考了文章: https://lblog.net/?p=282 但是此站点现在已经无法访问telnet-0.17-65.el7_8.x86_64.rpm
telnet-server-0.17-65.el7_8.x86_64.rpm
xinetd-2.3.15-14.el7.x86_64.rpm -
安装以上文件
rpm -ivh xinetd-2.3.15-14.el7.x86_64.rpm rpm -ivh telnet-0.17-65.el7_8.x86_64.rpm rpm -ivh telnet-server-0.17-65.el7_8.x86_64.rpm
-
修改配置
如果没有这个文件,就新建vi /etc/xinetd.d/telnet
主要需要将disable改为no,后续可将其改为yes重启或关闭xinetd服务即可关闭telnet
service telnet { flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID disable = no }
-
在另外的机器上使用telnet命令连接你的服务器,确保可以正常使用
升级OpenSSH
接下来的升级,我大部分是参考了 https://www.cnblogs.com/lfxx/p/17584636.html 这篇文章,但是中间编译 OpenSSH的时候失败了,还是在上面那篇文章上找到了解决办法
-
下载最新版的文件,包括zlib,openssl,和openssh
zlib官网:https://zlib.net/ 我下载的是 1.3.1
openssl官网:https://www.openssl.org/source/old/1.1.1/index.html 下载1.1.1?版本的,我这里使用的是1.1.1u
openssh官网:https://www.openssh.com/openbsd.html 我使用的是 openssh-9.7.tar.gz将这些文件上传到你的服务器上去
-
确保你有gcc
没有就安装,下载地址参考: https://blog.csdn.net/vipee1/article/details/127264883 tar zxvf /root/gcc-c++-4.8.5-39.el7.x86_64.tar.gz cd /root/cd gcc-c++-4.8.5-39.el7.x86_64 rpm -Uvh *.rpm --nodeps --force
-
安装zlib
#进入解压的zlib目录 ./configure --prefix=/usr/local/zlib make && make install echo '/usr/local/zlib/lib' >> /etc/ld.so.conf ldconfig -v
-
安装openSSL
#进入解压好的openssl目录中 ./config --prefix=/usr/local/ssl -d shared make && make install echo '/usr/local/ssl/lib' >> /etc/ld.so.conf ldconfig -v
-
编译安装openSSH
#进入openssh目录 ./configure --prefix=/usr/local/openssh --with-zlib=/usr/local/zlib --with-ssl-dir=/usr/local/ssl make && make install
-
卸载原来的包,并且配置ssh
#卸载原来的包 rpm -qa | grep openssh | grep -v client | xargs rpm -e --nodeps
#配置ssh并备份 echo 'PermitRootLogin yes' >> /usr/local/openssh/etc/sshd_config echo 'PubkeyAuthentication yes' >> /usr/local/openssh/etc/sshd_config echo 'PasswordAuthentication yes' >> /usr/local/openssh/etc/sshd_config mv -f /etc/ssh/sshd_config /etc/ssh/sshd_config.bak scp /usr/local/openssh/etc/sshd_config /etc/ssh/sshd_config mv -f /usr/sbin/sshd /usr/sbin/sshd.bak scp /usr/local/openssh/sbin/sshd /usr/sbin/sshd mv -f /usr/bin/ssh /usr/bin/ssh.bak scp /usr/local/openssh/bin/ssh /us r/bin/ssh mv -f /usr/bin/ssh-keygen /usr/bin/ssh-keygen.bak scp /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen mv -f /etc/ssh/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub.bak scp /usr/local/openssh/etc/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ecdsa_key.pub scp /root/openssh-9.3p1/contrib/redhat/sshd.init /etc/init.d/sshd chmod +x /etc/init.d/sshd chkconfig --add sshd chkconfig sshd on chmod 600 /etc/ssh/ssh_host_rsa_key chmod 600 /etc/ssh/ssh_host_ecdsa_key chown -R root.root /var/empty/sshd chmod 744 /var/empty/sshd echo "---重启sshd---" systemctl restart sshd ssh -V