OpenSSH 9.3之前的版本存在各种各样的安全漏洞,为此,我们需要将OpenSSH升级到最新的9.3的版本。
执行:ssh -V,我们可以查看当前的openssh版本
为了避免升级过程中出现意外而导致服务器无法正常使用,建议操作前先对服务器进行快照备份!!!
1. 备份原有pam.d下的sshd文件
mv /etc/pam.d/sshd /etc/pam.d/sshd-bak
ls -l /etc/pam.d/sshd*cp /etc/ssh/ /etc/ssh-bak/
当备份pam.d下的sshd文件时,发现该路径下没有此文件时,可以从其他服务器拷贝一个过来,或是执行:vi /etc/pam.d/sshd 手敲也行,其内容如下:
#%PAM-1.0
auth substack password-auth
auth include postlogin
account required pam_sepermit.so
account required pam_nologin.so
account include password-auth
password include password-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required pam_selinux.so open env_params
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session optional pam_motd.so
session include password-auth
session include postlogin
2. 安装telnet
升级过程会卸载旧的ssh而导致无法远程,所以先安装一个Telnet。如果安装期间不使用服务器则可忽略telnet的安装(毕竟还有服务器的快照备份)
检查系统中是否已经安装了telnet的服务端和客户端,命令如下:
rpm -q telnet-server
rpm -q telnet
当系统中没有安装telnet时,则会报如下信息:
执行命令进行安装telnet
yum install telnet-server -y
yum install telnet -y
设置开机启动并启动telnet
systemctl enable telnet.socket
systemctl start telnet.socket
防火墙开启23端口,使用 telnet ip 进行连接登录。默认系统中是不允许root用户使用telnet登录的,因此我们需要授权一下
echo 'pts/0' >>/etc/securetty
echo 'pts/1' >>/etc/securetty
当我们在进行登录时无法正常登录时,主机端执行
tail /var/log/secure
假如我们看到的是:access denied: tty 'pts/3' is not secure !
此时我们如果看到的是pts几就将几添加一下
echo 'pts/3' >>/etc/securetty
添加后一定要重启telnet
3. 下载openssh包进行升级
cd /opt/
wget http://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.3p1.tar.gz
解压
tar -zxvf openssh-9.3p1.tar.gz
cd openssh-9.3p1
卸载旧版本
rpm -e --nodeps `rpm -qa | grep openssh`
安装相关依赖
yum -y install gcc pam-devel zlib-devel openssl-devel
编译配置
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-zlib --with-md5-passwords --with-pam
编译并安装
make && make install
文件授权
chmod 600 /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key
复制配置文件
cp -a contrib/redhat/sshd.init /etc/init.d/sshd
chmod u+x /etc/init.d/sshd
还原配置文件
cp /etc/pam.d/sshd-bak /etc/pam.d/sshd
cp /etc/ssh-bak/sshd_config /etc/ssh/sshd_config
添加开机自启
chkconfig --add sshd
chkconfig sshd on
执行:sshd -t 验证配置文件是否正确
此时我们已经看到这两个属性在当前openssh版本下不支持,我们进入配置文件,将这两个属性注释掉
vi /etc/ssh/sshd_config
重新启动sshd
systemctl restart sshd
执行:ssh -V 此时我们已经可以看到openssh已经升级到了9.3
4. 升级过程遇到的坑
4.1 升级后ssh工具无法成功连接(或是连接上了,但是黑框打不开),找了很多资料,最终发现,问题出在了selinux上。此时我们只需要执行:setenforce 0 之后重启openssh的服务即可
setenforce 0
systemctl restart sshd
到此我们会发现ssh工具已经能顺利连接服务器了
4.2 升级ssh工具后sftp窗口打不开,这个很好解决,只需要配置一下sshd_config即可轻松解决
vi /etc/ssh/sshd_config
注释掉Subsystem那行,重新添加一行
重启openssh服务,注意正在使用的ssh工具也关闭掉重启一下(可能出于连接状态,但是sftp打不开。但此问题截止目前已经处理了,所以也需要关闭重新打开)。