在CentOS7安装第二个sshd服务器

2020年3月21日 697点热度 0人点赞 0条评论

在日常运维中,因为安全需要,经常遇到sshd升级的需求,但是由于sshd升级的复杂度,可能会导致升级失败的风险。
本文详细描述了在不影响已有sshd的情况下,如何安装第二个sshd服务器。安装了新的sshd以后,可以关闭或卸载已有的sshd服务。
安装sshd服务一般采用源码编译安装的方式,因此需要gcc编译器,且由于期间需要很多依赖包,因此需要配置yum源以备不时之需。具体的yum源配置以及依赖包的安装方法,不是本文的重点,在此略过。

【第一步】安装新版本zlib
■官网下载最新的源码【版本1.2.11】
www.zlib.net
■解压缩、配置、编译、安装到/usr/local/zlib
tar xvfz zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure --prefix=/usr/local/zlib
make
make install

【第二步】安装新版本openssl
■官网下载最新版本的源码【版本1.1.1e】
www.openssl.org
■解压缩、配置、编译、安装到目录/usr/local
tar xvfz openssl-1.1.1e.tar.gz
cd openssl-1.1.1e
./config --prefix=/usr/local --openssldir=/usr/local/openssl --shared zlib
下面这一步有时很关键,尤其在排错时
make clean
make
下面test这一步是进行 SSL 加密协议的完整测试,如出现错误需找出原因,否则可能导致SSH不能用
make test
make install
■确认openssl版本
/usr/local/bin/openssl version -a
此时一般会报错如下:
/usr/local/bin/openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
/usr/local/bin/openssl: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory
这是由于新建的openssl运行库文件libssl和libcrypto位于/usr/local/lib64而不是系统的默认路径/usr/lib64,因此需要新建软连接到系统默认目录:
ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
或者配置LD_LIBRARY_PATH环境变量【不建议使用,使用限制条件太多】
■再次执行
/usr/local/bin/openssl version -a
OpenSSL 1.1.1e 17 Mar 2020
■此时系统原有的openssl并不受影响
/usr/bin/openssl version -a
OpenSSL 1.0.1e-fips 11 Feb 2013

【第三步】安装新版本openssh
官网下载最新版本源码【版本8.2p1】
www.openssh.com
■配置、编译、安装到指定的目录
tar xvfz openssh-8.2p1.tar.gz
cd openssh-8.2p1
./configure --prefix=/usr/local --sysconfdir=/etc/ssh8.2 --with-pam --with-zlib=/usr/local/zlib --with-md5-passwords --with-ssl-dir=/usr/local/openssl
make
make install
注:prefix指定安装路径/usr/local;sysconfdir指定配置文件路径;with-zlib指定新版本zlib路径;with-pam指定启用pam支持;with-ssl-dir指定openssl路径

【第四步】配置新的sshd系统服务
这一步涉及的知识点比较多,大意是手动配置几个全新的系统服务,指定了全新的服务名字、端口号、安全key位置、服务依赖关系配置、组织方式等,本文不详述,但给出详细的源码,供参考。

■配置sshd-keygen8.service

cat >> /usr/lib/systemd/system/sshd-keygen8.service << EOF
[Unit]
Description=OpenSSH Server Key Generation 8.2
ConditionPathExists=|!/etc/ssh8.2/ssh_host_rsa_key
ConditionPathExists=|!/etc/ssh8.2/ssh_host_ecdsa_key
ConditionPathExists=|!/etc/ssh8.2/ssh_host_ed25519_key
ConditionPathExists=|!/etc/ssh8.2/ssh_host_dsa_key
PartOf=sshd8.service sshd8.socket

[Service]
ExecStart=/usr/local/bin/ssh-keygen
Type=oneshot
RemainAfterExit=yes
EOF

■配置sshd8.service

cat >> /usr/lib/systemd/system/sshd8.service << EOF
[Unit]
Description=OpenSSH server daemon 8.2
After=network.target sshd-keygen8.service
Wants=sshd-keygen8.service

[Service]
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/local/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target
EOF

■配置sshd8.socket

cat >> /usr/lib/systemd/system/sshd8.socket << EOF
[Unit]
Description=OpenSSH Server Socket 8.2
Conflicts=sshd8.service

[Socket]
ListenStream=12581
Accept=yes

[Install]
WantedBy=sockets.target
EOF

■将3个服务配置文件属性改为644
chmod 644 /usr/lib/systemd/system/sshd8
chmod 644 /usr/lib/systemd/system/sshd
8.service

■添加PAM配置
从源码编译目录拷贝新的pam配置到系统目录:
cp contrib/sshd.pam.generic /etc/pam.d/sshd8
注意,这里新的pam配置文件的lib路径都有前缀“/lib/security/”,需要修改为正确的路径,否则会在/var/log/secure里面看到无法找到lib的报错,导致pam无法生效!将路径前缀“/lib/security/”删掉即可。

■修改sshd配置【make install时自动生成新sshd配置文件】
参考原sshd配置/etc/ssh/sshd_config,修改新sshd配置,修改端口号,打开PAM支持
vim /etc/ssh8.2/sshd_config
Port 12581
UsePAM yes

■启动sshd服务
systemctl start sshd8

■确认sshd服务版本

新服务端口:
telnet 127.0.0.1 12581
Trying 10.216.93.22...
Connected to 10.216.93.22.
Escape character is '^]'.
SSH-2.0-OpenSSH_8.2
原服务端口:
telnet 127.0.0.1 22
Trying 10.216.93.22...
Connected to 10.216.93.22.
Escape character is '^]'.
SSH-2.0-OpenSSH_6.6.1

 

【备注】可能遇见的问题处理

■■openssl

■config加--shared选项, 否则openssh编译的时候可能会找不到新安装的openssl的library, 会报错:
openssl的 header和library版本不匹配

■config增加zlib选项,可解决最后的错误提示:
Zlib not supported: compression tests skipped

■如果make时报错如下:
c_zlib.c:25:18: 错误:zlib.h:没有那个文件或目录
原因是没有zlib的devel库,需要安装devel库:yum install zlib-devel

■■openssh

■configure提示没有pam头文件:
PAM headers not found
则需安装PAM开发包:yum install pam-devel

liking

这个人很懒,什么都没留下

文章评论