Linux更改ssh服务端口
Linux更改ssh服务端口
之前发现我租的一台云主机一直被外部ip尝试登录ssh,每次登录都看到有大量的登录失败记录,于是我就更改了ssh服务端口,效果是立竿见影,世界马上就清净了。这里和大家分享一下
-
修改sshd配置文件/etc/ssh/sshd_config,假设修改端口为23122,增加一行
Port 23122
,找到Port 22
这一行,如果其行首有#,去掉#,保存文件,然后重启ssh服务systemctl restart sshd
。如果是SELinux系统,还需要执行semanage port -a -t ssh_port_t -p tcp 23122
。 -
此时ssh有22和23122两个服务端口,如果是云服务器,我们应该在确保新的ssh服务端口正常工作的前提下,再关闭22端口。但是在防火墙没有关闭的前提下,23122这个端口应该是不能被外部访问的,以CentOS7.9为例,将23122端口加入白名单
firewall-cmd --zone=public --add-port=23122/tcp --permanent
,然后重新载入firewall-cmd --reload
,一切顺利的话,这时候就可以通过ssh username@hostname/ip -p 23122
进行登录了。 -
确定新端口正常工作之后,就可以不用22端口了,编辑sshd配置文件/etc/ssh/sshd_config,在
Port 22
这一行行首添加#,保存文件,然后重启ssh服务systemctl restart sshd
,如此以来,就完成了ssh服务端口的切换。
需要注意的是,CentOS7.9中,firewalld默认将ssh服务端口添加到了白名单,可以通过firewall-cmd --list-services
查看firewalld服务白名单,但是该服务白名单中各服务指代的端口号并不随具体服务自身的端口配置而改变,而是保存在`/usr/lib/firewalld/services`
目录下,对于sshd的配置文件是ssh.xml。在已经显式地将新的sshd端口加入白名单的情况下,可以删除ssh服务白名单firewall-cmd --zone=public --remove-service=ssh --permanent
,然后重新载入。
或者你可以直接修改ssh.xml 中的端口号为新的sshd端口并重新载入,这样可以不用显式地将新的sshd端口加入白名单,这样做的风险在于你无法在关闭22端口之前验证新的端口是不是已经在正常工作。