我正在尝试解决为什么我无法从 Unix 机器连接到远程 SFTP。远程主机有我的公钥,我的防火墙配置为允许与主机的出站连接。
我检查了主机是否已启动,使用nmap -Pn -p 22 $HOST
并得到以下结果:
Host is up.
rDNS record for $HOST
PORT STATE SERVICE
22/tcp filtered ssh
我试图通过命令行连接到它,每次连接超时。我可以看到出站连接正在通过,但没有响应。
以下是我尝试通过命令行连接的方式:
timeout 30 ssh -i ~/.ssh/my_private_key user@$HOST
我也尝试将私钥复制/粘贴到纯文本文件并使用它:
timeout 30 ssh -i ~/.ssh/my_private_key.txt user@$HOST
$ ssh -vvv -i ~/.ssh/my_private_key user@$HOST
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 58: Applying options for *
debug2: resolving "$HOST" port 22
debug2: ssh_connect_direct: needpriv 0
debug1: Connecting to $HOST [$HOST] port 22.
debug1: connect to address $HOST port 22: Connection timed out
ssh: connect to host $HOST port 22: Connection timed out
在指责主机做错之前,我还应该做些什么来解决我的连接问题?
您需要将客户端配置为允许新的出站,但还允许在同一个端口上为已经建立的连接进行入站。在主机上,您需要允许该端口上的入站新连接和已建立的连接在同一端口上的出站连接。
例子:
(这将允许传入的 SSH 连接适合主机)
sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT
(这将允许适合客户端的传出 SSH 连接)
sudo iptables -A OUTPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A INPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT