我有一台运行 Centos 7 的 Linux 机器。我尝试使用 putty 或 WinScp 通过 ssh 进入该机器,但无法做到。
我已经使用以下命令打开了 ssh 端口:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
我已将公钥放入 authorized_key 文件中。我已编辑该/etc/ssh/sshd_config
文件并启用PublickeyAuthentication
。
之后我重新启动了 sshd 服务:systemctl restart sshd.service
。
但我还是无法访问服务器。我以为可能是网络连接问题,但我可以从机器上网。连接时我从 putty 收到的错误是:Network error: Connection timed out
。
我遗漏了什么?我该如何解决这个问题?任何帮助都将不胜感激。谢谢。
答案1
您需要逐步正确地解决问题。
- 端口是否打开(netstat)
- 数据包是否到达主机(tcpdump)
- 机器如何回复;回复数据包去往何处(tcpdump)
- 检查所有防火墙规则;其他规则可能匹配(iptables)
- 检查路由;你甚至可能有多个路由表(ip route)
如果您可以暂时关闭防火墙,排除故障将会更容易,但这并不总是一种选择。
答案2
我相信--dport
这是 tcp 模块的一部分,需要-m tcp
使用该选项。接受传入的 tcp 端口 22 的完整命令将是:
sudo iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
答案3
iptables -A INPUT -i venet0 -m state --state ESTABLISHED,RELATED -j ACCEPT -m comment --comment "ALLOW ESTABLISHED connections"
iptables -A INPUT -i venet0 -p tcp --dport 22 -m state --state NEW -j ACCEPT -m comment --comment "ALLOW new SSH connections"
替换venet0
为你的网络接口,例如eth0
如果不起作用,netstat -tulpen | grep ':22'
或lsof -4
和的输出是什么iptables -L -v -n
-m tcp
不需要--dport