无法将 SSH 端口设置为 22 以外的其他端口

无法将 SSH 端口设置为 22 以外的其他端口

当我尝试将我的 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 连接,同时保持旧连接处于活动状态,这样如果更改不起作用,您仍然可以撤消更改。

如果您在服务器上安装了inetdxinetd已安装,则可以使用它来配置独立于主端口运行的辅助 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您就可以访问。

相关内容