修改Linux上的ssh的默认端口号——及其客户端使用ssh连接不上Linux问题排查解决
一、需求描述
Linux中默认的ssh端口号22是不安全的,很容易被黑客攻击利用,而修改ssh默认的端口是一个可以增加系统安全性的操作。
#查看ssh远程连接详细信息命令
ssh -v -p 22222 root@192.168.1.10
二、修改ssh默认端口号的操作流程
2.1、先备份一份ssh的配置文件
#备份ssh的配置文件
cd /etc/ssh/
cp -p sshd_config sshd_config.bak
2.2、编辑ssh的配置文件并重启
#编辑ssh的配置文件并修改端口号为22222#1-编辑ssh的配置文件并找到Port=22修改端口号为22222后输入:wq保存退出
vi /etc/ssh/sshd_config#2-重启sshd服务(若此时重启sshd服务失败,则可以先临时禁用selinux)
systemctl restart sshd.service#3-排查重启sshd服务故障是否是由于selinux引起的【即:先临时禁用selinux,然后在重启sshd服务即可判断是否是selinux的导致的(若临时禁用selinux后可以正常重启成功sshd服务,则表示是selinux引起的】
setenforce 0
getenforce
systemctl restart sshd.service#4-关于彻底解决sshd修改端口号后无法正常启动的方法,有两个方法
#4.1-方法一:新增 SELinux 策略以允许 sshd 在新端口上对tcp进行监听运行
yum install policycoreutils-python-utils
semanage port -a -t ssh_port_t -p tcp 22222#4.2-方法二:直接永久禁用selinux【即:编辑selinux的配置文件并将其中的SELINUX=enforcing修改为SELINUX=disabled保存退出】
vi /etc/selinux/config
reboot
注意:重启sshd服务会报错并无法重启sshd服务成功,并提示“
Job for sshd.service failed because the control process exited with error code.
See "systemctl status sshd.service" and "journalctl -xeu sshd.service" for details.”
此时我们需要检查是否是selinux引起的,我们只用先临时禁用selinux,然后在重启sshd服务即可判断是否是selinux的导致的(若临时禁用selinux后可以正常重启成功sshd服务,则表示是selinux引起的),详细操作如下:
2.3、selinux说明
SELinux(Security-Enhanced Linux)是Linux内核的一个模块,也是Linux的一个安全子系统。SELinux的实现了强制访问控制MAC(Mandatory Access Control ),每个进程和系统资源都有一个特殊的安全标签,资源能否被访问除了DAC规定的原则外,还需要判断每一类进程是否拥有对某一类资源的访问权限。 | |
openEuler默认使用SELinux提升系统安全性。SELinux分为三种模式:
|
2.4、检查防火墙并永久放开指定端口
为了可以让外部的服务器可以通过ssh访问到该Linux,若Linux的防火墙已经开启则需要在防火墙上放开ssh配置的端口(如:22222),详细操作如下:
#查看防火墙状态并永久放开22222端口#1-查看防火墙状态
systemctl status firewalld#2-查看防火墙当前放开的所有端口
firewall-cmd --list-port#3-永久放开防火墙的22222端口
firewall-cmd --zone=public --add-port=22222/tcp --permanent#4-重载防火墙
firewall-cmd --reload#若是测试环境也可以直接关闭防火墙等测试完成后再开启
#关闭防火墙
systemctl stop firewalld.service#启用防火墙
systemctl start firewalld.service #临时禁用selinux
setenforce 0
三、其他问题解决
3.1、SSH连接“The remote host closed the connection”问题解决
OpenEuler使用ssh远程连接提示“The remote host closed the connection”或者是连接后1分钟左右没有操作就断开连接问题。
#解决【ssh远程连接成功后几十秒后就提示“The remote host closed the connection”断开连接问题】#方法一:查看当前是否有哪个程序占用了ssh的22端口(若有占用则修改ssh服务的默认22端口为其他的端口)
netstat -antlp | grep :22#方法二:查看Linux服务器中目前有多少个用户在连接(获取到Pid后可以使用【kill -9 pid】即可)
who
ps aux | grep sshd#方法三:将ssh的连接数量增大;修改sshd的服务配置文件中的最大连接数(即将【# MaxSessions 10】修改为【MaxSessions 15】)增大后重启sshd服务
vi /etc/ssh/sshd_config
systemctl restart sshd#方法四:连接Linux服务器时设置超时间隔(单位是:秒)你可以自行指定间隔时间;如果没有数据包从 SSH 客户端发送到 SSH 服务器,SSH 将向服务器发送加密请求以获取 TCP 响应【如:使用root用户连接192.168.1.10服务器且要每 30 秒发出一次该请求,请执行以下命令】
ssh -o ServerAliveInterval=30 -p 22222 root@192.168.1.10#方法五:连接Linux服务器的时候指定保持长连接。TCPKeepAlive:这使用 TCP/IP 协议的 KEEPALIVE 选项在指定的非活动时间间隔后保持连接处于活动状态。在大多数系统上,这意味着 2 小时。因此,通过将 TCPKeepAlive 选项传递给 SSH,SSH 客户端会向 SSH 服务器发送加密数据包,从而保持您的 TCP 连接正常运行。
ssh -o TCPKeepAlive=yes -p 22222 root@192.168.1.10
《1》修改sshd的服务配置文件中的最大连接数增大后重启sshd服务:
《2》查看Linux服务器中目前有多少个用户在连接(获取到Pid后可以使用【kill -9 pid】即可)
《3》将ssh的连接数量增大;修改sshd的服务配置文件中的最大连接数(即将【# MaxSessions 10】修改为【MaxSessions 15】)增大后重启sshd服务:
《4》连接Linux服务器时设置超时间隔(单位是:秒)你可以自行指定间隔时间;如果没有数据包从 SSH 客户端发送到 SSH 服务器,SSH 将向服务器发送加密请求以获取 TCP 响应【如:使用root用户连接192.168.1.10服务器且要每 30 秒发出一次该请求,请执行以下命令】
3.2、SSH连接“OpenSSL version mismatch. Built against 30000070,you have 30200020”问题解决
Linux的22端口无法连接上,SSH无法使用——OpenSSL version mismatch. Built against 30000070,you have 30200020问题,详细解决方法操作请参考如下链接:
Linux的22端口无法连接上,SSH无法使用——OpenSSL version mismatch. Built against 30000070,you have 30200020https://blog.csdn.net/xiaochenXIHUA/article/details/149150750
3.3、SSH“连接Linux服务器慢登录时间长”问题解决
#解决SSH连接Linux服务器慢耗时较长问题解决方法#1-打开ssh的配置文件sshd_config
vi /etc/ssh/sshd_config#2-将ssh的配置文件sshd_config中的【#UseDNS no】修改为【UseDNS no】(这是因为ssh默认使用了dns反查,这样的话当ssh某个IP时,系统会试图通过DNS反查相对应的域名,如果DNS中没有这个IP的域名解析,则会等到DNS查询超时才会进行下一步,消耗很长时间)#3-将ssh的配置文件sshd_config中的【#GSSAPIAuthentication yes】修改为【GSSAPIAuthentication no】后保存退出#4-重启sshd服务
systemctl restart sshd
线上Linux服务器的优化设置、系统安全与网络安全策略https://blog.csdn.net/xiaochenXIHUA/article/details/149913938