修改SSH端口的操作看似简单,但实际操作中容易踩坑,尤其是在远程服务器上更改时,如果新端口配置不当,很容易把自己锁在门外。本文梳理了多种常见场景下的SSH端口修改方法及避坑细节,帮助你安全完成服务器安全配置。
SSH端口常规修改流程
首先,打开SSH服务的配置文件:
sudo vim /etc/ssh/sshd_config
找到以下这一行:
Port 22
将末尾的22替换为你想要的新端口号,然后重启SSH服务:
sudo service ssh restart
如果远程连接时遇到“no route to host”错误,通常是因为防火墙没有放行新端口。只需在防火墙规则中添加对应端口即可。
未安装openssh-server时的安全变更步骤
注意:如果你是远程操作,千万不要急着关闭旧端口。稳妥的做法是让SSH同时监听22和新端口两个端口,等测试确认新端口可以正常连接后,再回头将Port 22注释掉。这样可以避免因配置错误导致远程连接中断。
首先安装SSH服务:
$ sudo apt-get install openssh-server
编辑服务端配置文件:
$ sudo vim /etc/ssh/sshd_config
取消 #Port 22 前面的注释符号#,然后在下一行添加你想要使用的端口,例如 Port 222。
接着编辑客户端配置文件:
$ sudo vim /etc/ssh/ssh_config
同样取消 #Port 22 前面的#,并添加新端口。
保存修改后重启SSH服务:
$ /etc/init.d/ssh restart
或 $ service ssh restart
接下来在防火墙中开启对应端口,然后进行连接测试。此时SSH同时工作在22和新端口上,测试成功后即可将Port 22注释掉。
Ubuntu 16.04 系统下修改SSH端口的方法
操作流程大同小异,这里针对细节进行补充。编辑 /etc/ssh/sshd_config:
$ sudo vim /etc/ssh/sshd_config
在 Port 22 下方添加你的新端口:
Port 22
Port YOUR_PORT
编辑 /etc/ssh/ssh_config,在 Host * 下添加:
Host *
Port 22
Port 你的端口
# ForwardAgent no
...
重启SSH服务:
service ssh restart
使用新端口进行连接测试,成功后把22端口注释掉。为了方便后续连接,可以在本地 ~/.ssh/ 目录下新建一个 config 文件,内容如下:
Host YOUR_HOST
User YOUR_USER_NAME
Port YOUR_NEW_PORT
这样以后连接时只需执行 ssh YOUR_HOST 即可。
另外,修改SSH默认端口后,Git的远程操作(如推送、拉取代码)可能会失败。解决办法同样是在 ~/.ssh/config 中单独指定端口:
Host github.com
HostName github.com
Port 22
Host bitbucket.org
HostName bitbucket.org
Port 22
另一种快捷的SSH端口修改方式
如果你喜欢通过命令行直接修改,可以使用 sed 命令:
sed -i "s/Port .*/Port 你的端口/g" /etc/ssh/sshd_config
然后重启SSH服务:
service ssh restart
用新端口连接测试即可。
注意:
新端口必须添加到防火墙的允许列表中,否则等于自己切断连接通道。在Linux命令行执行:
firewall-cmd --zone=public --add-port=你的端口/tcp --permanent
操作完成后,建议检查 auth.log 日志,查看SSH是否遭受暴力扫描。例如使用下面两条命令:
grep "Accepted password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more
grep "Failed password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more
前者显示成功登录的IP,后者显示失败尝试的IP。如果发现异常IP,建议立即加强安全防护措施。
