centos7 升级 openssh 到 openssh-8.1p1 版本,升级openssl到1.0.2u

问题

  • openssh 如何升级到 openssh-8.1p1 版本,升级 openssl 到 1.0.2u
  • centos7.2 升级前后的对比

解决

1、进入正文,建议先安装 telnet-server 以及 xinetd,万一失败无法登录,还可以用 telnet 登录 之前有写过这篇文章,这里就不详细说了,详情见链接:CentOS7 安装 telnet 服务

2、升级需要几个依赖包,是和编译相关的

yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel pcre-devel pam-devel

3、安装 pam 和 zlib 等(后面的升级操作可能没用到 pam,安装上也没啥影响,如果不想安装 pam 请自行测试)

yum install -y pam* zlib*

4、下载 openssh 和 openssl 的包

wget https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/
wget https://ftp.openssl.org/source/

安装openssl

5、开始安装 openssl

# 解压openssl目录
tar xfz openssl-1.0.2u.tar.gz

# 备份下面 2 个文件或目录(如果存在的话就执行)
ll /usr/bin/openssl
mv /usr/bin/openssl /usr/bin/openssl_backup
ll /usr/include/openssl
mv /usr/include/openssl /usr/include/openssl_backup

# 进入openssl目录
cd /usr/local/download/openssl-1.0.2u/

# 配置、编译并安装
./config --prefix=/usr/local/ssl -d shared
make -j 4 && make install

# 以上命令执行完毕,echo $? 查看下最后的 make install 是否有报错,0 表示没有问题
echo $?

# 下面 2 个文件或者目录做软链接 (刚才前面的步骤 mv 备份过原来的)
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl

# 查看是否软链成功
ll /usr/bin/openssl
ll /usr/include/openssl -ld

#命令行执行下面 2 个命令加载新配置
echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
/sbin/ldconfig

# 查看openssl版本
openssl version

6、通过上面最后一个命令可以看到,openssl 已经升级成功

安装 openssh

7、安装 openssh

# 解压
tar xfz openssh-8.1p1.tar.gz
cd openssh-8.1p1

# 可能文件默认显示uid和gid数组都是1000,这里重新授权下。不授权可能也不影响安装(请自行测试)
chown -R root.root /usr/local/openssh-8.1p1

# 先备份原来ssh的配置文件和目录
mv /etc/ssh/ /etc/ssh_backup
# 配置、编译、安装
./configure --prefix=/usr/ --sysconfdir=/etc/ssh --with-openssl-includes=/usr/local/ssl/include \
--with-ssl-dir=/usr/local/ssl --with-zlib --with-md5-passwords --with-pam && make && make install

# 我的需求是禁止root登录,所以配置了 PermitRootLogin no(自行去修改)
grep "^PermitRootLogin" /etc/ssh/sshd_config

# 关闭 UseDNS 加速 SSH 登录 (自行去修改)
grep "UseDNS" /etc/ssh/sshd_config

# 从原先的解压的包中拷贝一些文件到目标位置、赋予执行权限、添加服务、开机启动
cp -a contrib/redhat/sshd.init /etc/init.d/sshd
cp -a contrib/redhat/sshd.pam /etc/pam.d/sshd.pam
chmod +x /etc/init.d/sshd
chkconfig --add sshd
systemctl enable sshd
# 把原来的systemd管理的sshd文件删除或移动,否则会影响重启sshd服务
mv /usr/lib/systemd/system/sshd.service /data/

# 设置 sshd 服务开机启动
chkconfig sshd on

8、测试

# 启动sshd服务
/etc/init.d/sshd restart

# 查看端口情况(可以看到22端口有占用)
netstat -lntp

# 关闭sshd服务看看22端口是否会释放
/etc/init.d/sshd stop

# 可以看到22端口被释放(测试成功)
netstat -lntp

# 最后启动服务
/etc/init.d/sshd start

9、可以试着重启机器测试下登录 sshd 是否正常。测试没问题后也可以把 telnet 服务关闭了

# 关闭 telnet 服务
systemctl disable xinetd.service
systemctl stop xinetd.service
systemctl disable telnet.socket
systemctl stop telnet.socket

# 也可以用 systemctl 来管理 sshd 服务
systemctl stop sshd
systemctl start sshd
systemctl restart sshd