当我尝试将我的 SSH 端口设置为 22 以外的其他值(编辑/etc/sysconfig/iptables
和/etc/ssh/sshd_config
)时,我最终被锁定在服务器之外,并且必须启动到救援模式来纠正问题。
我已经经历过几次这样的循环,每次我都更加小心,确保自己做的事情是正确的。
我的新端口(在本例中为 33933)是否可能在其他地方被阻止 - 或者有另一个引用 22 的文件需要我需要更改?
这是我刚刚从 oneprovider.com(一个 online.net 经销商)设置的全新专用机器上的 CentOS 6。
答案1
您可以将 ssh 设置为多个端口。刚才有多个 Port 行,例如
Port 22
Port 1500
这样,您在排除端口 33933 故障的同时,可以使端口 22 继续工作。
接下来,在您更改配置并重新启动 ssh(您可以使用活动连接重新启动 ssh)后,将测试服务器是否正在监听该端口。
netstat -ltnp
发布其输出。
答案2
我猜 CentOS 的 SELinux 会阻止你的连接。尝试
selinux port -l | grep ssh
并且发现可能只允许使用端口 22。
semanage port -a -t ssh_port_t -p tcp 39333
会将端口 39333 添加到 ssh 允许端口。使用以下方法验证
semanage port -l | grep ssh
一切就绪。
答案3
第一个问题是,您编辑文件后是否实际加载了新的配置?
我建议第一步是设置 iptables 以允许两个端口上的传入连接。其次,您可以在不中断当前 ssh 连接的情况下测试对 sshd 的更新。如果键入service sshd reload
,您应该能够验证您是否能够启动新的 ssh 连接,同时保持旧连接处于活动状态,这样如果更改不起作用,您仍然可以撤消更改。
如果您在服务器上安装了inetd
或xinetd
已安装,则可以使用它来配置独立于主端口运行的辅助 sshd 端口。以下是 xinetd 中的示例:
service second-ssh
{
type = UNLISTED
flags = REUSE
socket_type = stream
protocol = tcp
port = 64739
wait = no
user = root
disable = no
server = /usr/sbin/sshd
server_args = -i
}
要查明网络上的某个端口是否被阻塞,您可以在连接的每一端使用 tcpdump 来查看 SYN 数据包是否由一端发送,以及另一端是否收到。如果发现被阻塞,您可以使用 traceroute 来找出阻塞的位置:traceroute -n -T -p 33933 example.com
答案4
编辑这些文件后,您需要重新启动两个服务才能应用新的配置。
只要运行service sshd restart && service iptables restart
您就可以访问。