openssh离线升级到最新版本【openssh8

如果下面telnet文件不存在的话,可以跳过这部分的更改【默认可以使用root登录】

[root@controll ~]# ll /etc/xinetd.d/telnet

ls: cannot access /etc/xinetd.d/telnet: No such file or directory

[root@controll ~]#

  • 如果下面文件存在,请更改配置telnet可以root登录,把disable = no改成disable = yes

[root@rhel yum.repos.d]# vim /etc/xinetd.d/telnet

[root@rhel yum.repos.d]# cat /etc/xinetd.d/telnet

default: on

description: The telnet server serves telnet sessions; it uses \

unencrypted username/password pairs for authentication.

service telnet

{

disable = yes

flags = REUSE

socket_type = stream

wait = no

user = root

server = /usr/sbin/in.telnetd

log_on_failure += USERID

}

终端登陆配置


配置telnet登录的终端类型,在/etc/securetty文件末尾增加一些pts终端,如下

[root@controll ~]# vim /etc/securetty

[root@controll ~]# tail -n 4 /etc/securetty

pts/0

pts/1

pts/2

pts/3

[root@controll ~]#

服务安装


  • 安装如下2个服务

[root@controll ~]# yum -y install telnet*

[root@controll ~]# yum -y install xinetd*

  • 启动这2个服务

[root@centos76_2 ~]# systemctl enable telnet.socket

Created symlink from /etc/systemd/system/sockets.target.wants/telnet.socket to /usr/lib/systemd/system/telnet.socket.

[root@centos76_2 ~]# systemctl enable xinetd

[root@controll ~]# systemctl start telnet.socket

[root@controll ~]# systemctl start xinetd

[root@controll ~]# systemctl is-active telnet.socket

active

[root@controll ~]# systemctl is-active xinetd

active

[root@controll ~]#

systemctl enable xinetd

systemctl enable telnet.socket

  • 查看23端口是否被监听

[root@controll ~]# netstat -ntlp | grep 23

tcp6 0 0 :::23 ::😗 LISTEN 1/systemd

[root@controll ~]#

telnet登录虚拟机


  • 直接在当前虚拟机输入:telnet ip 回车能登录成功即可【因为没有/etc/xinetd.d/telnet这个文件夹,所以默认是可以用root直接登录的】

[root@controll ~]# telnet 192.168.59.133

Trying 192.168.59.133…

Connected to 192.168.59.133.

Escape character is ‘^]’.

Kernel 3.10.0-957.el7.x86_64 on an x86_64

controll login: root

Password:

Last login: Thu May 20 00:25:35 from ::ffff:192.168.59.133

[root@controll ~]# logout

Connection closed by foreign host.

[root@controll ~]#

  • 使用工具的话就是【建议使用xshell连接telnet,如果secureCRT版本过低,会导致连接失败】

新建一个会话,协议选择为Telnet

telnet的端口是23

安装依赖包

====================================================================

  • 注:依赖包只需要镜像中的本地源就足矣了;

  • 升级需要几个组件,有些是和编译相关的等

[root@controll ~]# yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel pcre-devel pam-devel

我这安装了20个包,如下

Installed:

autoconf.noarch 0:2.69-11.el7 gcc.x86_64 0:4.8.5-36.el7 gcc-c++.x86_64 0:4.8.5-36.el7 openssl-devel.x86_64 1:1.0.2k-16.el7 pam-devel.x86_64 0:1.1.8-22.el7

pcre-devel.x86_64 0:8.32-17.el7

Dependency Installed:

cpp.x86_64 0:4.8.5-36.el7 glibc-devel.x86_64 0:2.17-260.el7 glibc-headers.x86_64 0:2.17-260.el7 kernel-headers.x86_64 0:3.10.0-957.el7

keyutils-libs-devel.x86_64 0:1.5.8-3.el7 krb5-devel.x86_64 0:1.15.1-34.el7 libcom_err-devel.x86_64 0:1.42.9-13.el7 libkadm5.x86_64 0:1.15.1-34.el7

libselinux-devel.x86_64 0:2.5-14.1.el7 libsepol-devel.x86_64 0:2.5-10.el7 libstdc+±devel.x86_64 0:4.8.5-36.el7 libverto-devel.x86_64 0:0.2.5-4.el7

m4.x86_64 0:1.4.16-10.el7 zlib-devel.x86_64 0:1.2.7-18.el7

Complete!

[root@controll ~]# yum install -y pam* zlib*

我这安装了3个包,如下

Installed:

pam_krb5.x86_64 0:2.4.8-6.el7 pam_pkcs11.x86_64 0:0.6.2-30.el7

Dependency Installed:

pcsc-lite-libs.x86_64 0:1.8.8-8.el7

Complete!

准备openssh包和openssl的包

===================================================================================

  • 自行去下载openssh和openssl的tar包

  • 如果不想去找的,可以直接下载我下载好的,链接如下:

  • openssh和openssl_tar包下载

  • 这里面一共有4个文件,分别是:openssh-8.0p1.taropenssh-8.6p1.taropenssl-1.1.1j.taropenssl-1.0.2s.tar

  • 注意:上面的4个包中,openssl如果你当前是1.0的,就只能用openssl-1.0.2s.tar编译【openssl-1.1.1j.tar编译出来会各种出错【因为没有1.1的依赖库】 ,openssh2个版本都可以正常使用。

如果当前是1.0的,建议不要安装1.1,否则降回去有可能会失败。

  • 这儿需要对这个包做些简单的说明,网上很多帖子说openssh和openssl的包有兼容性这个意思,但我找了很多资料,均没有看到一个正式介绍openssh和openssl使用版本对应。

所以我做了几个版本测试,发现openssl只要是和自己当前版本一致就不会有问题【当前是1.0的,就安装为1.0的最新版本就不会有问题】,而openssh,安装任何版本都行】

将openssl和openssh包上传到服务器

======================================================================================

  • 上传文件有个linux自带命令,很骚,可以直接在secureCRT工具中调用的:

rz -E ,回车以后会弹出文件选择,选择好点击添加就可以直接上传了。

在这里插入图片描述

  • 因为我其他服务器有这些包,所以我之间考过来。

个人习惯喜欢将工具包统一放到 /software里面【根据个人喜好随便放,不影响安装】,不过为了后面可以复制粘贴我的代码,建议你也放到/software里面

[root@controll ~]# mkdir /software

[root@controll ~]# scp 192.168.59.129:/software/* /software/

root@192.168.59.129’s password:

openssh-8.0p1.tar.gz 100% 1560KB 37.2MB/s 00:00

scp: /software/openssh-8.6p1: not a regular file

openssh-8.6p1.tar.gz 100% 1744KB 38.7MB/s 00:00

scp: /software/openssl-1.0.2s: not a regular file

openssl-1.0.2s.tar.gz 100% 5224KB 45.0MB/s 00:00

scp: /software/openssl-1.1.1j: not a regular file

openssl-1.1.1j.tar.gz 100% 9593KB 29.6MB/s 00:00

[root@controll ~]# cd /software/

[root@controll software]# ls

openssh-8.0p1.tar.gz openssh-8.6p1.tar.gz openssl-1.0.2s.tar.gz openssl-1.1.1j.tar.gz

[root@controll software]#

开始安装openssl

==========================================================================

升级前版本查看


主要就是用来对比后面是否升级成功

[root@controll openssl-1.0.2s]# openssl version

OpenSSL 1.0.2k-fips 26 Jan 2017

[root@controll openssl-1.0.2s]#

文件备份


[root@controll software]# ll /usr/bin/openssl

-rwxr-xr-x. 1 root root 555248 Oct 31 2018 /usr/bin/openssl

[root@controll software]# mv /usr/bin/openssl /usr/bin/openssl_bak

[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

[root@controll software]#

解压tar包


[root@controll software]# ls

openssh-8.0p1.tar.gz openssh-8.6p1.tar.gz openssl-1.0.2s.tar.gz openssl-1.1.1j.tar.gz

[root@controll software]#

[root@controll software]# tar xfz openssl-1.0.2s.tar.gz

编译安装新版本的openssl


  • 配置、编译、安装3个命令一起执行

&&符号表示前面的执行成功才会执行后面的

[root@controll software]# cd openssl-1.0.2s/

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

这个过程耗费时间挺长的,需要耐心等待

  • 中间一直在闪下面这种内容

在这里插入图片描述

  • 以上命令执行完毕,echo $?【会shell的应该知道这个,这个是查看返回值的,0为执行成功】查看下最后的make install是否有报错,0表示没有问题,除了0以外的任何数字都是错误的【上面某个步骤出错了,需要重新弄,一直到显示结果为0才能进行下一步】

成功界面如下

在这里插入图片描述

目录做软链接


下面2个文件或者目录做软链接 【刚才前面的步骤mv备份过原来的】

[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@controll openssl-1.0.2s]# ll /usr/bin/openssl

lrwxrwxrwx. 1 root root 26 May 20 01:13 /usr/bin/openssl -> /usr/local/ssl/bin/openssl

[root@controll openssl-1.0.2s]# ll /usr/include/openssl

lrwxrwxrwx. 1 root root 30 May 20 01:13 /usr/include/openssl -> /usr/local/ssl/include/openssl

[root@controll openssl-1.0.2s]#

加载新配置


如果多次重复上面步骤【下面echo内容不要重复做,只做一次即可】,/sbin/ldconfig每次执行都无所谓的。

[root@controll openssl-1.0.2s]# echo “/usr/local/ssl/lib” >> /etc/ld.so.conf

[root@controll openssl-1.0.2s]# /sbin/ldconfig

查看确认版本


  • 不能有报错,报错就完犊子【报错了看下面的解决方案】

  • 见证奇迹的时刻到了

未报错,成功。

[root@controll openssl-1.0.2s]# openssl version

升级前为OpenSSL 1.0.2k-fips 26 Jan 2017

OpenSSL 1.0.2s 28 May 2019

[root@controll openssl-1.0.2s]#

报错实例和解决方案


  • 如果执行openssl version查看版本报错了,大概率是当前openssl包和当前系统不兼容导致的,解决方法,换一个openssl的版本即可

  • 报错查看

[root@centos76_1 openssl-1.1.1j]# openssl version

-bash: /usr/bin/openssl: 没有那个文件或目录

#实际上这个文件肯定是存在的

这就是不兼容导致的,直接重装其他版本

[root@centos76_1 openssl-1.1.1j]# ll /usr/bin/openssl

lrwxrwxrwx. 1 root root 26 5月 19 17:34 /usr/bin/openssl -> /usr/local/ssl/bin/openssl

[root@centos76_1 openssl-1.1.1j]#

  • 重装步骤,重复上面方法,不同的是,上面文件备份换成删除即可

[root@centos76_1 software]# rm -rf /usr/bin/openssl

[root@centos76_1 software]# rm -rf /usr/include/openssl

安装openssh

========================================================================

  • 我这升级的是8.6

升级前版本查看


主要就是用来对比后面是否升级成功

[root@controll software]# ssh -V

OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017

[root@controll software]# 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@controll software]#

文件备份删除


  • 如果ssh里面配置的东西比较多,可以备份,升级完成以后把这个文件拷贝回来【如果没有配置过什么东西,直接跳过备份这部,根据下面操作给删掉】

注:下面编译安装操作成功以后,把这个备份的文件恢复【建议不要恢复,直接参照之前的配置重新配置一遍,极端情况下会因为版本不一致,直接用原来配置会导致ssh出现不可预期的问题】

[root@controll software]# mkdir /etc/ssh.bak

[root@controll software]# cp -r /etc/ssh /etc/ssh.bak/

  • 因为我的服务器是没有对ssh做过什么配置修改的,所以我不用考虑配置问题就直接删掉了

[root@controll software]# rm -rf /etc/ssh/*

解压tar包


[root@controll software]# tar xfz openssh-8.6p1.tar.gz

[root@controll software]# cd openssh-8.6p1/

编译安装新版本的openssh


  • 配置、编译、安装一起执行

命令有点长,注意复制完

[root@controll openssh-8.6p1]# pwd

/software/openssh-8.6p1

[root@controll 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 $?【会shell的应该知道这个,这个是查看返回值的,0为执行成功】查看下最后的make install是否有报错,0表示没有问题,除了0以外的任何数字都是错误的【上面某个步骤出错了,需要重新弄,一直到显示结果为0才能进行下一步】

成功界面如下

在这里插入图片描述

配置root可登录


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

  • 这儿只对新文件中的一个地方做修改,就是设置允许root登录【升级完毕以后默认是不允许root登录的】

在文件/etc/ssh/sshd_config中将PermitRootLogin改为yes即可。

[root@controll openssh-8.6p1]# cat /etc/ssh/sshd_config | egrep -nC 1 PermitRootLogin

31-#LoginGraceTime 2m

32:#PermitRootLogin prohibit-password

33:PermitRootLogin yes

34-#StrictModes yes

新文件拷贝


  • 从原先的解压的包中拷贝一些文件到目标位置【如果目标目录存在就覆盖】

可能下面的ssh.pam文件没用到,因为sshd_config配置文件貌似没使用它,请自行测试【我这边是拷贝了,反正拷贝也没坏处】

[root@controll openssh-8.6p1]# cp -a contrib/redhat/sshd.init /etc/init.d/sshd

[root@controll openssh-8.6p1]# cp -a contrib/redhat/sshd.pam /etc/pam.d/sshd.pam

[root@controll openssh-8.6p1]# chmod +x /etc/init.d/sshd

新增sshd服务并设置开机启动


  • 让chkconfig管理sshd服务并把sshd加入开机自启动

–add  增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。

[root@controll openssh-8.6p1]# chkconfig --add sshd

[root@controll openssh-8.6p1]# systemctl enable sshd

[root@controll openssh-8.6p1]#

  • 把原先的systemd管理的sshd文件删除或者移走或者删除,不移走的话影响我们重启sshd服务

可以移动到任何地方,但建议记住移动的目的位置,便于后续如果需要的话能找到源文件。

[root@controll openssh-8.6p1]# mkdir /data

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

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

[root@controll 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@controll openssh-8.6p1]#

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

[root@controll openssh-8.6p1]# systemctl restart sshd

[root@controll openssh-8.6p1]# systemctl is-active sshd

active

[root@controll openssh-8.6p1]#

[root@controll openssh-8.6p1]# netstat -ntlp | grep 22

tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 12737/dnsmasq

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 10403/sshd: /usr/sb

tcp6 0 0 :::22 ::😗 LISTEN 10403/sshd: /usr/sb

[root@controll openssh-8.6p1]#

到此 openssh就升级完成了

查看确认版本


  • 上面编译没出错,每一个步骤都做完了,肯定不会有问题的。

注:ssh -V 【查看SSH版本】和 sshd -v【查看启动文件版本】, 2个都需要执行,并且2个都需要保持一致才算真正的升级成功【如果不一致,解决方法往下看】。

[root@controll openssh-8.6p1]# openssl version

OpenSSL 1.0.2s 28 May 2019

[root@controll openssh-8.6p1]#

[root@controll openssh-8.6p1]# ssh -V

OpenSSH_8.6p1, OpenSSL 1.0.2s 28 May 2019

[root@controll 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@controll openssh-8.6p1]#

  • 下面是我升级的8.0结果展示

[root@centos76_3 ~]# openssl version

OpenSSL 1.0.2s 28 May 2019

[root@centos76_3 ~]#

[root@centos76_3 ~]# ssh -V

OpenSSH_8.0p1, OpenSSL 1.0.2s 28 May 2019

[root@centos76_3 ~]# sshd -v

unknown option – v

OpenSSH_8.0p1, 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@centos76_3 ~]#

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


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

  • -sshd -v和ssh -V不一个版本,需要拷贝下列sshd (ssh -V是正确的)

cp /usr/local/openssh/sbin/sshd /usr/local/sbin/sshd

【 如果拷贝不成功先删除/usr/local/sbin/的sshd文件。命令如下

rm -rf /usr/local/sbin/sshd

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


  • 如果升级的是openssh8.0,忽略这步

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

密钥交换失败。

没有兼容的加密程序。服务器支持这些加密程序:

chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com

在这里插入图片描述

  • 原因

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

  • 处理方法

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

  • 2、修改ssh配置,添加对原加密算法的支持:

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
,会导致crt工具无法连接【但可以从服务器ssh过去】,报错信息如下:

密钥交换失败。

没有兼容的加密程序。服务器支持这些加密程序:

chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com

在这里插入图片描述

  • 原因

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

  • 处理方法

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

  • 2、修改ssh配置,添加对原加密算法的支持:

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-yzxmbx3v-1715864253991)]

[外链图片转存中…(img-3Zdrpqdj-1715864253992)]

[外链图片转存中…(img-oZvurcyz-1715864253992)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 16
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值