Redhat 6 OpenSSH 升级步骤

Redhat 6 OpenSSH 升级步骤

1、准备工作

1.1、下载相关软件包

OpenSSH需要依赖ZLIB和OpenSSL,因此需要从官网下载三者的源码包。需要注意的是:OpenSSH最新版7.4p1依赖的OpenSSL版本为1.0.2k,而不是其最新版1.1.0e(使用此版会升级失败),ZLIB可以使用最新版1.2.11。redhat6.7自带的zlib版本为1.2.3,也可不进行升级。
三者源码下载地址:
http://www.zlib.net/
http://www.openssl.org/
http://www.openssh.org/

1.2、查看系统当前软件版本

rpm -qa | grep zlib  
openssl version -a 
ssh -V

1.3、配置yum源

1.4、安装telnet服务并启用

因升级OpenSSH过程中需要卸载现有OpenSSH,因此为了保持服务器的远程连接可用,需要启用telnet服务作为替代,如升级出现问题,也可通过telnet登录服务器进行回退。

1)、安装telnet服务

yum -y install telnet-server* telnet xinetd*

2)、启用telnet

#先关闭防火墙,否则telnet可能无法连接
service iptables stop
chkconfig iptables off
vi /etc/xinetd.d/telnet      #Centos7不需要这一步
service telnet
{
        flags           = REUSE
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/sbin/in.telnetd
        log_on_failure  += USERID
        disable         = no      #将yes改为no
}
#允许root用户通过telnet登录
mv /etc/securetty /etc/securetty.old
#启动telnet服务
service xinetd start
#使telnet服务开机启动,避免升级过程中服务器意外重启后无法远程登录系统
chkconfig xinetd on
#新开启一个远程终端以telnet登录验证是否成功启用
telnet [ip]

1.5、安装编译所需工具包

yum -y install gcc pam-devel zlib-devel

2、正式升级

2.1、升级ZLIB

1)、解压zlib_1.2.11源码并编译

tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11 
 ./configure --prefix=/usr
make

2)、卸载当前zlib

注意:此步骤必须在步骤A执行完毕后再执行,否则先卸载zlib后,/lib64/目录下的zlib相关库文件会被删除,步骤A编译zlib会失败。(补救措施:从其他相同系统的服务器上复制/lib64、/usr/lib和/usr/lib64目录下的libcrypto.so.10、libssl.so.10、libz.so.1、libz.so.1.2.3四个文件到相应目录即可。可通过whereis、locate或find命令找到这些文件的位置)

rpm -e --nodeps zlib

3)、安装之前编译好的zlib

#在zlib编译目录执行如下命令
make install

4)、共享库注册

# zlib安装完成后,会在/usr/lib目录中生产zlib相关库文件,需要将这些共享库文件注册到系统中。
echo '/usr/lib' >> /etc/ld.so.conf
ldconfig -v 更新共享库cache
#或者采用如下方式也可:
ln -s /usr/lib/libz.so.1 libz.so.1.2.11 
ln -s /usr/lib/libz.so libz.so.1.2.11 
ln -s /usr/lib/libz.so.1 /lib/libz.so.1 
ldconfig

可通过yum list命令验证是否更新成功(更新失败yum不可用),另外redhat和centos的5.*版本不支持高于1.2.3的zlib版本。

2.2、升级OpenSSL

官方升级文档:http://www.linuxfromscratch.org/blfs/view/cvs/postlfs/openssl.html

1)、备份当前openssl

find / -name openssl
/usr/lib64/openssl /usr/bin/openssl /etc/pki/ca-trust/extracted/openssl
mv /usr/lib64/openssl /usr/lib64/openssl.old
mv /usr/bin/openssl /usr/bin/openssl.old
mv /etc/pki/ca-trust/extracted/openssl /etc/pki/ca-trust/extracted/openssl.old

如下两个库文件必须先备份,因系统内部分工具(如yum、wget等)依赖此库,而新版OpenSSL不包含这两个库

cp  /usr/lib64/libcrypto.so.10  /usr/lib64/libcrypto.so.10.old
cp  /usr/lib64/libssl.so.10  /usr/lib64/libssl.so.10.old

2)、卸载当前openssl

rpm -qa |grep openssl
openssl-1.0.1e-42.el6.x86_64
rpm -e --nodeps openssl-1.0.1e-42.el6.x86_64
rpm -qa |grep openssl
#或者直接执行此命令:
rpm -qa |grep openssl|xargs -i rpm -e --nodeps {}

3)、解压openssl_1.0.2k源码并编译安装

tar -zxvf openssl-1.0.2k.tar.gz
cd openssl-1.0.2k
 ./config --prefix=/usr --openssldir=/etc/ssl --shared zlib #必须加上--shared,否则编译时会找不到新安装的openssl的库而报错
make 
make test #必须执行这一步结果为pass才能继续,否则即使安装完成,ssh也无法使用
make install 
openssl version -a #查看是否升级成功

4)、恢复共享库

由于OpenSSL_1.0.2k不提供libcrypto.so.10和libssl.so.10这两个库,而yum、wget等工具又依赖此库,因此需要将先前备份的这两个库进行恢复,其他的可视情况考虑是否恢复。

mv /usr/lib64/libcrypto.so.10.old /usr/lib64/libcrypto.so.10 
mv /usr/lib64/libssl.so.10.old /usr/lib64/libssl.so.10

2.3、升级OpenSSH

官方升级文档:http://www.linuxfromscratch.org/blfs/view/svn/postlfs/openssh.html

1)、备份当前openssh

mv /etc/ssh /etc/ssh.old
cp -r /usr/libexec/openssh /etc/libexec/openssh.old

2)、卸载当前openssh

rpm -qa |grep openssh
openssh-clients-5.3p1-111.el6.x86_64 openssh-server-5.3p1-111.el6.x86_64 openssh-5.3p1-111.el6.x86_64 openssh-askpass-5.3p1-111.el6.x86_64
rpm-e --nodeps openssh-5.3p1-111.el6.x86_64
rpm-e --nodeps openssh-server-5.3p1-111.el6.x86_64
rpm-e --nodeps openssh-clients-5.3p1-111.el6.x86_64
rpm-e --nodeps openssh-askpass-5.3p1-111.el6.x86_64
rpm-qa |grep openssh
#或者直接执行此命令:
rpm -qa |grep openssh|xargs -i rpm -e --nodeps {}

3)、openssh安装前环境配置

install -v -m700 -d /var/lib/sshd
chown -v root:sys /var/lib/sshd
groupadd -g50 sshd
useradd -c'sshd PrivSep' -d /var/lib/sshd -g sshd -s /bin/false -u50 sshd

4)、解压openssh_7.4p1源码并编译安装

tar -zxvf openssh-7.4p1.tar.gz
cd openssh-7.4p1
 ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-zlib --with-openssl-includes=/usr --with-privsep-path=/var/lib/sshd
make
make install

5)、openssh安装后环境配置

在openssh编译目录执行如下命令:

install -v -m755 contrib/ssh-copy-id /usr/bin
install -v -m644 contrib/ssh-copy-id.1 /usr/share/man/man1
install -v -m755 -d /usr/share/doc/openssh-7.4p1
install -v -m644 INSTALL LICENCE OVERVIEW README* /usr/share/doc/openssh-7.4p1
ssh -V #验证是否升级成功

6)、启用OpenSSH服务

在openssh编译目录执行如下命令:

echo 'X11Forwarding yes' >> /etc/ssh/sshd_config
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config #允许root用户通过ssh登录
cp -p contrib/redhat/sshd.init /etc/init.d/sshd
chmod +x /etc/init.d/sshd
chkconfig --add sshd
chkconfig sshd on
chkconfig --list sshd
service sshd restart

注意:如果升级操作一直是在ssh远程会话中进行的,上述sshd服务重启命令可能导致会话断开并无法使用ssh再行登入(即ssh未能成功重启),此时需要通过telnet登入再执行sshd服务重启命令。

3、善后工作

新开启远程终端以ssh [ip]登录系统,确认一切正常升级成功后,只需关闭telnet服务以保证系统安全性即可。

mv /etc/securetty.old /etc/securetty
chkconfig xinetd off
service xinetd stop
#如有必要,可重新开启防火墙
service iptables start
chkconfig iptables on
#如需还原之前的ssh配置信息,可直接删除升级后的配置信息,恢复备份。
rm -rf /etc/ssh 
mv /etc/ssh.old /etc/ssh

4、升级过程中问题汇总

1、openssl升级后make test报错1

在这里插入图片描述
该错误与 Perl 有关,执行以下命令安装相关的 Perl 模块“Text::Harness”:

yum install perl-Test-Harness

执行以下命令重新编译:

make clean
make
make test

2、openssl升级后make test报错2

在这里插入图片描述
阅读 OpenSSL 压缩包文件中包含的说明文件 INSTALL, NOTES.UNIX, NOTES.PERL 之后,才知道应该通过 CPAN 工具安装 Perl 模块“Text::Template”,依次执行以下命令:

yum  install  perl-CPAN
perl -MCPAN -e shell

这时 CPAN 将显示一些提示,告诉用户将做一些配置,如下图所示:
凡是遇到询问都直接敲字母键 y 表示同意,完成安装 CPAN 以后,执行命令:

perl -MCPAN -e shell

在 cpan[1]> 命令行提示符后面输入命令 install Text::Template ,如下图:
接下来会询问是否做一些操作,遇到询问时一律按字母键 y 表示同意,如下图:
安装完成后,键入 exit 退出 cpan 命令行,如下图:
执行以下命令重新编译 OpenSSL:

make clean
make
make test

3、升级后ssh连接输入密码连接被拒绝

CRT和跳板机,由于sshd升级弱算法将不采用
Key exchange failed.
No compatible key exchange method. The server supports these methods: curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256
No compatible hostkey. The server supports these methods: ssh-ed25519
解决方法:
(一般不建议添加此项配置)

cat >>/etc/ssh/sshd_config <<EOF
KexAlgorithms diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256
EOF

centos7/8/stream

systemctl restart sshd

centos6

service sshd restart

4、PAM unable to dlopen(/usr/lib64/security/pam_stack.so): /usr/lib64/security/pam_stack.so: cannot open shared object file: No such file or directory

问题现象:
输入密码后提示认证失败,查看日志如下:在这里插入图片描述
解决方法:
通过 rpm 升级 ssh 后覆盖了 /etc/pam.d/sshd 文件的配置
覆盖后的文件内容:

#%PAM-1.0
auth       required     pam_stack.so service=system-auth
account    required     pam_nologin.so
account    required     pam_stack.so service=system-auth
password   required     pam_stack.so service=system-auth
session    required     pam_stack.so service=system-auth

要还原成的内容:

#%PAM-1.0
auth       required     pam_sepermit.so
auth       include      password-auth
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    optional     pam_keyinit.so force revoke
session    include      password-auth

然后重启 ssh 服务:

systemctl restart sshd
  • 12
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值