centos6升级SSH centos6升级openSSH centos6升级openSSHD centos6升级SSHD
centos6升级SSH centos6升级openSSH centos6升级openSSHD centos6升级SSHD
脚本内容(建议用 root 用户执行)
保存为:upgrade_openssh.sh
#!/bin/bash
set -e
# ==== 变量定义 ====
OPENSSH_VERSION="9.6p1"
OPENSSL_VERSION="1.1.1u"
INSTALL_PREFIX="/usr/local/openssh"
TMPDIR="/usr/local/src/openssh_upgrade"
# ==== 创建临时目录 ====
mkdir -p "$TMPDIR"
cd "$TMPDIR"
# ==== 安装依赖 ====
yum install -y gcc make zlib-devel pam-devel openssl-devel wget tar
# ==== 升级 OpenSSL(可选) ====
wget https://www.openssl.org/source/openssl-$OPENSSL_VERSION.tar.gz
tar zxvf openssl-$OPENSSL_VERSION.tar.gz
cd openssl-$OPENSSL_VERSION
./config --prefix=/usr/local/openssl shared zlib
make -j$(nproc) && make install
cd ..
export LD_LIBRARY_PATH=/usr/local/openssl/lib
export PATH=/usr/local/openssl/bin:$PATH
# ==== 下载并编译 OpenSSH ====
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-$OPENSSH_VERSION.tar.gz
tar zxvf openssh-$OPENSSH_VERSION.tar.gz
cd openssh-$OPENSSH_VERSION
# 备份原 sshd_config
cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%F-%T)
./configure --prefix=$INSTALL_PREFIX --sysconfdir=/etc/ssh \
--with-ssl-dir=/usr/local/openssl \
--with-md5-passwords --with-pam --with-zlib
make -j$(nproc) && make install
# ==== 创建 symlink ====
mv /usr/sbin/sshd /usr/sbin/sshd.old
ln -sf $INSTALL_PREFIX/sbin/sshd /usr/sbin/sshd
ln -sf $INSTALL_PREFIX/bin/ssh /usr/bin/ssh
ln -sf $INSTALL_PREFIX/bin/scp /usr/bin/scp
ln -sf $INSTALL_PREFIX/bin/sftp /usr/bin/sftp
ln -sf $INSTALL_PREFIX/bin/ssh-keygen /usr/bin/ssh-keygen
# ==== 临时启用另一个 sshd 测试端口(防止升级失败锁死) ====
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.new
sed -i 's/#Port 22/Port 22/' /etc/ssh/sshd_config.new
echo "Port 2222" >> /etc/ssh/sshd_config.new
$INSTALL_PREFIX/sbin/sshd -f /etc/ssh/sshd_config.new
echo "[✓] 测试 sshd 启动成功在端口 2222。请用 ssh -p 2222 登录确认无误后,继续。"
read -p "请确认你可以通过新 sshd 登录后回车继续(否则 Ctrl+C 退出)..."
# ==== 启用正式 sshd ====
pkill sshd || true
$INSTALL_PREFIX/sbin/sshd
# ==== 设置自动启动 ====
cat > /etc/init.d/sshd_new <<EOF
#!/bin/bash
# chkconfig: 2345 55 25
# description: OpenSSH
case "\$1" in
start)
echo "Starting sshd..."
$INSTALL_PREFIX/sbin/sshd
;;
stop)
echo "Stopping sshd..."
pkill sshd
;;
restart)
\$0 stop
sleep 1
\$0 start
;;
*)
echo "Usage: \$0 {start|stop|restart}"
exit 1
esac
exit 0
EOF
chmod +x /etc/init.d/sshd_new
chkconfig --add sshd_new
echo -e "\n[✔] OpenSSH 升级完成,当前版本:"
/usr/sbin/sshd -V 2>&1 | head -n1
报错分析:
生成新版 OpenSSH 的启动脚本 /etc/init.d/sshd_new
请执行以下步骤创建它:
① 创建启动脚本
cat > /etc/init.d/sshd_new << 'EOF' #!/bin/bash # chkconfig: 2345 55 25 # description: OpenSSH 9.x manual control script ### BEGIN INIT INFO # Provides: sshd_new # Required-Start: $network $syslog # Required-Stop: $network $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start/stop OpenSSH server (manual install) ### END INIT INFO SSHD=/usr/sbin/sshd SSHD_CONFIG=/etc/ssh/sshd_config PID_FILE=/var/run/sshd.pid start() { echo -n "Starting sshd (OpenSSH 9.x): " if [ -f "$PID_FILE" ]; then echo "Already running." exit 1 fi $SSHD -f $SSHD_CONFIG sleep 1 pgrep -f "$SSHD" > /dev/null && echo "[OK]" || echo "[FAILED]" } stop() { echo -n "Stopping sshd: " if [ -f "$PID_FILE" ]; then kill `cat $PID_FILE` rm -f $PID_FILE echo "[OK]" else pkill -f "$SSHD" echo "[OK]" fi } status() { pgrep -f "$SSHD" > /dev/null if [ $? -eq 0 ]; then echo "OpenSSH 9.x is running." else echo "OpenSSH 9.x is stopped." fi } restart() { stop sleep 1 start } case "$1" in start) start ;; stop) stop ;; restart) restart ;; status) status ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1 ;; esac EOF
浙公网安备 33010602011771号