查看系统版本

cat /etc/redhat-release

CentOS Linux release 7.5.1804 (Core)

查看ssh 版本

ssh -V

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

更新安装依赖

1
yum install -y make  gcc gcc-c++  openssl-devel zlib zlib-devel pam-devel

下载解压

1
2
3
cd /opt
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.4p1.tar.gz
tar -zxvf openssh-9.4p1.tar.gz

测试编译源码

1
2
3
cd openssh-9.4p1
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-tcp-wrappers --with-ssl-dir=/opt/openssl-1.1.1i --without-har
dening --without-openssl-header-check

make安装

1
make && make install

–with-ssl-dir是openssl的lib库。通过find / -name "libssl.so" 2>/dev/null找到你的路径

/opt/openssh-9.4p1/openssl-1.1.1i/libssl.so,/opt/openssh-9.4p1/openssl-1.1.1i就是你的路径。

–without-openssl-header-check 是跳过ssl库版本不一致检查,慎用。

如果出现openssl问题如:

1
checking OpenSSL library version... configure: error: OpenSSL >= 1.1.1 required (have "100020bf (OpenSSL 1.0.2k-fips 26 Jan 2017)") 

需要升级openssl版本

删除/etc/ssh下的密钥对(只删除密钥对即可,重启会重新生成)

1
rm -rf /etc/ssh/ssh_host_*

修改配置文件且去掉注释

1
vi /etc/ssh/sshd_config 

PermitRootLogin yes
PasswordAuthentication yes

将源码安装包中 opensshd.init 文件复制到 /etc/init.d/ 目录下并添加可执行权限

1
2
cp  /opt/openssh-9.4p1/opensshd.init /etc/init.d/sshd.init
chmod u+x /etc/init.d/sshd.init

启动ssh服务

1
/etc/init.d/sshd.init start

备份原有sshd.service文件

1
mv  /usr/lib/systemd/system/sshd.service   /opt

添加sshd.service 文件

1
vi /usr/lib/systemd/system/sshd.service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#Automatically generated by systemd-sysv-generator

[Unit]
Documentation=man:systemd-sysv-generator(8)
SourcePath=/etc/rc.d/init.d/sshd.init
Description=SYSV: OpenSSH server daemon

[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=no
PIDFile=/var/run/sshd.pid
ExecStart=/etc/rc.d/init.d/sshd.init start
ExecStop=/etc/rc.d/init.d/sshd.init stop
ExecReload=/etc/rc.d/init.d/sshd.init reload

重载配置

1
systemctl daemon-reload

重启ssh服务

1
systemctl  restart sshd

综合问题解决

安装perl 5,否则下边openssl安装编译不过。

1
2
3
4
(yum安装perl相关支持) 
yum install perl*
(perl需要的程序库,需要cpan的支持,详细自行)
yum install cpan

升级openssl版本

1
2
3
4
5
wget https://www.openssl.org/source/openssl-1.1.1i.tar.gz
tar -xzvf openssl-1.1.1i.tar.gz
cd openssl-1.1.1i
./config
make && make install

说明:升级后如果执行 openssl version 命令出现openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory错误。执行以下命令即可。

1
2
ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

升级有风险操作需谨慎(使用telnet 兜底)可选操作

安装xinted

  xinetd即extended internet daemon,xinetd是新一代的网络守护进程服务程序,又叫超级Internet服务器。经常用来管理多种轻量级Internet服务。telnet服务就是通过xinetd服务来管理的,所以在安装telnet服务之前需要先安装xinetd服务。

yum install -y xinetd
#yum 安装telnet-server telnet-client
yum install telnet-server telnet

#查看软件版本
rpm -qa telnet-server
telnet-server-0.17-66.el7.x86_64

配置telnet 文件
若此文件不存在,则创建这个文件。将其中disable=yes改为disable=no或注释掉。

1
vi /etc/xinetd.d/telnet
1
2
3
4
5
6
7
8
9
10
service telnet
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
disable = no
}

修改ListenStream=0.0.0.0:23

1
2
3
4
5
6
7
8
添加防火墙端口
sudo iptables -A INPUT -p tcp --dport 23 -i ens33 -j ACCEPT
防火墙重启
sudo firewall-cmd --permanent --add-service=telnet
sudo firewall-cmd --reload
重启telnet服务
sudo systemctl daemon-reload
sudo systemctl restart telnet.socket

重启服务
systemctl restart xinetd
systemctl restart telnet.socket

sudo iptables -A INPUT -p tcp –dport 23 -i ens33 -j ACCEPT

telnet 默认的情况之下不允许 root 以 telnet 进入 Linux 主机,创建普通用户登录系统切换root。

telnet 测试
telnet 192.168.99.147