SSH 远程登录失败处理

修改ssh端口号之后无法进行远程的解决思路

前置知识

ssh基础知识

已有很多大佬进行总结,这里不再赘述。可参考骏马金龙的博客

修改 ssh 端口(以 centos 8.2 为例)

备份配置文件

在修改任何配置文件之前,最好先进行备份,以防万一修改出错可以迅速恢复。

1
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

备份ssh配置文件

编辑 SSH 配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 打开 SSH 守护进程的配置文件
vi /etc/ssh/sshd_config

# 更改端口号
# 找到 Port 行,取消注释。然后,将数字更改为你要设置的新端口号

# 重启SSH服务
systemctl restart ssh

# 验证更改
# 使用 netstat 或 ss 命令来检查新端口是否正在监听
netstat -tuln | grep newport

修改ssh端口

查看ssh端口

排查思路

检查服务端已启用 ssh 服务

使用 systemctl 命令

1
systemctl status sshd

ssh服务已启用

使用 ps 命令来检查是否有 sshd 进程正在运行

1
ps -e | grep sshd

ssh服务已启用

使用 netstatss 命令来检查端口22(SSH默认端口)是否正在监听

1
2
netstat -tlnp | grep 22
ss -tlnp | grep 22

ssh服务已启用

如果服务未启用,可以使用 systemctl start sshd 命令来启动服务,并使用 systemctl enable sshd 命令来设置服务在系统启动时自动启动。

确认客户端和服务端的网络是否联通

1
telnet ip port

telnet 成功

确认配置文件无误

检查防火墙是否进行阻断

检查是否开启了firewalld

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
systemctl status firewalld

# 如果开启了,查看firewalld中的规则。
firewall-cmd --list-all

# firewall当前的zone为public,该zone默认只放通ssh和dhcpv6-client服务。其中ssh服务为默认的22端口,当ssh修改为非22端口时就无法访问。

# 方法1:执行以下命令,停止firewalld服务并取消开机自启。
systemctl stop firewalld
systemctl disable firewalld

# 方法2:执行以下命令,在firewalld服务中添加新的端口55660。
firewall-cmd --add-port=newport/tcp --permanent --zone=public
firewall-cmd --reload

检查 iptables 是否做了限制

1
iptables -L

iptables 检查

1
2
3
4
5
6
# 如果做了做了限制,未放通新的 ssh 端口,则要进行放通
vi /etc/sysconfig/iptables
-A INPUT -m state -state NEW -m tcp -p tcp -dport newport -j ACCEPT

# 修改完成后重启 iptables 服务
systemctl restart iptables

检查 hosts 配置文件

Linux 服务器通过设置 /etc/hosts.allow/etc/hosts.deny 这个两个文件,可以限制或者允许某个或者某段IP地址远程SSH登录服务器。

检查 /etc/hosts.allow ,允许当前这个IP地址ssh登录。

1
sshd: 192.168.1.3

检查/etc/hosts.deny,如果存在sshd:all:deny,请注释掉该行。

hosts.allowhosts.deny 两个文件同时设置规则的时候,hosts.allow 文件中的规则优先级高。假设 hosts.allow 设置 sshd: 192.168.1.3hosts.deny 设置了 sshd:all:deny ,那么云服务器只允许192.168.1.3这个IP地址的SSH登录,其它的 IP 都会拒绝。

如果是云服务器,需确认服务器安全组对新端口放通

安全组放通端口

Licensed under CC BY-NC-SA 4.0