晓夏

YoungCheung

Zhang Sir's technical way

AnolisOS8.6 升级openssh版本

浏览量:102820

一、升级背景

      Anolis OS release 8.6操作系统自带的openssh版本为8.0,被扫出openssh的漏洞,故升级最新版本整改漏洞。

二、升级注意事项

    1.龙蜥操作系统自带了openssl 1.1.1k,所以无需安装其他版本的openssl,以免导致冲突。

    2.升级前先备份openssh的配置文件目录,多打开一个会话窗口保持ssh连接,为了保险起见建议打开telnet服务,防止升级失败openssh无法启动导致远程不到服务器。

    3.编译安装时如提示缺少一些文件导致安装报错,可通过yum工具进行依赖包的安装。

三、升级步骤

3.1 编译安装

#备份原始配置
$ \cp -a  /etc/ssh /etc/ssh_bak
$ \cp -a  /etc/pam.d/sshd /etc/pam.d/sshd_bak

# 下载源码
$ mkdir /test
$ cd /test
$ wget https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-9.7p1.tar.gz
$ tar xf openssh-9.7p1.tar.gz
$ cd openssh-9.7p1

#卸载旧版openssh
$ yum remove openssh -y

#编译安装
$ yum install -y zlib-devel.x86_64 openssl-devel.x86_64 pam-devel.x86_64 gcc
$ ./configure --prefix=/usr --sysconfdir=/etc/ssh  --with-zlib=/usr/lib --with-ssl-dir=/etc/pki/tls --with-pam
$ make && make install

#生成ssh服务管理脚本和自启动
$ install -m644 contrib/redhat/sshd.pam /etc/pam.d/sshd 
$ cp contrib/redhat/sshd.init /etc/init.d/sshdchmod a+x /etc/init.d/sshd
$ chkconfig --add sshd

#还原配置
$ \cp  -a /etc/ssh/sshd_config /etc/ssh/sshd_config_default
$ \cp -a  /etc/pam.d/sshd /etc/pam.d/sshd_default

$ cat /etc/ssh_bak/sshd_config >/etc/ssh/sshd_config
$ cat /etc/pam.d/sshd_bak >/etc/pam.d/sshd

#重启sshd
$ systemctl restart sshd

#查看ssh和sshd版本
$ ssh -V
$ sshd -V

3.2 RPM制作并升级操作

# 安装依赖包
$ yum install -y rpm-build rpmdevtools gcc gcc-c++  perl glibc glibc-devel openssl-devel openssl pcre-devel zlib zlib-devel make wget krb5-devel pam-devel libX11-devel xmkmf libXt-devel initscripts libXt-devel imake gtk2-devel lrzsz
 
# 创建RPM包的相关目录
$ mkdir -pv /root/rpmbuild
$ cd /root/rpmbuild
$ rpmdev-setuptree
$ tree
.
├── BUILD
├── RPMS
├── SOURCES
├── SPECS
└── SRPMS
5 directories, 0 files 
 
# 打开OpenSSH官网下载最新版本的Openssh 9.3p2和相关依赖包
$ cd /root/rpmbuild/SOURCES/
$ wget  https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.7p1.tar.gz
$ tar -xf openssh-9.7p1.tar.gz
$ wget https://src.fedoraproject.org/repo/pkgs/openssh/x11-ssh-askpass-1.2.4.1.tar.gz/8f2e41f3f7eaa8543a2440454637f3c3/x11-ssh-askpass-1.2.4.1.tar.gz
 
# 配置相关编译文件
$ cp openssh-9.7p1/contrib/redhat/openssh.spec /root/rpmbuild/SPECS/
$ cd /root/rpmbuild/SPECS/

#不生产ask包(可选)
$ sed -i -e "s/%global no_gnome_askpass 0/%global no_gnome_askpass 1/g" openssh.spec
$ sed -i -e "s/%global no_x11_askpass 0/%global no_x11_askpass 1/g" openssh.spec
#修改openssl-devel的报错(如未报错不用执行)
$ sed -i '/openssl-devel < 1.1/s/^/#/' openssh.spec
#修改PreReq的报错(如未报错不用执行)
$ sed -i '/PreReq:/s/^/#/' openssh.spec
 
# 编译文件
$ rpmbuild -ba openssh.spec
 
# 
$ cd /root/rpmbuild/RPMS/x86_64
$ ll
-rw-r--r-- 1 root root  627876 6月  19 09:46 openssh-9.7p1-1.an8.x86_64.rpm
-rw-r--r-- 1 root root  623488 6月  19 09:46 openssh-clients-9.7p1-1.an8.x86_64.rpm
-rw-r--r-- 1 root root  970000 6月  19 09:46 openssh-debuginfo-9.7p1-1.an8.x86_64.rpm
-rw-r--r-- 1 root root  496012 6月  19 09:46 openssh-server-9.7p1-1.an8.x86_64.rpm

 
# 打包所有rpm包
tar -zcvf openssh9.7p1_an8_rpm.tar.gz *.rpm

#问题参考 https://www.cnblogs.com/JimmyThomas/p/16257866.html


3.3 使用RPM升级openssh操作

#备份原始配置
$ \cp -a  /etc/ssh /etc/ssh_bak
$ \cp -a  /etc/pam.d/sshd /etc/pam.d/sshd_bak

#查看当前openssh版本
# rpm -qa|grep openssh
openssh-8.0p1-13.0.1.an8.x86_64
openssh-server-8.0p1-13.0.1.an8.x86_64
openssh-clients-8.0p1-13.0.1.an8.x86_64
openssh-askpass-8.0p1-13.0.1.an8.x86_64

#卸载旧版openssh
$ yum remove openssh -y

#执行升级
$ rpm -Uvh openssh-*rpm

#还原配置
$ \cp  -a /etc/ssh/sshd_config /etc/ssh/sshd_config_default
$ \cp -a  /etc/pam.d/sshd /etc/pam.d/sshd_default

$ cat /etc/ssh_bak/sshd_config >/etc/ssh/sshd_config
$ cat /etc/pam.d/sshd_bak >/etc/pam.d/sshd

#修改权限并重启sshd
$ chmod 600 /etc/ssh/ssh_host_rsa_key
$ chmod 600 /etc/ssh/ssh_host_ecdsa_key
$ chmod 600 /etc/ssh/ssh_host_ed25519_key
$ systemctl restart sshd

 注意:从8.8开始默认禁用使用SHA-1哈希算法的RSA签名,从9.5以后ssh-keygen 默认使用Ed25519加密算法,dsa从openssh 9.0就不再使用,rsa从openssh 9.3开始就不再使用。详情请阅读:OpenSSH: Release Notes

3.4 正确创建key的方式

$ ssh-keygen -t ed25519

3.5 使用源码升级后未找到ssh-copy-id命令

rpm升级openssh之后,高版本的openssh-clinet已经没有ssh-copy-id命令,对于用此命令做免密登陆,不是很方便。

如果使用openssh源码的话,解压之后,会在openssh-9.7p1/contrib下生产ssh-copy-id文件

$ chmod +x ssh-copy-id && mv ssh-copy-id /usr/bin



神回复

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。