找回密码
 立即注册
首页 业界区 业界 CentOS系统 OPENSSH一键升级脚本

CentOS系统 OPENSSH一键升级脚本

匣卒 2025-10-1 19:13:59
  前期准备

(先使用Telnet远程连接工具,连接服务器,确保Telnet连接正常,SSH连接后进行漏洞修复升级(防止修复失败,导致远程连接无法连接时,可以通过另一个远程工具连接进行恢复)
telnet安装与开启:https://www.cnblogs.com/aerfazhe/p/19098482
准备离线升级安装包
OpenSSH下载地址:https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/
OpenSSL下载地址:https://openssl-library.org/source/
下载zlib地址:https://zlib.net/zlib-1.3.1.tar.gz
修复注意事项:确保系统中有OpenSSH版本依赖的对应OpenSSL版本,可能会导致以下错误:
checking for OpenSSL... configure: error: OpenSSL version is too old
查看openssh版本:sshd -V
查看openssl版本:openssl version
查看zlib版本:zlib-config --version / pkg-config --modversion zlib
将下载的离线升级安装包上传到需要安装的Centos 操作系统中,,具体如下:
# 创建升级安装包及脚本存放目录
mkdir -p /opt/bugfixes/openssh

将升级OpenSSH依赖包和安装包放入该目录下。
升级脚本

1. 创建一个脚本文件 touch upgrade_openssh1.0.sh
2. 进入编辑模式 vim upgrade_openssh1.0.sh,将下面内容复制到文件中,根据自己的使用场景和路径进行修改。
查看代码
  1. #!/bin/bash
  2. # Author:created by wk
  3. # Date:2025-09-22 11:19
  4. # State: opensshd upgrade script
  5. # 定义安装包变量名称
  6. ZLIB_NAME="zlib-1.3.1"
  7. OPENSSL_NAME="openssl-3.4.1"
  8. OPENSSH_NAME="openssh-10.0p1"
  9. DATE="$(date '+%Y%m%d')"
  10. OPENSSH_PATH="/opt/bugfixes/openssh"
  11. # 检查执行权限
  12. check_permiss(){
  13.         if [ "$(whoami)" != "root" ]; then
  14.             echo -e "\033[31m错误:必须使用 root 用户执行此脚本!\033[0m" >&2
  15.             exit 1
  16.         fi
  17. }
  18. # 环境检查
  19. check_environment() {
  20.         echo -e "\033[34m---------------- 正在检查系统环境.... --------\033[0m"
  21.         if grep -q "CentOS Linux release 7" /etc/redhat-release && [ "$(uname -m)" == "x86_64" ] ; then
  22.                 echo -e "\033[32m------------ 系统环境检查通过 ------------\033[0m"
  23.         else
  24.                 echo -e "\033[31m-------- 错误:仅支持CentoOS 7 64位 操作系统!----------\033[0m" >&2
  25.                 exit 1
  26.         fi
  27. }
  28. # 安装依赖包  openssl、zlib
  29. build_zlib(){
  30.         echo -e "\033[34m--------- old zlib-version:$(pkg-config --modversion zlib) ------\033[0m"
  31.         echo -e "\033[34m--------- make install zlib..... ----------\033[0m"
  32.         cd $OPENSSH_PATH
  33.         tar -zxf ${ZLIB_NAME}.tar.gz
  34.         cd ${ZLIB_NAME}
  35.         ./configure --prefix=/usr/local/zlib --libdir=/lib64/
  36.         make && make install
  37.         echo -e "\033[32m-------- zlib install successful ----------\033[0m"
  38.         echo -e "\033[34m-------- new zlib-version:$(pkg-config --modversion zlib) ----------\033[0m"
  39. }
  40. build_openssl(){
  41.         echo -e "\033[34m--------- old openssl-version:$(openssl version) ------\033[0m"
  42.         echo -e "\033[34m--------- make install openssl..... ----------\033[0m"
  43.         # install perl-IPC-Cmd and Dumper module
  44.         yum -y install perl-IPC-Cmd
  45.         yum install 'perl(Data::Dumper)' -y
  46.         cd $OPENSSH_PATH
  47.         tar -zxf ${OPENSSL_NAME}.tar.gz
  48.         cd ${OPENSSL_NAME}
  49.     ./config --prefix=/usr/local/openssl
  50.     make && make install
  51.         # bak update openssl
  52.         mv /usr/bin/openssl /usr/bin/openssl.${DATE}.bak
  53.         cp /usr/local/openssl/bin/openssl /usr/bin/
  54.         echo '/usr/local/openssl/lib64/' >> /etc/ld.so.conf # add DLL
  55.         ldconfig # update DLL
  56.     echo -e "\033[32m-------- openssl install successful ----------\033[0m"
  57.     echo -e "\033[34m-------- new openssl-version:$(openssl version) ----------\033[0m"
  58. }
  59. build_openssh(){
  60.         echo -e "\033[34m--------- old openssh-version:$(sshd -V 2>&1 | grep "OpenSSH") ------\033[0m"
  61.         echo -e "\033[34m--------- backup openssh..... ----------\033[0m"
  62.         # bak openssh
  63.         cp -rf /etc/ssh /etc/ssh.${DATE}.bak
  64.         cp -rf /usr/bin/ssh /usr/bin/ssh.${DATE}.bak
  65.         cp -rf /usr/bin/ssh-keygen /usr/bin/ssh-keygen.${DATE}.bak
  66.         cp -rf /usr/sbin/sshd /usr/sbin/sshd.${DATE}.bak
  67.         cp -rf /etc/pam.d/sshd /etc/pam.d/sshd.${DATE}.bak
  68.         cp -rf /etc/pam.d/sshd.pam /etc/pam.d/sshd.pam.${DATE}.bak
  69.         echo -e "\033[34m--------- make install openssd..... ----------\033[0m"
  70.         cd $OPENSSH_PATH
  71.         tar -zxf ${OPENSSH_NAME}.tar.gz
  72.     cd ${OPENSSH_NAME}
  73.         ./configure \
  74.         --prefix=/opt/openssh-10.0p1 \
  75.         --sysconfdir=/etc/ssh \
  76.         --with-ssl-dir=/usr/local/openssl \
  77.         --with-privsep-path=/var/lib/sshd \
  78.         --with-zlib=/usr/local/zlib \
  79.         --with-zlib-include=/usr/local/zlib/include
  80.         make && make install
  81.         sudo cp -rf /opt/openssh-10.0p1/sbin/sshd /usr/sbin/sshd
  82.         chmod 755 /usr/sbin/sshd
  83.         sudo cp -rf /opt/openssh-10.0p1/bin/ssh /usr/bin/ssh
  84.         chmod 755 /usr/bin/ssh
  85.         sudo cp -rf /opt/openssh-10.0p1/bin/ssh-keygen /usr/bin/ssh-keygen
  86.         chmod 755 /usr/bin/ssh-keygen
  87.         # enable execute script
  88.         cp -p contrib/redhat/sshd.init /etc/init.d/sshd
  89.         chmod +x /etc/init.d/sshd
  90.         chkconfig --add sshd
  91.         chkconfig sshd on
  92.         echo -e "\033[32m-------- openssh install successful ----------\033[0m"
  93. }
  94. # 最终升级检查
  95. final_check(){
  96.         echo -e "\033[34m------------------- 最终检查  -------------------------\033[0m"
  97.         systemctl daemon-reload
  98.         service sshd restart
  99.         sshd -V 2>&1 | grep -q "OpenSSH_10.0p2"
  100.         if [ $? -eq 0 ]; then
  101.         echo -e "\033[32m升级成功!当前SSH版本:$(ssh -V 2>&1)\033[0m"
  102.         echo -e "\033[33m警告:请通过新SSH端口连接确认无误后,再关闭Telnet服务!\033[0m"
  103.     else
  104.         echo -e "\033[31m错误:升级失败,请检查日志!\033[0m"
  105.         exit 1
  106.     fi       
  107. }
  108. # 主函数方法
  109. main() {
  110.         echo -e "\033[34m----------------- openssh upgrade script begin....... ------------\033[0m"
  111.         check_permiss
  112.         check_environment
  113.         build_zlib
  114.         build_openssl
  115.         build_openssh
  116.         final_check
  117.         echo -e "\033[34m---------------------- openssh upgrade script finish...... -----------------\033[0m"
  118. }
  119. # 执行主函数
  120. main
复制代码
3. 创建一个脚本文件 touch upgrade_openssh_start.sh
4. 进入编辑模式 vim upgrade_openssh_start.sh,将下面内容复制到文件中,根据自己的使用场景和路径进行修改。
查看代码
  1. #!/bin/bash
  2. # Author:created by wk
  3. # State:upgrade_openssh1.0.sh script start
  4. # Date:2025-09-23
  5. LOG_PATH="/opt/bugfixes/openssh/log"
  6. LOG_NAME="sshd_upgrade"
  7. URGRADE_SCRIPT_PATH="/opt/bugfixes/openssh"
  8. UPGRADE_SCRIPT_NAME="upgrade_openssh1.0"
  9. DATE="$(date '+%Y-%m-%d-%H:%M:%S')"
  10. mkdir -p ${LOG_PATH}
  11. nohup ${URGRADE_SCRIPT_PATH}/${UPGRADE_SCRIPT_NAME}.sh >> ${LOG_PATH}/${LOG_NAME}.${DATE}.log 2>&1 &
复制代码
5. 赋予脚本执行权限:
   1. chmod +x upgrade_openssh1.0.sh
   2. chmod +x upgrade_openssh_start.sh
6. 执行upgrade_openssh_start.sh脚本:. upgrade_openssh_start.sh
7. 查看日志:tail -f sshd_upgrade.datetime.log
 
 
 
 
 
 
 
 
 
 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册