Linux下OpenSSH升级9.x版本记录
发表于|更新于|技术博客
|总字数:1.1k|阅读时长:4分钟|浏览量:
前言
- 已验证系统版本
- centos6.x
- centos7.x
- 麒麟系统,可能出现sshd重启卡死情况,但实际是启动的。
安装 Telnet 服务和 xinetd
防止openSSH升级失败,导致无法连接服务器
关闭防火墙
sh
脚本命令: 判断启用的防火墙,并尝试关闭防火墙。
firewalld
service firewalld stop |
iptables
service iptables stop |
安装 Telnet 服务和 xinetd
yum install -y telnet-server xinetd |
配置服务
cat <<EOL > /etc/xinetd.d/telnet |
启动并设为开机自启
根据情况选择其一
systemctl命令方式
systemctl start xinetd |
systemctl enable xinetd |
常规命令执行方式
service xinetd start |
chkconfig xinetd on |
卸载关闭 xinetd
执行升级openSSH成功后,可以卸载关闭xinetd
服务
centos6
service xinetd stop |
centos7
systemctl stop xinetd |
升级安装OpenSSH
CVE-2024-6387
关于openssh的漏洞,升级openssh到9.8版本
安装依赖环境
yum -y install gcc gcc-c++ zlib-devel openssl-devel pam-devel perl-IPC-Cmd |
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.8p1.tar.gz |
tar -zxvf openssh-9.8p1.tar.gz |
配置环境
请优先升级ssl版本,在当前网站内查询关于升级ssl的文章。
cd openssh-9.8p1/ && ./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-ssl-dir=/usr/local/openssl_3.3 --with-zlib --with-pam |
- –prefix=/usr/local/openssh 指定 OpenSSH 的安装路径
- –sysconfdir=/etc/ssh 指定 SSH 配置文件路径
- –with-ssl-dir=/usr/local/openssl 指定 OpenSSL 库路径
- –with-zlib 启用 zlib 压缩支持
- –with-pam 启用 PAM 认证支持
make -j 2 && make install -j 2 |
备份旧版本并创建符号链接
备份旧版本
\cp -rf /usr/bin/ssh /usr/bin/ssh.bak && \cp -rf /usr/sbin/sshd /usr/sbin/sshd.bak && \cp -rf /etc/ssh/sshd_config /etc/ssh/sshd_config.bak |
rm -rf /usr/bin/ssh && rm -rf /usr/sbin/sshd |
创建软链接
ln -s /usr/local/openssh/bin/ssh /usr/bin/ssh && ln -s /usr/local/openssh/sbin/sshd /usr/sbin/sshd |
更新配置文件和库路径
更新库路径
echo "/usr/local/openssh/lib" | tee -a /etc/ld.so.conf && ldconfig |
更新环境变量
echo 'export PATH=/usr/local/openssh/bin:$PATH' | tee -a /etc/profile && source /etc/profile |
验证 sshd_config 文件
对比配置文件(可选)
diff /etc/ssh/sshd_config /etc/ssh/sshd_config.bak |
恢复配置文件(可选)
cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config |
重启 SSH 服务并验证
重启
systemctl restart sshd
或
service sshd restart
systemctl restart sshd |
service sshd restart |
验证
ssh -V |
问题记录
启动失败
/etc/ssh/ssh_host_ed25519_key 文件的权限设置过于宽松。SSH 主机密钥文件需要更严格的权限,以确保其安全性。具体来说,只有 root 用户应该拥有读取和写入权限,其他用户不应有任何权限。
修复文件权限
chmod 600 /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key |
验证文件权限
ls -l /etc/ssh/ssh_host_* |
配置不支持
sed -i 's/^GSSAPIAuthentication/#&/' /etc/ssh/sshd_config && sed -i 's/^GSSAPICleanupCredentials/#&/' /etc/ssh/sshd_config && sed -i 's/^UsePAM/#&/' /etc/ssh/sshd_config |
允许root用户登录服务器(可选)
#sed -i 's/#PermitRootLogin yes/PermitRootLogin yes/g' /etc/ssh/sshd_config |
无法正常重启
问题描述:
执行命令 systemctl restart sshd会卡住,然后ctrl c,在执行 systemctl status sshd,发现已启动
查看sshd日志
journalctl -u sshd |
编译升级最新OpenSSH_8.4p1, 替换sshd.service,解决启动卡死的问题
解决步骤
安装依赖包
centos
yum install systemd-devel -y |
ubuntu
apt-get install libsystemd-dev |
修改源码
在源码目录下,找到
sshd.c
在开头添加引用
#include <systemd/sd-daemon.h>
在函数
server_accept_loop
(第二处位置)前添加代码:sd_notify(0, "READY=1")
/* Signal systemd that we are ready to accept connections */
sd_notify(0, "READY=1");
/* Accept a connection and return in a forked child */
server_accept_loop(&sock_in, &sock_out,&newsock, config_s);
}
修改编译文件Makefile
需要先
./configure ...
才会生成Makefile
文件
找到变量LIBS
,修改如下:
LIBS=-lcrypto -ldl -lutil -lz -lcrypt -lresolv -lsystemd |
make |
make install |
Xshell等ssh工具无法正常连接
升级完openSSH之后,所有主机使用root无法ssh登陆
修改ssh配置文件
vim /etc/ssh/sshd_config |
注释以下配置
#GSSAPIAuthentication yes |
允许root登录
PermitRootLogin yes |
重启sshd服务
service sshd restart |
文章作者: MUMU
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 blog.wo0ow.com!