[网络/Linux]CentOS7:OpenSSH升级到7.9p1 | 含: 安装Telnet/OpenSSH【telnet/ssh】
【Q0 OpenSSH/sshd/ssh/scp/sftp,及OpenSSL这些软件组件之间有什么联系吗?】
请跳转咱的另一篇博文,相信阅读完后,你会清楚很多:
[网络/SSH]OpenSSH: sshd / sftp-server / ssh-agent | ssh / scp / sftp | OpenSSL - 博客园/千千寰宇
【Q1 升级的原因?】
CENTOS7.6默认安装的7.4版本存在一些安全漏洞,被第三方网络安全公司给扫描出来了,故而不得不升级到OpenSSH7.7及以上。
那么,为什么不升级到目前最新版的8.4呢?
主要是考虑到:1)服务器环境是客户的生产环境;2)担心8.x不兼容7.x;
综上,在OpenSSH的诸多发布版本中,选中了 7.x 版本中的最高版本————7.9
【Q2 为什么要写这篇博文?】
升级OpenSSH,其实本身就是一项高危操作,不得不提高警惕,写得清清楚楚,明明白白。
一旦升级失败或操作不当,咱们的远程服务器可能就要与我们"阴阳相隔"....
【Q3 此博文是否原创?】
否,不完全是原创。
此博文在参考了该博文的基础上,根据自身所考虑更多细节,对部分步骤及其内容做了更多的拓展和说明。
好啦,咱们正式开搞!
【建议】建议生产环境,一定要先做测试,之后再在生产环境升级。
【环境】
- OS - CENTOS 7.6
- CPU - x86_64
- OpenSSH - 原版本 7.4 ; 目标版本 7.9
1 前期准备
1-0 工具/环境
- Xshell
- Telnet - 默认端口: 23
7 : echo
ping/8 : base on ICMP protocol (ICMP协议 无具体端口,如果非要打开ping试试的话,尝试 8端口 + 7 端口)
20:FTP数据端口
21:文件传输服务器(控制连接)(FTP)
22:SSH端口
23:远程终端 (TELNET 基于TCP/IP协议)
25:简单邮件传输服务器(SMTP)
80:万维网服务器(HTTP)
telnet 服务版本:telnet-server-0.17-64.el7.x86_64(yum安装)
telnet 客户端版本:telnet-0.17-64.el7.x86_64(yum安装,可选装)
xinetd版本:xinetd-2.3.15-13.el7.x86_64(yum安装)
注:
要想完成telnet安装,telnet服务端和xinetd必须安装,至于telnet客户端根据自己需要安装即可!
如果本地你要是想使用telnet命令连接其他机器就需要装,如果只作为服务端需要别人连接自己,即可不用安装客户端(建议安装)
1-1 升级前事项
【升级前】最好关闭防火墙。如果不关闭防火墙,请开启ssh需要的端口和telnet需要的端口。
如果ssh不是22端口最好打开22端口。因为ssh配置文件默认22端口。所以,建议关闭防火墙。
systemctl stop firewalld.service # 关闭防火墙
systemctl disable firewalld # 禁止开机自启 service iptables stop # 关闭防火墙 - centos6
chkconfig iptables off # 禁止开机自启 - centos6
- 检查 服务器开启的端口
# yum install nmap
# nmap localhost
【升级前】关闭selinux.并重启
不关闭的话,可能引起的问题:
CentOS 为 vsftpd 启动 vsftpd:500 OOPS: cannot read config file: /etc/vsftpd/vsftpd.conf- 查看 selinux 状态
# sestatus -v
或
# getenforce
关闭SELinux
- 临时关闭(不用重启机器)
setenforce 0 ##设置SELinux 成为permissive模式
##setenforce 1 设置SELinux 成为enforcing模式
- 永久关闭(需重启机器)
【步骤】修改/etc/selinux/config 文件,将SELINUX=enforcing改为SELINUX=disabled,重启机器即可
【注意】 selinux的文件可能位置: /etc/selinux/config 或 /etc/sysconfig/selinux 或其它(通过
whereis selinux)sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux reboot
【升级前】前期多打开1个xshell窗口,并保证连接正常。因为可能出现升级失败。结束后要确定好再关闭。
【升级前】备份sshd_config配置文件(方便后期使用或者方便升级失败使用)
1-2 升级后注意事项
- 【升级后】要重建xshell的session。不然,很可能会出项下面提示:

1-3 依赖安装
- OpenSSL版本:1.1.x以下。目前OpenSSH 7.9 不支持OpenSSL 1.1.x以上。否则,编译的时候会报错。
yum list installed | grep -i openssl或openssl version
- Zlib1.1.4或1.2.1.2或更高版本
yum list installed | grep -i zlib
gcc:因为编译需要gcc
yum list installed | grep -i gccopenssl-devel:编译时需要
yum list installed | grep -i openssl-devel
2 安装Telnet
2-1 安装Telnet
为防止openssh升级失败。所以,安装telnet。
保证openssh升级失败后,也可以通过telnet连接服务器,进行恢复操作,而不用去机房。
- 检查是否已安装Telnet
# rpm -qa | grep -i telnet-server
# rpm -qa | grep -i telnet
# rpm -qa | grep -i xinetd
- yum安装Telnet
# yum install -y telnet-server
# yum install -y xinetd
# yum install -y telnet
2-2 Telent 启动+开机自启
- 启动 telnet
# systemctl start telnet.socket
# systemctl start xinetd
查看telnet服务是否启动
netstat -antupl | grep 23

建议:开启telnet和xinetd开机自动启动,避免reboot后连不上Telnet
systemctl enable xinetd.service # xinetd开机自启
systemctl enable telnet.socket # 设置telnet开机自启
2-3 验证Telnet
Windows系统使用Telnet客户端 可参见: win7开启telnet远程服务 - 百度知道
确保使用windows或者其他Linux服务器可以telnet到此机器上,并且可以使用root用户。



#方式1 telnet本地测试(root用户测试)
telnet 127.0.0.1
或
telnet 127.0.0.1 23

默认情况下,系统是不允许root用户telnet远程登录的,安全原因,具体查阅telnet协议。 (以上截图可见 : root 登录错误)
【一般不建议直接用root用户远程通过telnet登陆系统,因为telnet在数据传输过程采用明文方式,如果数据包一旦被人截获,将会很容易获取root用户的登陆口令;还是建议以普通用户通过telnet远程登陆,然后su到root,这样相对比较安全。如果非要用root用户远程连接,建议采用SSH.】
方法1- 修改login文件:如果想启用root登陆,编辑/etc/pam.d/login文件将auth requisite pam_securetty.so 这行注释掉即可!
方法2 - 修改securetty文件:如果要使用root用户直接登录,需设置如下内容。
方法3 - 具有sudo权限的普通用户(不开启root用户)。可添加一个可以登录的用户,登录并su到root用户。
[方法2]
# echo 'pts/0' >>/etc/securetty
# echo 'pts/1' >>/etc/securetty
# systemctl restart telnet.socket
[方法3] 创建具有sudo权限的普通用户 ---- hello
Step1 下载安装Xshell、Xftp工具
Step2 通过Xshell,远程登陆服务器root用户
Step3 使用检查用户的命令查询当前linux环境是否存在用户 hello
cat /etc/passwd
Step4 若无用户hello,则:创建用户
su
(输入root用户密码)
useradd hello
passwd hello
(输入/设置 hello用户的新密码)
此时 /home目录下会新增一个用户主目录: /home/hello
Step5 授予hello用户sudo权限
chmod ug+rw /etc/sudoers [授予 sudoers文件的读【写】权限]
ll /etc/sudoers [查看有无读写权限]
vi /etc/sudoers
新增一行 "hello ALL=(ALL) ALL" (在"root ALL=(ALL) ALL"行下)
#方式2 telnet本地测试(普通用户测试)
telnet 127.0.0.1
或
telnet 127.0.0.1 23

注:用普通用户测试登陆没问题,那就说明telnet没问题!
3 安装openssh
3-1 下载/上传openssh
Openssh 官网地址:https://www.openssh.com/
OpenSSH 下载地址:https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/
选择openssh-7.9p1.tar.gz进行下载,并上传到服务器上/opt/software/openssh-7.9p1.tar.gz。
3-2 卸载旧的ssh
# cp -r /etc/ssh /etc/ssh.202010251729.old.bak #备份一些之前的ssh文件
# rpm -qa | grep openssh
openssh-server-7.4p1-21.el7.x86_64
openssh-clients-7.4p1-21.el7.x86_64
openssh-7.4p1-21.el7.x86_64
# rpm -e --nodeps openssh-clients-6.6.1p1-31.el7.x86_64
# rpm -e --nodeps openssh-6.6.1p1-31.el7.x86_64
# rpm -e --nodeps openssh-server-6.6.1p1-31.el7.x86_64
# rpm -qa | grep openssh
如果之前就是源码安装的,找到之前的安装包,在里面执行
# make uninstall
3-3 安装OpenSSH
- 1 连接到其他计算机时,OpenSSH作为2个进程运行。
第一个进程是特权进程,并根据需要控制权限的颁发。
第二个进程与网络通信。
设置适当的环境需要额外的安装步骤,这些步骤通过以root用户身份发出以下命令来执行 :
# 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 解压安装
cd /opt/software/
# tar -zxvf ./openssh-7.9p1.tar.gz
# cd ./openssh-7.9p1
# ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-privsep-path=/var/lib/sshd
# make
如果报错
① configure: error: no acceptable C compiler found in $PATH
问题解决:yum install gcc
② configure: error: * zlib.h missing - please install first or check config.log *
问题解决:yum install openssl openssl-devel -y安装相关依赖包③ Permission denied (publickey,keyboard-interactive)
echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config
./configure 命令解释:
--sysconfdir=/etc/ssh:这可以防止安装配置文件 /usr/etc。
--with-md5-passwords:这使得可以使用MD5密码。
--with-pam:此参数在构建中启用 Linux-PAM支持。
--with-xauth=/usr/bin/xauth:为X身份验证设置xauth二进制文件的默认位置。如果将xauth安装到其他路径,请更改位置。这也可以sshd_config使用XAuthLocation关键字进行控制。如果已安装Xorg,则可以省略此开关。
--with-kerberos5=/usr:此选项用于在构建中包含Kerberos 5支持。
--with-libedit:此选项为sftp启用行编辑和历史记录功能。
3 修改相应文件权限
# ll /etc/ssh/ssh_host_rsa_key # chmod 600 /etc/ssh/ssh_host_rsa_key
# chmod 600 /etc/ssh/ssh_host_ecdsa_key
# chmod 600 /etc/ssh/ssh_host_ed25519_key
4 安装
# make install
- 5 配置
# 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.9p1
# install -v -m644 INSTALL LICENCE OVERVIEW README* /usr/share/doc/openssh-7.9p1
6 根据自身需求改写配置文件。
因为配置文件为初始配置文件。所以和之前的不一样。可以使用备份配置文件覆盖。
注意:默认是22端口,但不能root直接登录。如果想直接使用root登录执行以下命令
# echo 'X11Forwarding yes' >> /etc/ssh/sshd_config
# echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
# echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config
3-4 OpenSSH启动+开机自启
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
# systemctl restart sshd
3-5 验证OpenSSH
# ssh -V
OpenSSH_7.9p1, OpenSSL 1.0.2k-fips 26 Jan 2017
使用其他电脑或者其他的xshell等工具连接,验证要谨慎。

3-6 配置开放sshd服务的远程访问IP权限
- 避免因此问题而导致连接ssh失败
参考文献: 解决 ssh_exchange_identification: read: Connection reset by peer问题 - CSDN
/etc/hosts.allow 控制可访问本机的IP地址。
/etc/hosts.allow和/etc/hosts.deny两个文件是控制远程访问设置的。
通过这2份控制配置文件,可以允许或者拒绝某个ip或者ip段的客户访问linux的某项服务。比如:SSH服务。
通常只对管理员开放,就可以禁用不必要的IP,而只开放管理员可能使用到的IP段。
/etc/hosts.deny 控制禁止访问本机的IP地址。如果两个文件的配置有冲突,以/etc/hosts.deny为准。
vi /etc/hosts.allow
sshd: ALL ##允许所有ip主机均能连接本机
service sshd restart

4 补充:回滚操作
如果之前是rpm包安装的。并且按照以上步骤操作,可以直接以下命令进行回滚
# yum -y install openssh-clients
# yum -y install openssh-server
# yum -y install openssh
5 结束操作
之前的步骤一定要谨慎查看。查看是否可以连接,会不会出现什么问题。
1、 恢复telnet的禁止root登录特权。如果之前关闭就关闭telnet。
2、 开启防火墙,并验证连接。
3、 最后再关闭之前开xshell界面。
6 扩展场景
CASE1 测试目标主机端口是否联通
一般情况下,使用telnet ip port判断端口通不通,其实测试方法不止这一种,还有很多种方法。
方法1 telnet
telnet是Windows标准服务,可直接用;
如果是Linux机器,需要安装telnet.
用法:
telnet ip port
- 若目标主机的端口不存在/未开放
[root@localhost ~]# telnet 10.0.250.3 80
Trying 10.0.250.3...
telnet: connect to address 10.0.250.3: Connection refused #直接提示连接被拒绝
- 若目标主机的端口存在/已开放
[root@localhost ~]# telnet 127.0.0.1 22
Trying ::1...
Connected to localhost. #看到Connected就连接成功了
Escape character is '^]'.
SSH-2.0-OpenSSH_5.3
a
Protocol mismatch.
Connection closed by foreign host.
方法2 ssh [推荐]
ssh是Linux的标准配置并且最常用,可以用来判断端口吗?
用法:
ssh -v -p port username@ip
-v调试模式(会打印日志).-p指定端口
安装:
- 若目标主机的端口不存在/未开放
[root@localhost ~]# ssh 10.0.250.3 -p 80
ssh: connect to host 10.0.250.3 port 80: Connection refused
[root@localhost ~]# ssh 10.0.250.3 -p 80 -v
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to 10.0.250.3 [10.0.250.3] port 80.
debug1: connect to address 10.0.250.3 port 80: Connection refused
ssh: connect to host 10.0.250.3 port 80: Connection refused
- 若目标主机的端口存在/已开放
[root@localhost ~]# ssh -v -p 1521 xx.yy.hh.mm
OpenSSH_.p, OpenSSL ..e-fips Feb
debug: Reading configuration data /etc/ssh/ssh_config
debug: Applying options for *
debug: Connecting to ... [...] port .
debug: Connection established.
debug: permanently_set_uid: /
debug: identity file /root/.ssh/identity type -
debug: identity file /root/.ssh/identity-cert type -
debug: identity file /root/.ssh/id_rsa type -
debug: identity file /root/.ssh/id_rsa-cert type -
debug: identity file /root/.ssh/id_dsa type -
debug: identity file /root/.ssh/id_dsa-cert type -
方法3 wget
wget是Linux下的下载工具,需要先安装
用法:
wget ip:port
- 若目标主机的端口不存在/未开放
[root@localhost ~]$ wget 172.yy.gg.87:81
--2021-04-07 19:40:17-- http://172.yy.gg.87:81/
正在连接 172.16.yy.gg:81... 失败:拒绝连接。
- 若目标主机的端口存在/已开放
[root@localhost ~]$ wget 172.yy.gg.87:80
--2021-04-07 19:39:25-- http://172.yy.gg.87/
正在连接 172.16.yy.gg:80... 已连接。
已发出 HTTP 请求,正在等待回应... 403 Forbidden
2021-04-07 19:39:25 错误 403:Forbidden。
方法4 nmap
使用端口扫描工具————nmap
可参见: [网络/Linux]网络嗅探工具——nmap - 博客园/千千寰宇
用法:
nmap -p port host
- 若目标主机的端口不存在/未开放
[root@localhost ~]nmap -p 81 172.yy.gg.87:80
Starting Nmap 6.40 ( http://nmap.org ) at 2021-04-07 19:46 CST
mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers
Nmap scan report for sdc87 (172.yy.gg.87:80)
Host is up (0.00022s latency).
PORT STATE SERVICE
81/tcp closed hosts2-ns
Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds
- 若目标主机的端口存在/已开放
[root@localhost ~]$ nmap -p 80 172.yy.gg.87:80
Starting Nmap 6.40 ( http://nmap.org ) at 2021-04-07 19:46 CST
mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers
Nmap scan report for sdc87 (172.yy.gg.87)
Host is up (0.00029s latency).
PORT STATE SERVICE
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds
X 参考与推荐文献
- Centos7 openssh升级到7.9p1 - 简书
- Centos7 安装telnet - 51CTO
- http://www.linuxfromscratch.org/blfs/view/svn/postlfs/openssh.html
- 查看/关闭 SELinux状态 - 博客园
- win7开启telnet远程服务 - 百度知道
- OpenSSH download - cdn.openbsd.org
[网络/Linux]CentOS7:OpenSSH升级到7.9p1 | 含: 安装Telnet/OpenSSH【telnet/ssh】的更多相关文章
- Linux CentOS7.x 升级内核的方法
一.概述 在数据中心基础环境中,Linux系统使用很普遍,但是有时候会遇到应用程序需要运行在高版本的内核上或者有时候系统自身要求需要升级内核,我们要综合考虑升级内核的风险. 二.升级内核的方法 1.查 ...
- Linux centos7 rsync工具介绍、rsync常用选项、rsync通过ssh同步
一.rsync工具介绍 rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync.rsync是Linux系统下的文件同步和数据传输工具,它采用“rsync ...
- centos7.6升级ssh7.9、安装PHP7.2、Nginx1.15.9、PHP加密扩展php_screw1.5
1.centos7 安装PHP7.2版本 #查询是否安装过php yum list installed | grep php yum provides php #移除php yum remove ph ...
- centos7生产环境下openssh升级
由于生产环境ssh版本太低,导致使用安全软件扫描时提示系统处于异常不安全的状态,主要原因是ssh漏洞.推荐通过升级ssh版本修复漏洞 因为是生产环境,所以有很多问题需要注意.为了保险起见,在生产环境下 ...
- centos7.6 升级openssh openssl
centos7.3和centos7.6升级完毕测试登录ssh以及重启后登录ssh均无问题. 前期请自行配置好yum源(如果不会请百度) 整个过程不需要卸载原先的openssl包和openssh的rpm ...
- centos7.2升级openssh7.9p1
Centos7.2版本yum升级openssh版本最高到7.4,想要升级到更高的版本需要重新编译 一.查看当前openssh版本: [root@localhost ~]# ssh -VOpenSSH_ ...
- linux 实现centos7在线升级最新版本内核
Kernel (内核)是操作系统的核心,掌握所有硬件设备的控制权,也就是说,你所希望计算机帮你完成的各项工作,都需要通过内核的帮助才能完成,当然,如果我们想完成的某个功能是内核没有的,则内核不会操控 ...
- CentOS7.5升级OpenSSH
实验环境 OS:CentOS 7.5 当前openssh版本:OpenSSH_7.4p1 升级后的openssh版本:OpenSSH_8.0p1 开通telnet 为了防止升级过程中ssh断连,保险起 ...
- centos7.5以上poenssl和openssh升级
2020年12月09日,360CERT监测发现 openssl 发布了 openssl 拒绝服务漏洞 的风险通告,该漏洞编号为 CVE-2020-1971 ,漏洞等级:高危 ,漏洞评分:7 ...
- centos7.5升级openssh7.4到7.9
漏洞扫描工具扫描出openssh用户枚举漏洞,搜索资料得知无补丁和升级包,解决这个漏洞得安装漏洞修复之后的版本version>7.8. 环境 linux版本: CentOS Linux rele ...
随机推荐
- c++结对编程
|| |:--|:--| |Github项目|Github地址 |结对伙伴|伙伴地址1伙伴地址2 PSP表格 ||| |:--|:--|:--|:--| |PSP2.1|Personal Softwa ...
- 2.javaOOP_Part2继承
- 洛谷 P2105 K皇后 题解
START: 2021-08-06 16:34:44 题目链接: https://www.luogu.com.cn/problem/P2105 题目详情: 小 Z 最近捡到了一个棋盘,他想在棋盘上摆放 ...
- airtest的手势滑动方法封装
这个网上应该很多类似的方法封装,各种实现方式也很多,但是感觉最简单实用的还是swipe了:代码很简单,直接上方法了. 很多方法都不会告诉你会导入什么包,其实很多小白入门可能就是这么简单的一步就被卡 ...
- JMeter控制器遍历一组数据
1.获取数据列表,通过JSON提取器提取所有name信息 获取到的name总条数 = name_matchNr = 4 2.通过添加控制器遍历一组数据 2.1 方式一:添加循环控制器 循环控制次数为 ...
- STL练习-排列2
Ray又对数字的列产生了兴趣: 现有四张卡片,用这四张卡片能排列出很多不同的4位数,要求按从小到大的顺序输出这些4位数. Input 每组数据占一行,代表四张卡片上的数字(0<=数字<=9 ...
- winIO介绍
WinIO程序库允许在32位的Windows应用程序中直接对I/O端口和物理内存进行存取操作.通过使用一种内核模式的设备驱动器和其它几种底层编程技巧,它绕过了Windows系统的保护机制. 因为需要加 ...
- SpringMvc配置和原理
运行原理 DispatcherServlet通过HandlerMapping在MVC的容器中找到处理请求的Controller,将请求提交给Controller,Controller对象调用业务层接口 ...
- 移动服务(f[i] [j] [k],这三个人,位置为a[i],j,k的最小价值)
移动服务(f[i] [j] [k],这三个人,位置为a[i],j,k的最小价值) 题意 给出点之间到达价值,使用3个人处理一个序列,f[i] [j] [k],这三个人,每次处理序列中一个值,三个人中一 ...
- celery异步任务队列入门
参考: Celery入门 任务调度delay&apply_async celery 简要概述 Celery 中文手册 Celery动态添加定时任务 全网最细之Celery 4.x动态添加定时任 ...
