在《亚马逊AWS EC2 REDHAT LINUX系统修改SSH端口后无法登陆的解决办法》一文中介绍了当修改SSH端口没有成功,而又无法连接SSH管理系统的解决办法,那么正确的修改SSH端口的方法到底是什么呢?
按照网上大多数人的文章和教程,修改SSH端口和我在上文中叙述的一样。第一个就是修改vi /etc/ssh/sshd_config
文件,去掉port 22
前面的注释符号#
,修改为你的目标端口,这个端口不能被其它程序占用,80,21端口这些尽量不要使用。基于上篇文章的情况,那么我建议把22这个端口保留,然后新添加一个端口。
port 22 port 56
当56端口连接连接成功之后,再删除22端口,那么这里的工作就完成了。对于AWS EC2主机,如果开启了iptables,那么还需要开启iptables的2200端口和AWS EC2后台安全组中的56端口。这里不再赘述。
但是当这样修改之后还是无法登录,就像上篇文章叙述的一样,这样配置SSH正常来说是没有问题的,但是偏偏就是无法连接56,折腾了蛮久,最后修改回22端口才让网站正常运行。
经过多次尝试研究,发现了问题所在,下面分享一下修改亚马逊AWS EC2 LINUX系统SSH为非22端口错误的原因和解决办法。
首先运行命令 netstat -apn
查看端口使用情况,确实56端口没有被监听,只有22端口被监听。
service sshd restart
重启sshd服务,发现错误信息。
运行journalctl -xe
原来权限不够,56端口绑定失败。这时候想起了新版linux的SElinux。SELinux安全增强型Linux,在内核中实现强制访问控制(MAC)的安全机制,他给每一个程序制定访问端口的权限。
运行命令
semanage port -l | grep ssh #查看ssh端口
他对SSH只开放了22端口,所以绑定56端口的时候就只有失败了!!!
那么把56端口添加进SELinux的规则中,增加一个56端口,运行命令
semanage port -a -t ssh_port_t -p tcp 56 # 修改SELINUX,允许56
发现56端口已经开始监听了。顺利连接56端口。
写到这里,解决这个问题很显然还有一个办法,那就是,如果你对SELinux不是很熟悉,我们可以关掉它,不然会遇到很多坑。
关闭SELinux方法,在配置文件/etc/selinux/config
中,将SELINUX=enforcing改为SELINUX=disabled
之后删除vi /etc/ssh/sshd_config
中的port 22
这样就把22端口封闭了,从而开启了另外一个SSH安全端口了。修改SSH端口是防治批量扫描22端口的一个手段,以免在服务器上线之初,由于密码简单而中招。后续的安全还可以限制SSH的ip登录,限制root登录,限制密码登录等等多个安全措施,这样Linux系统就比较安全了。
乐在分享,让看到这篇文章的你少走弯路,那么我写这篇文章的几个小时劳动就值得了。Have a enjoy!