故事背景
最近SSH远程连接又爆出漏洞,需要升级,喜闻乐见。上次已经升级过一次,有两台机升级成功,两台机升到一半失败了,说无法在目录中创建文件,root的权限也无法创建就很奇怪,使用sudo也不行,怀疑是运维对这个root账号权限做了什么管控...SSH升级失败的话如果断了再次登录就登不上了,最尴尬的是上次用那个CDSN的文章,备份的文件少了两个。。结果就是还原不了原版本,最后用了各种方法,加班2个钟终于回滚了原来的版本,好像是用yum install openssh搞定了。
准备工作
1、升级SSH存在中断风险,如果SSH升级失败将会导致终端无法登录,建议在使用本地虚拟机进行测试后对线上生产环境进行升级操作!!
2、升级有风险操作需谨慎,务必先要安装好telnet后再升级,使用telnet兜底!!
3、 升级前一定要对ssh进行备份,避免更新失败时能回滚。
4、升级前一定要提前在测试环境验证,运行一段时间,确认没有问题才可在生产环境进行更新操作。
5、对于生产环境主机数量比较多时,建议先在1台或几台服务器上更新,运行一段时间,确认没有问题再执行批量更新操作。
开启telnet可参考之前的文章: juejin.cn/post/735014…
对于一些旧的服务器,运行第一句yum install xxx就报错了。。
不是404就是解析不到host,百度之后发现默认的yum镜像源都是外网连不上,需要更换成阿里云镜像。
##1、查询是否通网络
ping baidu.com
##2、备份配置文件
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
##3、替换为阿里云镜像源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
##4、清理缓存并重新生成缓存
yum clean all
yum makecache
更换完之后服务器能正常使用yum下载软件
升级SSH
升级SSH参考链接:blog.csdn.net/qq_25983579…
1、安装依赖和安装包
yum install -y gcc gcc-c++ perl perl-IPC-Cmd pam pam-devel
cd /usr/local/src
wget https://www.openssl.org/source/openssl-3.1.0.tar.gz --no-check-certificate
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.9p1.tar.gz
wget https://www.zlib.net/fossils/zlib-1.2.13.tar.gz
tar axf openssh-9.9p1.tar.gz && tar axf openssl-3.1.0.tar.gz && tar axf zlib-1.2.13.tar.gz
2、备份文件
##备份openssl
mv /usr/bin/openssl /usr/bin/openssl.old
##备份openssh
mv /etc/ssh /etc/ssh.bak
mkdir /usr/bin/bak
\cp -arpf /usr/bin/{cp,sftp,ssh,ssh-add,ssh-agent,ssh-keygen,ssh-keyscan} /usr/bin/bak/
\cp -arpf /usr/sbin/sshd /usr/sbin/sshd.bak
\cp -arpf /etc/sysconfig/sshd /etc/sysconfig/sshd.bak
\cp -arpf /etc/pam.d/sshd /etc/pam.d/sshd.bak
3、安装zlib和openssl
##安装zlib
cd zlib-1.2.13
./configure --prefix=/usr/local/zlib-1.2.13 && make -j 4 && make install
##安装openssl
cd openssl-3.1.0
./config --prefix=/usr/local/openssl-3.1.0
make -j 4 && make install
##编辑ld.so.conf文件
echo '/usr/local/openssl-3.1.0/lib64' >> /etc/ld.so.conf
ldconfig -v
##创建操作系统软链接
ln -s /usr/local/openssl-3.1.0/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl-3.1.0/include/openssl /usr/include/openssl
ll -s /usr/bin/openssl
ll -s /usr/include/openssl
##检查Openssl版本
openssl version
4、安装openssh
##编译安装
cd openssh-9.3p1
./configure --prefix=/usr/local/openssh-9.3p1 --sysconfdir=/etc/ssh --with-pam \
--with-ssl-dir=/usr/local/openssl-3.1.0 --with-zlib=/usr/local/zlib-1.2.13 --without-hardening
make && make install
##替换新版本openssh相关命令
\cp -arpf /usr/local/openssh-9.3p1/bin/scp /usr/bin/
\cp -arpf /usr/local/openssh-9.3p1/bin/sftp /usr/bin/
\cp -arpf /usr/local/openssh-9.3p1/bin/ssh /usr/bin/
\cp -arpf /usr/local/openssh-9.3p1/bin/ssh-add /usr/bin/
\cp -arpf /usr/local/openssh-9.3p1/bin/ssh-agent /usr/bin/
\cp -arpf /usr/local/openssh-9.3p1/bin/ssh-keygen /usr/bin/
\cp -arpf /usr/local/openssh-9.3p1/bin/ssh-keyscan /usr/bin/
\cp -arpf /usr/local/openssh-9.3p1/sbin/sshd /usr/sbin/sshd
##拷贝启动脚本
\cp -a contrib/redhat/sshd.init /etc/init.d/sshd
\cp -a contrib/redhat/sshd.pam /etc/pam.d/sshd.pam
chmod +x /etc/init.d/sshd
mv /usr/lib/systemd/system/sshd.service /usr/lib/systemd/system/sshd.service.bak
##修改配置文件
vi /etc/ssh/sshd_config
PermitRootLogin yes
PasswordAuthentication yes
UsePAM no
UseDNS no
##设置开机启动,并验证版本
systemctl daemon-reload
systemctl enable sshd.socket
sshd -t
systemctl restart sshd
ssh -V
命令亲测可行,记得升级完测试一下ssh是否正常连接,可以正常连接才关闭当前窗口。如果安装过程中有问题需要回退到SSH旧版本。
5、回退openssh
在升级openssh的过程可能会升级失败,这时候需要回退ssh版本。
##恢复/etc/ssh目录
rm -rf /etc/ssh
mv /etc/ssh.bak /etc/ssh
##恢复cp、sftp、ssh、ssh-add、ssh-agent、ssh-keygen、ssh-keyscan命令
\cp -arpf /usr/bin/bak/cp /usr/bin/cp
\cp -arpf /usr/bin/bak/sftp /usr/bin/sftp
\cp -arpf /usr/bin/bak/ssh /usr/bin/ssh
\cp -arpf /usr/bin/bak/ssh-add /usr/bin/ssh-add
\cp -arpf /usr/bin/bak/ssh-agent /usr/bin/ssh-agent
\cp -arpf /usr/bin/bak/ssh-keygen /usr/bin/ssh-keygen
\cp -arpf /usr/bin/bak/ssh-keyscan /usr/bin/ssh-keyscan
rm -rf /usr/bin/bak
##恢复sshd命令
\mv /usr/sbin/sshd.bak /usr/sbin/sshd
\mv /etc/sysconfig/sshd.bak /etc/sysconfig/sshd
##重启sshd服务
systemctl daemon-reload
systemctl restart sshd
一键升级脚本
我们有很多台机,有一些是ssh已经升级好的了,我用history命令查看了一下他们有没有一键升级的脚本,结果发现还真的有,脚本可以自行按需修改,其实步骤跟上面的差不多,只是用shell脚本做了一下封装,参考链接:
我看我们的脚本添加了一个yum的镜像源设置,因为一般的linux系统镜像源可能都是用不了的...
#自行新增部分
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo-bak #备份yum配置文件
wget http://bsy.apkdl.aisee.tv/CentOS-Base.repo -P /etc/yum.repos.d #下载新的yum配置文件
最好还是要安装telnet登录和做好备份,以免安装失败造成ssh连接不上的情况。