1. ✅麒麟v10 sp3系统升级openssh 9.9
# 下载源码包
wget https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-9.9p2.tar.gz
# 解压源码包
tar xf openssh-9.9p2.tar.gz
# 进入源码包目录
cd openssh-9.9p2/
# 初始化配置
./configure --prefix=/app/tools/openssh-9.9p2/
# 编译
make -j `nproc`
# 安装
make install
# 创建软链接
ln -s /app/tools/openssh-9.9p2/ /app/tools/openssh
1.1. 💡启动测试
#安装并启动telnet
yum install -y telnet-server
systemctl enable telnet.socket --now
useradd zbl
echo 'zhubaolin@123' | passwd --stdin zbl
echo 'zbl ALL=(ALL) NOPASSWD: ALL ' >>/etc/sudoers
#测试telnet
这里会断开连接,这里使用telnet连接 使用普通用户,sudo su - 切换为root
telnet 10.0.0.210
输入用户名
输入密码
修改sshd配置文件 注意这里配置不在/etc/在/app/tools/openssh/etc下.
#修改新的opensssh配置文件
cp /app/tools/openssh/etc/sshd_config{,.bak}
cat >>/app/tools/openssh/etc/sshd_config <<EOF
Port 22
PermitRootLogin yes
PasswordAuthentication yes
#GSSAPIAuthentication no 这个不用配置,默认就关闭了.
UseDNS no
EOF
#关闭sshd服务
pkill sshd
#使用新的openssh启动sshd服务.
启动服务测试
/app/tools/openssh/sbin/sshd
1.2. ☕️测试

1.3. ✂️清理(可选)
# 关闭并删除openssh 8.2版本的服务端
rpm -qa |grep openssh |xargs rpm -e --nodeps
1.4. 🌞后续收尾-环境变量
#1. 配置PATH环境变量
echo 'export PATH=/app/tools/openssh/bin/:/app/tools/openssh/sbin/:$PATH' >>/etc/profile
source /etc/profile
#2.检查命令位置
[root@ky201 ~]# which ssh ssh-keygen sshd
/app/tools/openssh/bin/ssh
/app/tools/openssh/bin/ssh-keygen
/app/tools/openssh/sbin/sshd
[root@ky201 ~]#
1.5. 📁书写systemctl文件
cat>/usr/lib/systemd/system/sshd99.service<<'EOF'
[Unit]
Description=OpenSSH 9.9 server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target
[Service]
Type=simple
ExecStart=/app/tools/openssh/sbin/sshd -D
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl disable --now sshd
systemctl enable --now sshd99
1.6. 📝修改配置文件为/etc/ssh
mkdir -p /backup/
mv /etc/ssh /backup/
ln -s /app/tools/openssh/etc/ /etc/ssh
#后续修改/etc/ssh/sshd_config配置文件即可.
1.7. 🚀测试连接并关闭telnet服务
systemctl disable --now telnet.socket
1.8. 💾复制ssh-copy-id命令
cp ~/openssh-9.9p2/contrib/ssh-copy-id /app/tools/openssh/bin/
升级Openssh后没有ssh-copy-id解决方案.
chmod +x /app/tools/openssh/bin/ssh-copy-id
2. ✅ubt 22.04 lts编译安装openssh-9.9p2
2.1. 🚀升级前准备
# 安装
apt install -y openbsd-inetd telnetd
# 修改telnet配置文件
mkdir -p /etc/xinetd.d/
cat>/etc/xinetd.d/telnet<<'EOF'
service telnet
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
}
EOF
systemctl enable inetd --now
useradd zbl
echo 'zhubaolin@123' |passwd --stdin zbl
echo 'oldboy ALL=(ALL) NOPASSWD: ALL ' >>/etc/sudoers
2.2. 📝编译安装流程
#1. 安装依赖
apt install -y gcc zlib1g zlib1g-dev libssl-dev make
# 下载源码包
wget https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-9.9p2.tar.gz
# 解压源码包
tar xf openssh-9.9p2.tar.gz
# 进入源码包目录
cd openssh-9.9p2/
# 编译前准备
./configure --prefix=/app/tools/openssh-9.9p2/
# 编译
make -j `nproc`
# 安装
make install
ln -s /app/tools/openssh-9.9p2/ /app/tools/openssh
2.3. 🔍启动测试
这里会断开连接,这里使用telnet 23端口连接 使用oldboy普通用户,sudo su - 切换为root
telnet 10.0.0.5 23 #10.0.0.5为服务器ip
输入oldboy
和输入密码
pkill sshd
结束已有sshd进程
修改sshd配置文件 注意这里配置不在/etc/在/app/tools/openssh/etc下.
cp /app/tools/openssh/etc/sshd_config{,.bak}
cat >>/app/tools/openssh/etc/sshd_config <<EOF
Port 22
PermitRootLogin yes
PasswordAuthentication yes
#GSSAPIAuthentication no 这个不用配置,默认就关闭了.
UseDNS no
EOF
启动服务测试
/app/tools/openssh/sbin/sshd
2.4. ✂️清理(谨慎操作-可选)
# 关闭并删除openssh 8.2版本的服务端
dpkg -l |grep openssh |awk '{print $2}' |xargs dpkg --purge
2.5. ☀️后续收尾-环境变量
#1. 配置PATH环境变量
echo 'export PATH=/app/tools/openssh/bin/:/app/tools/openssh/sbin/:$PATH' >>/etc/profile
source /etc/profile
#2.检查命令位置
which ssh ssh-keygen sshd

2.6. 📝书写systemctl文件与管理sshd
#如果没有sshd用户则创建一个虚拟sshd用户
useradd -s /sbin/nologin -M sshd
#配置sshd服务自启动管理文件
cat>/usr/lib/systemd/system/sshd99.service<<'EOF'
[Unit]
Description=OpenSSH 9.9 server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target
[Service]
Type=simple
ExecStart=/app/tools/openssh/sbin/sshd -D
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
EOF
#杀死 sshd进程,谨慎操作,会断开连接。
pkill sshd
systemctl daemon-reload
systemctl disable ssh --now
systemctl enable sshd99 --now
2.7. 💾复制ssh-copy-id命令
cp ~/openssh-9.9p2/contrib/ssh-copy-id /app/tools/openssh/bin/
升级Openssh后没有ssh-copy-id解决方案.
chmod +x /app/tools/openssh/bin/ssh-copy-id
2.8. ✂️关闭telnet仅使用sshd
systemctl disable --now inetd
3. ✅centos 7.9升级openssl到1.1.1最新版与openssh 9.9
- centos 7.9 是openssl0.9.8e和1.0.2k,先升级openssl再升级openssh
3.1. 🚀升级openssl 1.1.1w
3.1.1. 🌏源码安装openssl 1.1.1w
# 安装依赖
yum install -y zlib-devel
# 下载openssl-1.1.1w源码包
wget https://ghfast.top/https://github.com/openssl/openssl/releases/download/OpenSSL_1_1_1w/openssl-1.1.1w.tar.gz
# 解压openssl-1.1.1w源码包
tar xf openssl-1.1.1w.tar.gz
# 进入openssl-1.1.1w源码包目录
cd openssl-1.1.1w/
# 编译前准备
./config
# 编译
make -j `nproc`
# 安装
make install
# 更新动态链接库数据
echo '/usr/local/lib64/' >/etc/ld.so.conf.d/openssl.conf
# 使配置生效
ldconfig -v
# 查看版本
openssl version
3.1.2. 🚀升级openssh 9.9
# 下载源码包
wget https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-9.9p2.tar.gz
# 解压源码包
tar xf openssh-9.9p2.tar.gz
# 进入源码包目录
cd openssh-9.9p2/
# 编译前准备
./configure --prefix=/app/tools/openssh-9.9p2/
# 编译
make -j `nproc`
# 安装
make install
# 创建软链接
ln -s /app/tools/openssh-9.6p1/ /app/tools/openssh
#安装并启动telnet
yum -y install telnet-server
systemctl enable telnet.socket --now
useradd zbl
echo 'zhubaolin@123' | passwd --stdin zbl
echo 'zbl ALL=(ALL) NOPASSWD: ALL ' >>/etc/sudoers
这里会断开连接,这里使用telnet 23端口连接 使用oldboy普通用户,sudo su - 切换为root
telnet 10.0.0.5 23 #10.0.0.5为服务器ip
输入oldboy
和输入密码
修改sshd配置文件 注意这里配置不在/etc/在/app/tools/openssh/etc下.
cp /app/tools/openssh/etc/sshd_config{,.bak}
cat >>/app/tools/openssh/etc/sshd_config <<EOF
Port 22
PermitRootLogin yes
PasswordAuthentication yes
#GSSAPIAuthentication no 这个不用配置,默认就关闭了.
UseDNS no
EOF
kill sshd的pid
结束已有sshd进程
# 启动服务测试
/app/tools/openssh/sbin/sshd
# 查看ssh版本
[root@centos ~]# /app/tools/openssh/sbin/sshd -V
OpenSSH_9.9p2, OpenSSL 1.1.1w 11 Sep 2023
3.2. 🔍测试

3.3. ✂️清理(谨慎操作-可选)
# 关闭并删除openssh 7.4p1版本的服务端
rpm -qa |grep openssh |xargs rpm -e --nodeps
# 删除openssl 旧版本的
[root@update-sshd ~]# rpm -qa |grep ^openssl
openssl098e-0.9.8e-29.el7.centos.3.x86_64
openssl-libs-1.0.2k-19.el7.x86_64
openssl-1.0.2k-19.el7.x86_64
[root@update-sshd ~]# rpm -qa |grep ^openssl |xargs rpm -e --nodeps
[root@update-sshd ~]#
[root@update-sshd ~]#
[root@update-sshd ~]# rpm -qa |grep openssl
xmlsec1-openssl-1.2.20-7.el7_4.x86_64
3.4. ☀️后续收尾-环境变量
#1. 配置PATH环境变量
echo 'export PATH=/app/tools/openssh/bin/:/app/tools/openssh/sbin/:$PATH' >>/etc/profile
source /etc/profile
#2.检查命令位置

3.5. 📝书写systemctl文件
mv /usr/lib/systemd/system/sshd.service /usr/lib/systemd/system/oldsshd.service
cat >/usr/lib/systemd/system/sshd.service<<'EOF'
[Unit]
Description=OpenSSH 9.9 server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target
[Service]
Type=simple
ExecStart=/app/tools/openssh/sbin/sshd -D
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl disable --now oldsshd
systemctl enable --now sshd
3.6. 📝修改配置文件为/etc/ssh
mkdir -p /backup/
mv /etc/ssh /backup/
ln -s /app/tools/openssh/etc/ /etc/ssh
#后续修改/etc/ssh/sshd_config配置文件即可.
3.7. ✂️测试连接并关闭telnet服务
systemctl disable --now telnet.socket
3.8. 💾复制ssh-copy-id命令
cp ~/openssh-9.9p2/contrib/ssh-copy-id /app/tools/openssh/bin/
升级Openssh后没有ssh-copy-id解决方案.
chmod +x /app/tools/openssh/bin/ssh-copy-id
4. ✅openssh9.9升级脚本(kylin/ubuntu/centos7.9)
#!/bin/bash
##############################################################
# File Name:openssh-update.sh
# Version:V1.0
# Author:zbl
# Organization:zhubaolin.blog.csdn.net
# Desc:
##############################################################
function line() {
echo -e "\E[1;33m######$1######\E[0m\E[1;34m脚本运行中\E[0m\E[1;33m######$1######\E[0m"
}
function check(){
if [ $? -eq 0 ];then
echo -e "\E[1;32m${1}======>success\E[0m"
else
echo -e "\E[5;31m${1}======>faild\E[0m"
exit 1
fi
}
line "openssh9.9升级脚本"
function update_sslver() {
source /etc/os-release
if [ "${ID}" = "centos" ];then
echo -e "\E[1;33m当前${ID}系统openssl版本不符合要求,需要升级到1.1.1最新版\E[0m"
echo -e "\E[1;34m安装openssl升级所需要的依赖\E[0m"
yum install -y zlib-devel >/dev/null 2>&1
check "安装openssh升级所需要的依赖"
echo -e "\E[1;34m下载openssl-1.1.1w源码包\E[0m"
wget https://ghfast.top/https://github.com/openssl/openssl/releases/download/OpenSSL_1_1_1w/openssl-1.1.1w.tar.gz >/dev/null 2>&1
check "下载openssl-1.1.1w源码包"
echo -e "\E[1;34m解压openssl-1.1.1w源码包\E[0m"
tar xf openssl-1.1.1w.tar.gz
check "解压openssl-1.1.1w源码包"
echo -e "\E[1;34m进入openssl-1.1.1w源码包目录\E[0m"
cd openssl-1.1.1w/
check "进入openssl-1.1.1w源码包目录"
echo -e "\E[1;34m编译前准备\E[0m"
./config >/dev/null 2>&1
check "编译前准备"
echo -e "\E[1;34m编译\E[0m"
make -j `nproc` >/dev/null 2>&1
check "编译"
echo -e "\E[1;34m安装\E[0m"
make install >/dev/null 2>&1
check "安装"
echo -e "\E[1;34m更新动态链接库数据\E[0m"
echo '/usr/local/lib64/' >/etc/ld.so.conf.d/openssl.conf
check "更新动态链接库数据"
echo -e "\E[1;34m更新动态链接库数据\E[0m"
ldconfig -v >/dev/null 2>&1
check "更新动态链接库数据"
echo -e "\E[1;34m升级openssl成功,当前openssl版本\E[0m"
openssl version
echo -e "\E[1;34m正在清理升级遗留文件\E[0m"
cd ~
rm -rf ~/openssl-1.1.1w*
check "清理升级遗留文件"
else
echo -e "\E[1;34m当前${ID}系统openssl版本符合要求,无需升级\E[0m"
fi
return $?
}
update_sslver
function check_package() {
which gcc make >/dev/null 2>&1
rc=$?
if [ $rc -ne 0 ];then
source /etc/os-release
case "$ID" in
kylin|centos)
yum clean all >/dev/null 2>&1
yum -y install gcc zlib zlib-devel make >/dev/null 2>&1
;;
ubuntu)
apt update >/dev/null 2>&1
apt -y install gcc zlib1g zlib1g-dev libssl-dev make >/dev/null 2>&1
;;
*)
echo "未识别的操作系统,请先手动安装编译需要的依赖"
exit 1
esac
fi
return $?
}
echo -e "\E[1;34m0.当前系统环境符合升级要求,开始安装openssh升级所需要的依赖\E[0m"
check_package
check "安装openssh升级所需要的依赖"
echo -e "\E[1;34m1.下载openssh9.9源码包\E[0m"
wget https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-9.9p2.tar.gz >/dev/null 2>&1
check "下载openssh9.9源码包"
echo -e "\E[1;34m2.解压openssh9.9源码包\E[0m"
tar xf openssh-9.9p2.tar.gz
check "解压openssh9.9源码包"
echo -e "\E[1;34m3.进入openssh9.9源码包目录\E[0m"
cd openssh-9.9p2/
check "进入openssh9.9源码包目录"
echo -e "\E[1;34m4.编译前准备\E[0m"
./configure --prefix=/app/tools/openssh-9.9p2/ >/dev/null 2>&1
check "编译前准备"
echo -e "\E[1;34m5.开始编译\E[0m"
make -j `nproc` >/dev/null 2>&1
check "开始编译"
echo -e "\E[1;34m6.开始安装\E[0m"
make install >/dev/null 2>&1
check "开始安装"
echo -e "\E[1;34m7.创建openssh软链接\E[0m"
ln -s /app/tools/openssh-9.9p2/ /app/tools/openssh
check "创建openssh软链接"
echo -e "\E[1;34m8.备份sshd_config配置文件\E[0m"
cp /app/tools/openssh/etc/sshd_config{,.bak}
check "备份sshd_config配置文件"
echo -e "\E[1;34m9.修改sshd_config配置文件\E[0m"
cat >>/app/tools/openssh/etc/sshd_config <<EOF
Port 22
PermitRootLogin yes
PasswordAuthentication yes
#GSSAPIAuthentication no 这个不用配置,默认就关闭了.
UseDNS no
EOF
check "修改sshd_config配置文件"
echo -e "\E[1;34m11.配置环境变量\E[0m"
echo 'export PATH=/app/tools/openssh/bin/:/app/tools/openssh/sbin/:$PATH' >>/etc/profile
check "配置环境变量"
echo -e "\E[1;34m12.加载环境变量\E[0m"
source /etc/profile
check "加载环境变量"
function add_sshduser() {
id sshd >/dev/null 2>&1
rc=$?
if [ $rc -ne 0 ];then
useradd -s /sbin/nologin -M sshd
fi
return $rc
}
echo -e "\E[1;34m13.添加sshd虚拟用户\E[0m"
add_sshduser
check "添加sshd虚拟用户"
echo -e "\E[1;34m14.书写自启动服务文件\E[0m"
cat>/usr/lib/systemd/system/sshd99.service<<'EOF'
[Unit]
Description=OpenSSH 9.9 server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target
[Service]
Type=simple
ExecStart=/app/tools/openssh/sbin/sshd -D
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
EOF
check "书写自启动服务文件"
echo -e "\E[1;34m15.加载自启动服务文件\E[0m"
systemctl daemon-reload
check "加载自启动服务文件"
function disable_ssh() {
source /etc/os-release
case "$ID" in
kylin|centos)
systemctl disable sshd --now >/dev/null 2>&1
;;
ubuntu)
systemctl disable ssh --now >/dev/null 2>&1
;;
*)
echo "未识别的操作系统,请手动关闭ssh服务"
exit 1
esac
return $?
}
echo -e "\E[1;34m16.关闭旧版本ssh服务\E[0m"
disable_ssh
check "关闭旧版本ssh服务"
echo -e "\E[1;34m17.启动新版本ssh服务\E[0m"
systemctl enable sshd99 --now >/dev/null 2>&1
check "启动新版本ssh服务"
function mkbackup_dir() {
if [ ! -d /backup ];then
mkdir -p /backup/
fi
return $?
}
echo -e "\E[1;34m18.修改配置文件为/etc/ssh\E[0m"
echo -e "\E[1;34m18.1创建/backup目录\E[0m"
mkbackup_dir
check "创建/backup目录"
echo -e "\E[1;34m18.2备份旧版本ssh文件\E[0m"
mv /etc/ssh /backup/
check "备份旧版本ssh文件"
echo -e "\E[1;34m18.3修改新版本ssh配置文件为/etc/ssh\E[0m"
ln -s /app/tools/openssh/etc/ /etc/ssh
check "修改新版本ssh配置文件为/etc/ssh"
echo -e "\E[1;34m19.拷贝ssh-copy-id命令\E[0m"
cp ~/openssh-9.9p2/contrib/ssh-copy-id /app/tools/openssh/bin/
check "拷贝ssh-copy-id命令"
echo -e "\E[1;34m20.ssh-copy-id添加执行权限\E[0m"
chmod +x /app/tools/openssh/bin/ssh-copy-id
check "ssh-copy-id添加执行权限"
echo -e "\E[1;34m=====openssh服务升级成功,当前版本=====\E[0m"
ssh -V
echo -e "\E[1;34m正在清理升级遗留文件\E[0m"
rm -f /server/scripts/openssh-9.9p2*
check "清理升级遗留文件"