升级原因:修复8.7版本及之前版本漏洞
参考文章:Ubuntu离线升级openssh8.6脚本
一、前提条件
- 之前升级nginx,已经安装了gcc、g++、make等依赖。
- 下载openssh-8.8p1.tar.gz和openssl-1.1.1.tar.gz
注意:查看openssh-8.8p1.tar.gz中INTALL可知对openssl的版本要求。
二、安装telnet
- 在有外网的相同环境下,下载deb安装包。
sudo apt install telnetd xinetd -y -d
- 下载的deb包在/var/cache/apt/archives下,拷贝*.deb到所需服务器上。
- 创建telnet配置文件
sudo touch /etc/xinetd.d/telnet
- 增加如下配置
sudo vi /etc/xinetd.d/telnet
service telnet { disable = no flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID }
- 重启服务
sudo service xinetd restart
- 查看23端口已经开启
netstat -anput |grep 23
- 测试telnet连接
telnet ip
三、升级openssh
1、升级前准备
- 拷贝openssh-8.8p1.tar.gz和openssl-1.1.1.tar.gz到/home/freedom/source_package/
- 拷贝下载好的*.deb到/home/freedom/dpkgs_package/
- 拷贝升级脚本到/home/freedom/,脚本如下:
注意:在自己的环境下,要注意替换路径。
#!/bin/bash
## 数据备份
clear
beifen(){
mv /etc/ssh/sshd_config{,.old}
cp /usr/sbin/sshd{,.old}
mv /etc/ssh{,.old}
cp /etc/init.d/ssh{,.old}
mkdir /opt/ssh.bak
cd /usr/bin/
mv ssh* sftp scp /opt/ssh.bak/
}
## 编译前准备
# 1、安装依赖包
yilai(){
echo "[安装依赖包]"
cd /home/freedom/dpkgs_package/
dpkg -i * &>/dev/null
if [ $? -eq 0 ];then
echo "[成功]"
else
echo "[失败]"
fi
}
# 2、解压源码包
targz(){
echo "[解压源码包]"
cd /home/freedom/source_package/
for i in openssh-8.8p1.tar.gz openssl-1.1.1.tar.gz
do
tar zxf $i -C /usr/local/src/
done
sleep 1
}
## 编译安装openssl
ssl_t1(){
echo "[编译安装openssl]"
sleep 0.5
echo "[编译安装时间较长 耐心等待...]"
cd /usr/local/src/openssl-1.1.1/
./config --prefix=/usr/local --openssldir=/usr/local/openssl &>/dev/null
make &>/dev/null
make install &>/dev/null
if [ $? -eq 0 ];then
echo "[成功]"
else
echo "[失败]"
exit
fi
ln -s /usr/local/lib/libssl.so.1.1 /usr/lib/libssl.so.1.1
ln -s /usr/local/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1
#ssl=`openssl version`
#echo $ssl
#sleep 3
sed -i '1 a /usr/local' /etc/ld.so.conf.d/libc.conf
ldconfig
}
## 编译安装openssh
ssh_t1(){
echo "[编译安装openssh]"
systemctl stop sshd
cd /usr/local/src/openssh-8.8p1/
./configure --prefix=/usr/local --sysconfdir=/etc/ssh \
--with-md5-passwords --with-zlib --with-ssl-dir=/usr/local \
--with-privsep-path=/var/lib/sshd &>/dev/null
make &>/dev/null
make install &>/dev/null
if [ $? -eq 0 ];then
echo "[成功]"
else
echo "[失败]"
exit
fi
}
## 命令替换
ti(){
cd /usr/bin/
mv ssh* sftp scp c_rehash openssl /tmp/ &>/dev/null
ln -s /usr/local/bin/* /usr/bin/ &>/dev/null
}
#####
beifen
yilai
targz
ssl_t1
ssh_t1
ti
systemctl start sshd
2、升级ssh
- 给脚本增加可执行权限
sudo chmod +x ssh_update.sh
- 执行脚本
./ssh_update.sh
- 脚本执行完成后,查看ssh版本,是否升级成功
ssh -V
仅供参考