编译
Centos7.9
使用工具进行编译rpm安装包
项目地址:https://github.com/boypt/openssh-rpms
下载源码包上传至服务器(或直接下载编译好的安装包进行安装)
安装编译环境:
yum install -y perl perl-IPC-Cmd wget unzip
yum groupinstall -y "Development Tools"
yum install -y imake rpm-build pam-devel krb5-devel zlib-devel libXt-devel libX11-devel gtk2-devel initscripts chkconfig systemd-devel perl-Time-Piece
解压源码
unzip openssh-rpms-main.zip
下载OpenSSH及OpenSSL升级包
./pullsrc.sh
修改version.env文件,
# WITH_OPENSSL:
# 0: build without openssl (using openssh internal crypto) #不用OpenSSL进行构建(使用OpenSSH内部自带的加密库)
# 1: use system openssl #使用系统中已安装OpenSSL
# 2: build openssl statically #静态编译OpenSSL(将OpenSS库直接打包进程序中)
# undefined: let the script decide (default) #由脚本自行决定(默认选项)
WITH_OPENSSL=2
执行编译
./compile.sh
查看编译结果:
[root@test openssh-rpms-main]# ll el7/RPMS/x86_64/
total 28256
-rw-r--r--. 1 root root 9810292 Sep 12 09:13 openssh-10.5p1-1.el7.x86_64.rpm
-rw-r--r--. 1 root root 10339036 Sep 12 09:13 openssh-clients-10.5p1-1.el7.x86_64.rpm
-rw-r--r--. 1 root root 8776496 Sep 12 09:13 openssh-server-10.5p1-1.el7.x86_64.rpm
[root@test openssh-rpms-main]# ll output/
total 28256
-rw-r--r--. 1 root root 9810292 Sep 12 09:13 openssh-10.5p1-1.el7.x86_64.rpm
-rw-r--r--. 1 root root 10339036 Sep 12 09:13 openssh-clients-10.5p1-1.el7.x86_64.rpm
-rw-r--r--. 1 root root 8776496 Sep 12 09:13 openssh-server-10.5p1-1.el7.x86_64.rpm
[root@test openssh-rpms-main]#
安装
Centos7.9
# 备份PAM和ssh配置
cd el7/RPMS/x86_64/ 或 output/
cp /etc/pam.d/sshd /etc/pam.d/sshd.before
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.before
# 升级openssh rpm包
rpm -Uvh *.rpm
# 进入ssh目录,修正私钥权限
cd /etc/ssh/
chmod 400 ssh_host_ecdsa_key ssh_host_ed25519_key ssh_host_rsa_key
# 开启root登录
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
# 启用PAM
sed -i "s/#UsePAM no/UsePAM yes/g" /etc/ssh/sshd_config
# 恢复pam配置
/bin/cp /etc/pam.d/sshd.before /etc/pam.d/sshd
# 删除已存在的KexAlgorithms、GSSAPIKexAlgorithms、HostKeyAlgorithms行
sed -i '/KexAlgorithms/d' /etc/ssh/sshd_config
sed -i '/GSSAPIKexAlgorithms/d' /etc/ssh/sshd_config
sed -i '/HostKeyAlgorithms/d' /etc/ssh/sshd_config
# 添加Kex 算法
echo "KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1" >> /etc/ssh/sshd_config
echo "HostKeyAlgorithms +ssh-rsa" >> /etc/ssh/sshd_config
# 关键:校验sshd配置语法,有报错绝对不要重启sshd!
sshd -t
# 如果`sshd -t`有报错,**不要重启 sshd**,立刻回滚备份文件
# 无报错输出则可正常重启sshd服务
systemctl restart sshd
systemctl status sshd
执行建议
- 务必保留至少一个已登录 ssh 窗口,不要关闭!
- 进入 rpm 包目录
el7/RPMS/x86_64/再执行脚本,否则rpm -Uvh *.rpm找不到包 - 如果
sshd -t有报错,不要重启 sshd,立刻回滚备份文件
# 回滚命令
cp /etc/ssh/sshd_config.before /etc/ssh/sshd_config
cp /etc/pam.d/sshd.before /etc/pam.d/sshd
执行前备份原安装包
# 安装工具
yum install -y yum-utils
# 创建备份目录
mkdir -p /root/old_openssh_rpms
# 获取当前系统上openssh完整包名,然后下载
yumdownloader --destdir=/root/old_openssh_rpms $(rpm -q openssh openssh-clients openssh-server)
回退软件包
cd /root/old_openssh_rpms
rpm -Uvh --oldpackage openssh-*.rpm
# 配置已经是旧的,不用再cp
sshd -t
systemctl restart sshd