OpenSSH 升级 release 8.8 (September 26, 2021)

一、当前环境

OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017

CentOS Linux release 7.4.1708 (Core)

openssh-7.4p1-11.el7.x86_64
openssh-clients-7.4p1-11.el7.x86_64
openssh-server-7.4p1-11.el7.x86_64

openssl-libs-1.0.2k-8.el7.x86_64
openssl-1.0.2k-8.el7.x86_64

二、OpenSSH 8.8 依赖

https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/INSTALL
OpenSSH 8.8 对OpenSSL的要求:

1.0.x >= 1.0.1 or 1.1.0 >= 1.1.0g or any 1.1.1

经考虑,直接使用默认的openssl-1.0.2k。考虑兼容性,如果需要升级openssl,那直接升级centos8吧。

三、升级 OpenSSH 8.8 准备工作

编译安装需要

yum install gcc  zlib-devel openssl-devel pam-devel 

RPM打包还需要

yum install libXt-devel imake gtk2-devel krb5-devel

四、通过源码包安装

PAM
如果使用PAM,还需要自行安装一个PAM控制文件/etc/pam.d/sshd
一个通用的PAM配置 contrib/sshd.pam.generic,可以修改用于你的系统。 如果使用Red Hat Linux,contrib/redhat/sshd.pam 应该更适合。 没有成功的安装有效的PAM文件会导致无法使用密码身份验证。在HP-UX 11 和 Solaris,标准的 /etc/pam.conf 可搭配sshd使用。

准备工作

  • 备份/etc/pam.d/sshd
cp /etc/pam.d/sshd ~/
  • 卸载 openssh
yum remove openssh

会卸载 openssh openssh-clients openssh-server 三个包。

当前ssh连接还在,千万别退出,退出就连不上了。or配置telnet服务。

安装

  1. 默认安装
    默认会将二进制文件安装到/usr/local/bin,配置文件安装到 /usr/local/etc,服务器安装到/usr/local/sbin
./configure
make
make install
OpenSSH has been configured with the following options:
                     User binaries: /usr/local/bin
                   System binaries: /usr/local/sbin
               Configuration files: /usr/local/etc
                   Askpass program: /usr/local/libexec/ssh-askpass
                      Manual pages: /usr/local/share/man/manX
                          PID file: /var/run
  Privilege separation chroot path: /var/empty
            sshd default user PATH: /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
                    Manpage format: doc
                       PAM support: no
                   OSF SIA support: no
                 KerberosV support: no
                   SELinux support: no
              MD5 password support: no
                   libedit support: no
                   libldns support: no
  Solaris process contract support: no
           Solaris project support: no
         Solaris privilege support: no
       IP address in $DISPLAY hack: no
           Translate v4 in v6 hack: yes
                  BSD Auth support: no
              Random number source: OpenSSL internal ONLY
             Privsep sandbox style: seccomp_filter
                   PKCS#11 support: yes
                  U2F/FIDO support: yes

              Host: x86_64-pc-linux-gnu
          Compiler: cc
    Compiler flags: -g -O2 -pipe -Wall -Wextra -Wpointer-arith -Wuninitialized -Wsign-compare -Wformat-security -Wsizeof-pointer-memaccess -Wno-pointer-sign -Wno-unused-parameter -Wno-unused-result -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -ftrapv -fno-builtin-memset -fstack-protector-strong -fPIE  
Preprocessor flags:  -D_XOPEN_SOURCE=600 -D_BSD_SOURCE -D_DEFAULT_SOURCE
      Linker flags:  -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack -fstack-protector-strong -pie 
         Libraries: -lcrypto -ldl -lutil -lz  -lcrypt -lresolv

  1. 指定安装位置
./configure --prefix=/opt
make
make install

将 OpenSSH 安装到 /opt/{bin,etc,lib,sbin}

  1. 指定详细路径
./configure --prefix=/opt --sysconfdir=/etc/ssh
make
make install

将二进制文件安装到 /opt/{bin,lib,sbin},配置文件安装到 /etc/ssh

  1. 覆盖安装
./configure --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc/ssh --with-pam --with-zlib --with-md5-passwords
make 
make install
OpenSSH has been configured with the following options:
                     User binaries: /usr/bin
                   System binaries: /usr/sbin
               Configuration files: /etc/ssh
                   Askpass program: /usr/local/libexec/ssh-askpass
                      Manual pages: /usr/local/share/man/manX
                          PID file: /var/run
  Privilege separation chroot path: /var/empty
            sshd default user PATH: /usr/bin:/bin:/usr/sbin:/sbin
                    Manpage format: doc
                       PAM support: yes
                   OSF SIA support: no
                 KerberosV support: no
                   SELinux support: no
              MD5 password support: yes
                   libedit support: no
                   libldns support: no
  Solaris process contract support: no
           Solaris project support: no
         Solaris privilege support: no
       IP address in $DISPLAY hack: no
           Translate v4 in v6 hack: yes
                  BSD Auth support: no
              Random number source: OpenSSL internal ONLY
             Privsep sandbox style: seccomp_filter
                   PKCS#11 support: yes
                  U2F/FIDO support: yes

              Host: x86_64-pc-linux-gnu
          Compiler: cc
    Compiler flags: -g -O2 -pipe -Wall -Wextra -Wpointer-arith -Wuninitialized -Wsign-compare -Wformat-security -Wsizeof-pointer-memaccess -Wno-pointer-sign -Wno-unused-parameter -Wno-unused-result -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -ftrapv -fno-builtin-memset -fstack-protector-strong -fPIE  
Preprocessor flags:  -D_XOPEN_SOURCE=600 -D_BSD_SOURCE -D_DEFAULT_SOURCE
      Linker flags:  -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack -fstack-protector-strong -pie 
         Libraries: -lcrypto -ldl -lutil -lz  -lcrypt -lresolv
         +for sshd:  -lpam

PAM is enabled. You may need to install a PAM control file 
for sshd, otherwise password authentication may fail. 
Example PAM control files can be found in the contrib/ 
subdirectory


确认结果

[root@VM-99-17-centos openssh-8.8p1]# ssh -V
OpenSSH_8.8p1, OpenSSL 1.0.2k-fips  26 Jan 2017

注意:
编译安装没有服务管理文件,不被 servcie 、 systemd 管理。可以自行添加服务管理。
所以,为什么不 build 成 RPM packages 安装呢?

五、编译成 OpenSSH 8.8 RPM 包安装

升级 OpenSSH 8.8 released September 26, 2021

关于 pam
pam.d/目录下需要有一个sshd文件。
编译的包,自动导入的sshd文件,需要pam_stack.sopam_nologin.so文件,没有。所以,还是用原来的sshd文件。

  1. 依赖包

  1. 创建 ~/rpmbuild/目录
rpmdev-setuptree
  1. 准备源码包、补丁文件
  • openssh 源码包
  • x11-ssh-askpass-1.2.4.1.tar.gz 编译的时候需要
  • sshd文件
cd ~/rpmbuild/SOURCES/
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.8p1.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 /etc/pam.d/sshd ./
  1. 修正spec文件
cd ~/rpmbuild/SOURCES/
tar xzvf openssh-8.8p1.tar.gz openssh-8.8p1/contrib/redhat/openssh.spec -C ../SPECS/

修改解压到SPECS/目录下的 openssh.spec 文件

  • 修改BuildRequires,注销 openssl-devel < 1.1 ,否则会报错
BuildRequires: openssl-devel >= 1.0.1
# BuildRequires: openssl-devel < 1.1
  • 修改%install section部分,安装sshd文件

if %{build6x}释义: 判断是否RHEL老版本(6及以前)

# Use build6x options for older RHEL builds
# RHEL 7 not yet supported
%if 0%{?rhel} > 6
%global build6x 0
%else
%global build6x 1
%endif

修改 %install section 关于sshd的部分,安装sshd文件,如下:

%if %{build6x}
install -m644 contrib/redhat/sshd.pam.old $RPM_BUILD_ROOT/etc/pam.d/sshd
%else
# install -m644 contrib/redhat/sshd.pam     $RPM_BUILD_ROOT/etc/pam.d/sshd
install -m644 $RPM_SOURCE_DIR/sshd $RPM_BUILD_ROOT/etc/pam.d/sshd
%endif

修改的文件,对比如下:

# diff --suppress-common-lines SOURCES/openssh-8.8p1/contrib/redhat/openssh.spec SPECS/openssh.spec 
103c103
< BuildRequires: openssl-devel < 1.1
---
> # BuildRequires: openssl-devel < 1.1
279c279,280
< install -m644 contrib/redhat/sshd.pam     $RPM_BUILD_ROOT/etc/pam.d/sshd
---
> # install -m644 contrib/redhat/sshd.pam     $RPM_BUILD_ROOT/etc/pam.d/sshd
> install -m644 $RPM_SOURCE_DIR/sshd      $RPM_BUILD_ROOT/etc/pam.d/sshd
  1. 编译生成二进制包
cd ~/rpmbuild/SPECS/
rpmbuild -bb openssh.spec

如上命令,将在~/rpmbuild/RPMS/目录下生成.rpm二进制安装包。

  1. 部署升级
    复制安装包openssh-8.8p1-1.el7.x86_64.rpmopenssh-server-8.8p1-1.el7.x86_64.rpmopenssh-clients-8.8p1-1.el7.x86_64.rpm 到目标服务器。

执行如下安装命令:

yum localinstall openssh-8.8p1-1.el7.x86_64.rpm openssh-server-8.8p1-1.el7.x86_64.rpm openssh-clients-8.8p1-1.el7.x86_64.rpm

查看版本

[root@VM-99-17-centos ~]# ssh -V
OpenSSH_8.8p1, OpenSSL 1.0.2k-fips  26 Jan 2017

重启服务

service sshd restart

注意:
yum localinstall 会卸载原来的版本,如果需要请自行备份配置文件等。
不支持systemd,使用service、chkconfig进行服务管理。
不支持使用root登录,根据自己需求修改spec文件,自定义配置。所以,在安装前需要配置好登录账户。
编译的版本缺少 sshd-keygenssh-copy-id 命令,待研究

附件一、参考文档

centos7 升级openssh到openssh-8.0p1版本 - nmap - 博客园 (cnblogs.com)

Centos7 upgrades openssh to OpenSSH_8.0p1 (programmer.ink)

Upgrade OpenSSH 7.9 | Develop Paper

CentOS7下制作OpenSSH 8.4p1 RPM包 - 云+社区 - 腾讯云 (tencent.com)

制定OpenSSH 8.6 RPM包 - 简书 (jianshu.com)

附件二、CentOS openssh-7.4p1 安装文件 (/usr/share 除外)

  • openssh-7.4p1-21.el7.x86_64
  • openssh-server-7.4p1-21.el7.x86_64
  • openssh-clients-7.4p1-21.el7.x86_64
文件 openssh openssh-server openssh-clients
config /etc/ssh
/etc/ssh/moduli
/etc/ssh/sshd_config
/etc/sysconfig/sshd
/etc/pam.d/sshd
/etc/ssh/ssh_config
/usr/lib/systemd/system/ sshd-keygen.service
sshd.service
sshd.socket
sshd@.service
lib /usr/lib64/fipscheck/ssh.hmac /usr/lib64/fipscheck/ssh.hmac
/usr/sbin/ sshd
sshd-keygen
/usr/bin/ ssh-keygen scp
sftp
slogin
ssh
ssh-add
ssh-agent
ssh-copy-id
ssh-keyscan
/usr/libexec/openssh/ ctr-cavstest
ssh-keysign
sftp-server ssh-pkcs11-helper
other /var/empty/sshd
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,064评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,606评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,011评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,550评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,465评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,919评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,428评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,075评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,208评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,185评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,191评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,914评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,482评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,585评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,825评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,194评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,703评论 2 339

推荐阅读更多精彩内容