Centos7.9编译OpenSSH的rpm安装包并升级OpenSSH


 本文介绍如何通过openssh-9.0p1.tar.gz制作openssh的rpm安装包,并升级openssh到9.0。

1. 下载openssh-9.0p1.tar.gz

2. 编译成rpm

3. 备份原有ssh服务文件

4. 升级ssh版本

制作openssh的rpm包以及安装过程中出现的问题可查看以下文章:

OpenSSH需要依赖ZLIB和LibreSSL(替换OpenSSL),因此需要从官网下载三者的源码包。
版本及官网链接:
  zlib-1.2.12.tar.gz http://www.zlib.net/
  libressl-3.5.2.tar.gz https://www.libressl.org/
  openssh-9.0p1.tar.gz http://www.openssh.org/

  如有需要可自行升级

下载

请从官方网站或者国内镜像下载相关安装包。 

官网下载地址:http://www.openssh.com/releasenotes.html

国内镜像下载地址:https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/

百度网盘:https://pan.baidu.com/s/1gqpH2xeOkYHJ0CiztbmqoQ
提取码:imfg 

  • openssh-9.0.tar.gz(适用于BSD)
  • openssh-9.0p1.tar.gz(适用于Linxu)

制作RPM包

# 1. 创建两个目录SOURCES和SPECS

mkdir -p /usr/src/redhat/{SOURCES,SPECS}

# 2. 进入SOURCES

cd /usr/src/redhat/SOURCES/

# 3. 将上面下载的openssh-9.0p1.tar.gz包上传到/usr/src/redhat/SOURCES/目录

# 4. 解压出整包 从里面提取出 openssh.spec 该文件

tar xfz openssh-9.0p1.tar.gz openssh-9.0p1/contrib/redhat/openssh.spec

# 5. 移动解压出来的 openssh.spec 文件到 SPECS 目录

mv openssh-9.0p1/contrib/redhat/openssh.spec ../SPECS/

# 6. 执行chown 

chown sshd:sshd /usr/src/redhat/SPECS/openssh.spec

# 7. openssh.spec_def

cp /usr/src/redhat/SPECS/openssh.spec /usr/src/redhat/SPECS/openssh.spec_def

# 8. 修改几个配置选项 【可选项】,关掉no_gnome_askpass no_x11_askpass这两个参数

sed -i -e "s/%define no_gnome_askpass 0/%define no_gnome_askpass 1/g" /usr/src/redhat/SPECS/openssh.spec

sed -i -e "s/%define no_x11_askpass 0/%define no_x11_askpass 1/g" /usr/src/redhat/SPECS/openssh.spec

# 9. 可以查看两个文件的不同之处(非必执行)

diff openssh.spec openssh.spec_def

# 10. 创建预编译目录

mkdir -p ~/rpmbuild/SOURCES/

cp /usr/src/redhat/SOURCES/openssh-9.0p1.tar.gz ~/rpmbuild/SOURCES/

# 11. 安装依赖 

yum install rpm-build gcc make wget openssl-devel krb5-devel pam-devel libX11-devel xmkmf libXt-devel # 12. 执行编译 cd /usr/src/redhat/SPECS/ rpmbuild -ba openssh.spec

# 13. 查看编译后的目录结构

查看目录结构:tree -L 2 /root/rpmbuild/   

如出现:

可以直接跳过,执行下面的

 # 14. 查看rpm包

ll /root/rpmbuild/RPMS/x86_64/openssh-*

备份原有的openssh服务

# 1. 创建备份目录:mkdir -p /war/backup/openssh_def  # 目录根据自己喜好随意起名即可

# 2. 进入:cd /war/backup/openssh_def

# 3. 将/etc/ssh目录下的所有文件压缩备份到当前目录:tar -cvzf etc_ssh.tar.gz /etc/ssh

# 4. 升级rpm 升级后会修改/etc/pam.d/sshd 文件,需要备份此文件,升级完还原此文件。

cp /etc/pam.d/sshd /etc/pam.d/system-auth .

cp -p /etc/pam.d/sshd /etc/pam.d/sshd_`date +%Y%m%d`

cp -p /etc/pam.d/system-auth /etc/pam.d/system-auth_`date +%Y%m%d`

开始升级

# 1. 执行升级命令

rpm -Uvh /root/rpmbuild/RPMS/x86_64/*.rpm

# 2. 把新的 /etc/pam.d/sshd文件备份,并恢复原来版本的 /etc/pam.d/sshd cp -p /etc/pam.d/sshd /root/sshd.afterupgrade cp /war/backup/openssh_def/sshd /etc/pam.d/ # 3. 开启PAM vi /etc/ssh/sshd_config UsePAM yes 注意:   本人测试开启后能连接上,   但是如果开启后导致连接不上就需要关闭了 # 4. 重启sshd服务 CentOS 6:service sshd restart CentOS 7:systemctl restart sshd

# 5. 设置root用户可以远程连接

echo "PermitRootLogin yes" >> /etc/ssh/sshd_config

需要重启ssh服务

# 6. 其他操作

 1 # cp contrib/redhat/sshd.pam /etc/pam.d/sshd
 2 # pam有研究的可以启用下,本人不会配置,开了pam会导致ssh连不上
 3 # echo "UsePAM no" >> /etc/ssh/sshd_config
 4 # 允许root用户通过ssh登录
 5 # echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
 6 # 开启SSH秘钥登录
 7 # echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config
 8 # 开启远程GUI支持
 9 # echo "X11Forwarding yes" >> /etc/ssh/sshd_config
10 
11 # 注册服务,并设置开机启动
12 # cp -p contrib/redhat/sshd.init /etc/init.d/sshd
13 # chown root.root /etc/init.d/sshd
14 # chmod +x /etc/init.d/sshd
15 # chkconfig  --add  sshd
16 # chkconfig  sshd  on
17 # chkconfig  --list  sshd
18 # systemctl restart sshd