首页 » 操作系统 » Linux » Redhat 6.4 x64升级SSH到OpenSSH_7.4p1完整文档

Redhat 6.4 x64升级SSH到OpenSSH_7.4p1完整文档

 

Redhat 6.4 x64升级SSH到OpenSSH_7.4p1完整文档 

 

导语

    Redhat企业级系统的6.7版自带SSH版本为OpenSSH_5.3p1, 基于审计和安全性需求,建议将其升级到最新的OpenSSH版本,当前官网最新版本为7.4p1. 本文档将详细介绍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 -q zlib
# openssl version
# ssh -V

1.3、配置本地yum源

    因安装相关工具和编译源码需要先安装部分软件包,因此需要先配置好本地yum源(如有远程yum源更好),配置方法如下:

    A、将操作系统镜像上传到服务器中,进行挂载

# mount -o loop rhel-server-6.4-x86_64-dvd.iso /mnt        #此处挂载目录可自行指定

    B、配置yum源文件

#cd /etc/yum.repos.d
#mv rhel-source.repo rhel-source.repo.bak
#vi  rhel6.4.repo
[Server]

name=RHELServer

baseurl=file:///mnt/Server

enabled=1

gpgcheck=0

[ResilientStorage]

name=RHELResilientStorage

baseurl=file:///mnt/ResilientStorage

enabled=1

gpgcheck=0

[ScalableFileSystem]

name=RHELScalableFileSystem

baseurl=file:///mnt/ScalableFileSystem

enabled=1

gpgcheck=0

[HighAvailability]

name=RHELHighAvailability

baseurl=file:///mnt/HighAvailability

enabled=1

gpgcheck=0

[LoadBalancer]

name=RHELLoadBalancer

baseurl=file:///mnt/LoadBalancer

enabled=1

gpgcheck=0

#yum clean all       #清除yum缓存,使当前配置生效
#yum list            #查看是否配置成功

 

1.4、安装telnet服务并启用

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

    A、安装telnet服务

# yum -y install telnet-server*

    B、启用telnet

# vi /etc/xinetd.d/telnet

将其中disable字段的yes改为no以启用telnet服务
# mv /etc/securetty /etc/securetty.old    #允许root用户通过telnet登录

# service xinetd restart                    #启动telnet服务

# chkconfig xinetd on                     #使telnet服务开机启动,避免升级过程中服务器意外重启后无法远程登录系统

# telnet [ip]                             #新开启一个远程终端以telnet登录验证是否成功启用

1.5、安装编译所需工具包

# yum -y install gcc pam-devel zlib-devel

2、正式升级

2.1、升级ZLIB

    A、解压zlib_1.2.11源码并编译

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

    B、卸载当前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

    C、安装之前编译好的zlib

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

    D、共享库注册

    zlib安装完成后,会在/usr/lib目录中生产zlib相关库文件,需要将这些共享库文件注册到系统中。

# echo '/usr/lib' >> /etc/ld.so.conf
# ldconfig                    #更新共享库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

    A、备份当前openssl

 

#find / -name openssl
/usr/lib64/openssl
/usr/bin/openssl

#mv  /usr/lib64/openssl /usr/lib64/openssl.old
#mv  /usr/bin/openssl  /usr/bin/openssl.old

 

    B、卸载当前openssl

# rpm -qa | grep openssl

openssl-1.0.0-27.el6.x86_64

#rpm -e --nodeps openssl-1.0.0-27.el6.x86_64
#rpm -qa | grep openssl

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

 

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

built on: reproducible build, date unspecified

platform: linux-x86_64

options:  bn(64,64) rc4(16x,int) des(idx,cisc,16,int) idea(int) blowfish(idx) 

compiler: gcc -I. -I.. -I../include  -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -Wa,--noexecstack -m64 -DL_ENDIAN -O3 -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DRC4_ASM -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -DECP_NISTZ256_ASM

OPENSSLDIR: "/etc/ssl"

#通过执行yum 看看是否按照成功,如果提示缺少包,需要通过ln方式来配置
yum
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:
   libssl.so.10: cannot open shared object file: No such file or directory
#如果提示如上错误,执行以下操作
#ll /usr/lib/libssl*
-rw-r--r--. 1 root root 762606 3?.  1 11:49 /usr/lib/libssl.a
lrwxrwxrwx. 1 root root     15 3?.  1 11:49 /usr/lib/libssl.so -> libssl.so.1.0.0
-r-xr-xr-x. 1 root root 508549 3?.  1 11:49 /usr/lib/libssl.so.1.0.0
#ln -s /usr/lib/libssl.so.1.0.0 /usr/lib/libssl.so.10
#cp  /usr/lib/libssl.so.1.0.0 /usr/lib64/
#ln -s /usr/lib/libssl.so.1.0.0 /usr/lib64/libssl.so.10
[root@hjyracdb2 openssl-1.0.2k]# yum
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:
   libcrypto.so.10: cannot open shared object file: No such file or directory
#如果提示如上错误,执行以下操作
#ll /usr/lib/libcrypto*
-rw-r--r--. 1 root root 4385860 3?.  1 11:49 /usr/lib/libcrypto.a
lrwxrwxrwx. 1 root root      18 3?.  1 11:49 /usr/lib/libcrypto.so -> libcrypto.so.1.0.0
-r-xr-xr-x. 1 root root 2592992 3?.  1 11:49 /usr/lib/libcrypto.so.1.0.0
#ln -s /usr/lib/libcrypto.so.1.0.0 /usr/lib/libcrypto.so.10
#cp  /usr/lib/libcrypto.so.1.0.0 /usr/lib64/
#ln -s /usr/lib/libcrypto.so.1.0.0 /usr/lib64/libcrypto.so.10

 

2.3、升级OpenSSH

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

    A、备份当前openssh

# mv /etc/ssh /etc/ssh.old

    B、卸载当前openssh

 

# rpm -qa | grep openssh
openssh-server-5.3p1-84.1.el6.x86_64
openssh-5.3p1-84.1.el6.x86_64
openssh-askpass-5.3p1-84.1.el6.x86_64
openssh-clients-5.3p1-84.1.el6.x86_64

#
# rpm -e --nodeps openssh-5.3p1-84.1.el6.x86_64
#
# rpm -e --nodeps openssh-server-5.3p1-84.1.el6.x86_64
#
# rpm -e --nodeps openssh-clients-5.3p1-84.1.el6.x86_64
#
# rpm -e --nodeps openssh-askpass-5.3p1-84.1.el6.x86_64
#
# rpm -qa | grep openssh

 

    C、openssh安装前环境配置

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

    D、解压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

    E、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              #验证是否升级成功

 F、启用OpenSSH服务

    F、启用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

 openssh 从 7.0 后开始对于version 1.x 就不支持了,相应的RSA1算法也不再支持了,编译openssh源码的时候也不会在/etc/ssh目录下面生成ssh_host_key/ssh_host_key.pub了
 
 因为没有在/etc/ssh下生成ssh_host_key/ssh_host_key.pub文件,导致脚本服务报错,那么可以到启动服务脚本/etc/init.d/sshd文件中注释掉如下一行

service sshd restart 重启不报错

3、善后工作

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

# mv /etc/securetty.old /etc/securetty
# chkconfig  xinetd off
# service xinetd stop

    如需还原之前的ssh配置信息,可直接删除升级后的配置信息,恢复备份。

# rm -rf /etc/ssh# mv /etc/ssh.old /etc/ssh

结束

 

原文链接:Redhat 6.4 x64升级SSH到OpenSSH_7.4p1完整文档,转载请注明来源!

0