内网环境ssh升级至OpenSSH_8.6p1

自家服务的服务器漏扫,扫出系统SSH问题,然后开发当运维用

1,下载ssl,ssh,zlib,pam,pam-devel包

ssl下载地址 : https://www.openssl.org/source/old/
ssh下载地址 : https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/
zlib下载地址 : http://www.zlib.net/
pam和pam-devel下载地址 : http://rpmfind.net/linux/rpm2html/search.php?query=pam-devel&submit=Search+…
下载后上传至需升级服务器解压ssl, ssh, zlib包。

2,升级ssl

2.1,查看本地ssl版本
[root@localhost ssh]# openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017
2.2,文件备份
[root@controll software]# ll /usr/bin/openssl 
-rwxr-xr-x. 1 root root 555248 1031 2018 /usr/bin/openssl
[root@controll software]# mv /usr/bin/openssl /usr/bin/openssl_bak

下面这个目录redhat可能没有,没有的话不做就行

[root@controll software]# ll /usr/include/openssl
total 1864
-rw-r--r--. 1 root root   6146 Oct 31  2018 aes.h
...
# 有很多文件,...号表示
[root@controll software]# mv /usr/include/openssl /usr/include/openssl_bak
2.3,装新版本的openssl

进入已解压的openssl文件夹
执行 配置、编译、安装命令 (也可以分开执行)

[root@controll software]# cd openssl-1.0.2s/
[root@controll openssl-1.0.2s]# ./config shared && make && make install  

等待编译安装完成,执行echo $?命令,若返回0则执行成功,非零失败,也可以直接查看最末尾数据是否有error提示。

[root@localhost openssl-1.0.2s]# echo $?
0
2.4,目录软链接
[root@controll openssl-1.0.2s]# ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
[root@controll openssl-1.0.2s]# ln -s /usr/local/ssl/include/openssl /usr/include/openssl
[root@controll openssl-1.0.2s]# 
[root@localhost openssl-1.0.2s]# ll /usr/bin/openssl
lrwxrwxrwx 1 root root 26 525 20:01 /usr/bin/openssl -> /usr/local/ssl/bin/openssl
[root@localhost openssl-1.0.2s]# ll /usr/include/openssl
lrwxrwxrwx 1 root root 30 525 20:02 /usr/include/openssl -> /usr/local/ssl/include/openssl
[root@localhost openssl-1.0.2s]# 
2.5,加载配置

下面echo内容不要重复做,只做一次即可,/sbin/ldconfig每次执行都无所谓的。

[root@controll openssl-1.0.2s]# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
[root@controll openssl-1.0.2s]# echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
[root@controll openssl-1.0.2s]# /sbin/ldconfig
2.6,验证版本

查看确认版本
不能有报错,
成功示例。

[root@controll openssl-1.0.2s]# openssl version
OpenSSL 1.0.2s  28 May 2019
[root@controll openssl-1.0.2s]# 

3,安装zlib

进入zlib解压目录 zlib-1.2.11 执行 执行 配置、编译、安装命令

# sudo ./configure
# sudo make test
# sudo make install
# sudo make clean
# sudo ./configure --shared
# sudo make test
# sudo make install
# sudo cp zutil.h /usr/local/include/
# sudo cp zutil.c /usr/local/include/

4,安装pam,pam-devel

[root@localhost software]# ll
-rw-r--r--  1 root root       737960 525 18:29 pam-1.1.8-23.el7.x86_64.rpm
-rw-r--r--  1 root root       189124 525 15:55 pam-devel-1.1.8-23.el7.x86_64.rpm
[root@localhost software]# yum localinstall pam-1.1.8-23.el7.x86_64.rpm
...(此处多条运行记录)
[root@localhost software]# yum localinstall pam-devel-1.1.8-23.el7.x86_64.rpm
...(此处多条运行记录)

5,编译安装openssh

5.1,查看本地ssl版本
[root@solang ~]# ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017
[root@solang ~]# sshd -v
unknown option -- v
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017
usage: sshd [-46DdeiqTt] [-C connection_spec] [-c host_cert_file]
            [-E log_file] [-f config_file] [-g login_grace_time]
            [-h host_key_file] [-o option] [-p port] [-u len]
[root@solang ~]# 
5.2,文件备份

如果ssh里面配置的东西比较多,可以备份,升级完成以后把这个文件拷贝回来【如果没有配置过什么东西,直接跳过备份这部,根据下面操作给删掉】
注:下面编译安装操作成功以后,把这个备份的文件恢复【建议不要恢复,直接参照之前的配置重新配置一遍,极端情况下会因为版本不一致,直接用原来配置会导致ssh出现不可预期的问题】

[root@controll software]# mkdir /etc/ssh.bak
[root@controll software]# cp -r /etc/ssh /etc/ssh.bak/
[root@controll software]#
[root@controll software]# rm -rf /etc/ssh/*
5.3,安装编译

进入解压目录 openssh-8.6p1
执行 配置、编译、安装【命令有点长,注意复制完】

[root@localhost software]# cd openssh-8.6p1/
[root@localhost openssh-8.6p1]# ./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

等待编译安装完成,执行echo $?命令,若返回0则执行成功,非零失败,也可以直接查看最末尾数据是否有error提示。

[root@localhost openssl-1.0.2s]# echo $?
0
5.4,配置root用户登录

上面文件备份步骤说过如果/etc/ssh里面配置太多的话,备份以后就在这恢复就行【重复一次,不建议恢复,直接参照备份的文件,重新配置一次】

切记下面的配置文件修改,不然root应用ssh用户登录不了

vim /etc/ssh/sshd_config
# 修改内容
PermitRootLogin yes
PasswordAuthentication yes
UseDNS no
UsePAM yes
5.4,新文件拷贝

从原先的解压的包中拷贝一些文件到目标位置【如果目标目录存在就覆盖】
可能下面的ssh.pam文件没用到,因为sshd_config配置文件貌似没使用它,请自行测试

[root@localhost openssh-8.6p1]# cp -a contrib/redhat/sshd.init /etc/init.d/sshd
[root@localhost openssh-8.6p1]# cp -a contrib/redhat/sshd.pam /etc/pam.d/sshd.pam
[root@localhost openssh-8.6p1]# chmod +x /etc/init.d/sshd
5.5,新增sshd服务并设置开机启动
# --add  增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。
[root@localhost openssh-8.6p1]# chkconfig --add sshd
[root@localhost openssh-8.6p1]# systemctl enable sshd
[root@localhost openssh-8.6p1]# 

把原先的systemd管理的sshd文件删除或者移走或者删除,不移走的话影响我们重启sshd服务
可以移动到任何地方,但建议记住移动的目的位置,便于后续如果需要的话能找到源文件。

[root@localhost openssh-8.6p1]# mkdir /data
[root@localhost openssh-8.6p1]# mv  /usr/lib/systemd/system/sshd.service  /data/

因为改为chkconfig管理了,所以需要设置sshd服务开机启动

[root@localhost openssh-8.6p1]# chkconfig sshd on
Note: Forwarding request to 'systemctl enable sshd.socket'.
Created symlink from /etc/systemd/system/sockets.target.wants/sshd.socket to /usr/lib/systemd/system/sshd.socket.
[root@localhost openssh-8.6p1]# 

重启sshd服务并查看端口是否正常监听

[root@localhost openssh-8.6p1]# systemctl restart sshd
[root@localhost openssh-8.6p1]# systemctl is-active sshd
active
[root@localhost openssh-8.6p1]# 
[root@localhost openssh-8.6p1]# netstat -ntlp | grep 22
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      115864/sshd: /usr/s 
tcp6       0      0 :::22                   :::*                    LISTEN      115864/sshd: /usr/s 
[root@localhost openssh-8.6p1]# 
5.6,验证版本

上面编译没出错,每一个步骤都做完了,肯定不会有问题的。
注:ssh -V 【查看SSH版本】和 sshd -v【查看启动文件版本】, 2个都需要执行,并且2个都需要保持一致才算真正的升级成功【如果不一致,解决方法往下看】。

[root@localhost openssh-8.6p1]# ssh -V
OpenSSH_8.6p1, OpenSSL 1.0.2s  28 May 2019
[root@localhost openssh-8.6p1]# sshd -v
unknown option -- v
OpenSSH_8.6p1, OpenSSL 1.0.2s  28 May 2019
usage: sshd [-46DdeiqTt] [-C connection_spec] [-c host_cert_file]
            [-E log_file] [-f config_file] [-g login_grace_time]
            [-h host_key_file] [-o option] [-p port] [-u len]
[root@localhost openssh-8.6p1]# 

sshd -v和ssh -V版本不一致解决办法

只要按着上班操作步骤做完,不会出现这种问题,只是把这种情况的处理方法放这。

-sshd -v和ssh -V不一个版本,需要拷贝下列sshd (ssh -V是正确的)
cp /usr/local/openssh/sbin/sshd /usr/local/sbin/sshd

6,升级到8.6必须操作【否则工具无法连接】

升级到8.6以后,如果不做下面操作,会导致crt工具无法连接【但可以从服务器ssh过去】, 报错信息如: 密钥交换失败。

原因: SSH和SSL升级后,取消了原先一些不太安全的加密算法,Clinet不支持新的算
法所以无法交换密钥;

处理方法:
要求客户升级SecureCRT版本至6.5或7.x,或更换最新版的Xshell、Putty等工具,即可正常登录【建议如果这种方法能解决就不要用下面方法】

修改ssh配置,添加对原加密算法的支持:
登录到无法登录的服务器【可以从正常的服务器ssh过去】修改/etc/ssh/sshd_config文件,在文件的末尾添加如下内容,然后重启ssh服务(切记是 sshd_config 不是 ssh_config )

[root@controll openssh-8.6p1]# vim /etc/ssh/sshd_config 
# 下面这行信息很长,注意复制完
KexAlgorithms diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group1-sha1,curve25519-sha256@libssh.org
[root@controll openssh-8.6p1]#
[root@controll openssh-8.6p1]# systemctl restart sshd

7,登录测试【重要】

openssh升级完毕以后,下面3项必须测试,而且每一项都必须正常才算升级成功,如果有任何一项测试失败,都不行!
7.1 工具测试

  • 如果升级了较新版本的openssh,SecureCRT版本至6.5或7.x,或更换最新版的Xshell、Putty等工具。

  • 升级完毕以后,如果是工具连接的,断开连接,重新连接看是否正常【8.6的版本一定要看上面一步,否则工具无法连接啊,当时我以为升级8.6不行,翻了挺多资料才搞定】

7.2 别的服务器ssh该台服务器【很重要】
找一个以前能正常ssh到升级服务器的机器

发现,报错了【上面升级openssh的主机名为controll,现在是用centos76_2的服务器连接升级服务器测试】

[root@centos76_2 ~]# ssh 192.168.59.133
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:0uTcB4pn/p0X72gZrtG4b7MrgLJJL9Q8Gr1TrDNFThA.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /root/.ssh/known_hosts:7
Host key for 192.168.59.133 has changed and you have requested strict checking.
Host key verification failed.
[root@centos76_2 ~]# 

原因:
是因为ssh升级过后,服务器的公钥信息改变了,所以导致无法连接的。

解决方法:
在连接服务器vi编辑配置文件~/.ssh/known_hosts,删掉现有升级过ssh的服务器ip信息即可(删除192.168.59.133那一行即可)

[root@localhost ~]# cat ~/.ssh/known_hosts
192.168.59.133 ssh-rsa AAwrtAArtweE2VwejZHNhLweXewetrwrtNwertoYTItbtewrmlzdwetrwHAyNTYwwetertAAAAIbmlzdHwertAyNTYAAABBBE5xySDX2nVTEgZlEgEv6184nPweHwer+GZy/sfdgwer=wret
192.168.59.138 ssh-rsa WEsfdgRTWER+qwerWERqwerTWEdgRT/TREsTWesdgfERT+WERTsfgdWRETWER+WsdfgERsdfTWERT+5piSwayBJCYt6/asdfqwer/WERTERW+AKrtg5Kt+WERTsfdgWERWERTWsfgdgERqwerqwerqwer//WERTWERTWERTHRTY
[root@localhost ~]# 

成功!

[root@centos76_2 ~]#  # 已经删了之前记录的信息
[root@centos76_2 ~]# cat  ~/.ssh/known_hosts | grep 133
[root@centos76_2 ~]# ssh 192.168.59.133 # 再次连接已经正常了
The authenticity of host '192.168.59.133 (192.168.59.133)' can't be established.
ED25519 key fingerprint is SHA256:0uTcB4pn/p0X72gZrtG4b7MrgLJJL9Q8Gr1TrDNFThA.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.59.133' (ED25519) to the list of known hosts.
root@192.168.59.133's password: 
Last login: Thu May 20 00:28:27 2021 from ::ffff:192.168.59.133
[root@controll ~]# 

7.3 ssh别的服务器测试
不用修改任何信息,连接任意一台服务器均可正常连接

[root@controll ~]# ssh 192.168.59.138
root@192.168.59.138's password: 
Last login: Wed May 22 21:15:45 2021 from 192.168.59.1
[root@centos76_2 ~]# 

OJBK
参考资料
https://blog.csdn.net/cuichongxin/article/details/117022575(前面的装镜像之类的应该是好办法,可惜太麻烦,镜像还要足够安全,搞不定。。。)
https://blog.csdn.net/qq_44273583/article/details/116757945(root登录不成功第一个也有提,然后我忽略了。。。阔怕)
https://blog.csdn.net/qq_46023525/article/details/109338477?spm=1001.2014.3001.5501(安装zlib, gcc, perl等,我的环境只需要zlib和pam)

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值