声明
Redhat 7.3自带的ssh版本:
- OpenSSH_6.6.1p1
- OpenSSL 1.0.1e-fips
- zlib-1.2.7-17.el7.x86_64
这些步骤都是在虚拟机上模拟实现的(同时在生产环境也进行过验证)
查看原版本
虚拟机挂载光盘
按照上面的设置完成后,输入命令
mkdir /mnt/cdrom
mount -o loop /dev/cdrom /mnt/cdrom/
挂载完毕
本地安装telnet和xinetd
为了防止卸载openssh后远程连接不上,本地离线安装telnet,方便调试
cd /mnt/cdrom/
find -name telnet*
rpm -ivh ./Packages/telnet-0.17-60.el7.x86_64.rpm
rpm -ivh ./Packages/telnet-server-0.17-60.el7.x86_64.rpm
find -name xinetd*
rpm -ivh ./Packages/xinetd-2.3.15-13.el7.x86_64.rpm
安装完毕后,检查是否安装成功:
rpm -qa | grep telnet
rpm -qa | grep xinetd
关闭防火墙
systemctl status firewalld //查看防火墙状态
systemctl disable firewalld//永久关闭防火墙
systemctl is-enabled firewalld //查看防火墙是否开机启动
systemctl enable firewalld 重启防火墙
启动telnet
进入到/etc/xinetd.d/文件中
vim telnet
在文件中输入:
# default: yes
# description: The telnet server servestelnet sessions; it uses \
# unencrypted username/password pairs for authentication. service telnet
{
flags = REUSE
socket_type = stream
wait = no
user = root
server =/usr/sbin/in.telnetd
log_on_failure += USERID
disable = no
}
启动
systemctl start xinetd.service //启动
ps -ef | grep xinetd //查看启动是否成功
systemctl enable xinetd.service //保证开机后
测试下是否成功开启
telnet 127.0.0.1 22
升级openssh
1 先配置环境
# 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
2 解压
tar -zxvf openssh-8.0p1.tar.gz
cd openssh-8.0p1
3 编译
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-zlib --with-openssl-includes=/usr --with-privsep-path=/var/lib/sshd
然后报错了
检查zlib.h包
所以我们需要安装zlib库
升级zlib库
tar -zxvf zlib-1.2.11.tar.gz //解压
cd zlib-1.2.11 //进入文件夹
./configure --prefix=/usr //环境测试
make //编译
rpm -e --nodeps zlib //卸载以前的zlib
make install //安装
安装完成之后,进行共享库注册
# 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
安装完成之后,我们再次环境测试下openssh
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-zlib --with-openssl-includes=/usr --with-privsep-path=/var/lib/sshd
然后发现又报错
这里提示我们需要升级openssl
升级openssl
备份openssl库
# find / -name openssl
# mv /usr/bin/openssl /usr/bin/openssl.old
# mv /usr/lib64/openssl/ /usr/lib64/openssl.old
# mv /etc/pki/ca-trust/extracted/openssl /etc/pki/ca-trust/extracted/openssl.old
其中两个库必须要提前备份,因为新版本的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
备份完成后,升级
# cd openssl-1.0.2o/
#必须加上--shared,否则编译时会找不到新安装的openssl的库而报错
./config --prefix=/usr --openssldir=/etc/ssl --shared zlib
# make
# make test #必须执行这一步结果为pass才能继续,否则即使安装完成,ssh也无法使用
# make install
# openssl version -a #查看是否升级成功
但是在make test的时候报错
这里好像是perl包的问题:
在这里,出现了循环依赖,所以,所有包要一起安装:
rpm -ivh ./Packages/perl-devel-5.16.3-291.el7.x86_64.rpm ./Packages/perl-ExtUtils-Install-1.58-291.el7.noarch.rpm ./Packages/perl-ExtUtils-MakeMaker-6.68-3.el7.noarch.rpm ./Packages/perl-ExtUtils-ParseXS-3.18-2.el7.noarch.rpm ./Packages/perl-ExtUtils-Manifest-1.61-244.el7.noarch.rpm ./Packages/perl-Test-Harness-3.28-3.el7.noarch.rpm ./Packages/systemtap-sdt-devel-3.0-7.el7.x86_64.rpm ./Packages/pyparsing-1.5.6-9.el7.noarch.rpm
然后在openssl里执行make test,又报错
这里好像是perl-Test-Simple包的问题,装一下就可以了
然后在openssl里面test一下,就可以了
然后make install吧。
安装完成后,查看下版本:
openssl version -a
然后在编译下测试openssh
然后,又报错
查了下,是pam-devel包的问题,同理,安装下
然后就编译通过了
然后
make
make install
安装完成之后,配置环境变量
# 在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.7p1
# install -v -m644 INSTALL LICENCE OVERVIEW README* /usr/share/doc/openssh-7.7p1
# ssh -V #验证是否升级成功
然后升级成功
升级到最新版(目前版本是8.2)
在当前版本上只需要执行以下语句即可
# tar -zxvf openssh-8.2p1.tar.gz
# cd openssh-8.2p1
# ./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
# ssh -V // 查看版本