我正在尝试通过 ssh 将我的 Ubuntu 主机连接到 Fedora 笔记本电脑,以便通过以太网共享文件。我已经在 Fedora 上启动了 OpenSSH 服务器(通过service sshd start
),并且我已经执行了命令iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
以允许传入的 ssh 连接。此外,服务器上的 IPv4 地址由 设置ifconfig enp2s0f0 192.168.10.10 netmask 255.255.255.0 up
。但每当我输入ssh -A -Y 192.168.10.10
或ssh -4 192.168.10.10
; 时,我总是收到一条错误消息,显示“ssh:连接到主机 192.168.10.10 端口 22:连接被拒绝”,即使在使用 禁用防火墙后也是如此service iptables stop
。
iptables -n -L -v
Fedora 上的输出显示:
链输入(策略接受 11652 个数据包,2859K 字节)数据包字节目标协议选择加入退出源目标
链转发(策略接受 0 个数据包,0 字节)数据包字节目标协议选择加入退出源目标
链输出(策略接受 11759 个数据包,1665K 字节)数据包字节目标协议选择加入退出源目标
iptables -n -L -v
ubuntu 上的输出显示:
链输入(策略接受 210K 数据包,16M 字节)数据包字节目标协议选择源目标
链转发(策略接受 0 个数据包,0 个字节)pkts 字节目标 prot opt 源目标
链输出(策略接受 209K 数据包,15M 字节)数据包字节目标协议选择源目标
route -n
在服务器中执行,给出以下输出:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 enp2s0f0
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
在 Ubuntu 客户端机器中执行sudo route -n
,给出以下输出:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.10.1 0.0.0.0 UG 100 0 0 enp14s0
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 enp14s0
192.168.10.0 0.0.0.0 255.255.255.0 U 100 0 0 enp14s0
ip r
在客户端机器上:
default via 192.168.10.1 dev enp14s0 proto static metric 100
169.254.0.0/16 dev enp14s0 scope link metric 1000
192.168.10.0/24 dev enp14s0 proto kernel scope link src 192.168.10.10 metric 100
arping -I enp14s0 192.168.10.10
在客户端机器上,卡在:
ARPING 192.168.10.10 from 192.168.10.10 enp14s0
输出sudo tcpdump -n -i any port 22
:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
01:09:28.363302 IP 192.168.10.10.58906 > 192.168.10.10.22: Flags [S], seq 506055200, win 43690, options [mss 65495,sackOK,TS val 33913 ecr 0,nop,wscale 7], length 0
01:09:28.363357 IP 192.168.10.10.58906 > 192.168.10.10.22: Flags [R.], seq 0, ack 506055201, win 0, length 0
01:09:28.354895 IP 192.168.10.10.58906 > 192.168.10.10.22: Flags [S], seq 2349767060, win 43690, options [mss 65495,sackOK,TS val 34911 ecr 0,nop,wscale 7], length 0
01:09:28.354948 IP 192.168.10.10.22 > 192.168.10.10.58908: Flags [R.], seq 0, ack 2349767061, win 0, length 0
有人有什么主意吗?
非常感谢您的帮助。
答案1
我假设您想要连接到enp2s0f0
服务器的接口(所有其他接口(环回接口除外)都是DOWN
)。
从日志中您可以看到该接口上的 DHCP 请求超时。从输出中ip a
您可以看到该接口只有一个 IPv6 链路本地地址。
您应该修复 DHCP 或手动为接口分配 IPv4 地址 ( ip addr add x.x.x.x/24 dev enp2s0f0
)。或者,您也可以使用 IPv6。
编辑:更多问题:
- 这两台机器是直接相连的吗?
ip a
您能告诉我们有关客户端的更多信息吗? 、ip r
和iptables-save
客户端上输出什么?iptables-save
服务器上输出什么?请注意,iptables -vnL
不会打印所有规则。- 您能从客户端 ping 服务器吗?(例如
ping 192.168.10.10
) - 您能从客户端对服务器进行 arp ping 操作吗?(例如
arping -I eth0 192.168.10.10
)您收到回复了吗?回复中的 MAC 地址正确吗?(应该是20:89:84:77:4b:2a
)。 - 如果您在服务器上运行 tcpdump(
tcpdump -n -i any port 22
)并尝试 ssh-ing,tcpdump 会输出什么?
编辑 2:您的客户端和服务器应具有不同的 IP 地址。将客户端设置为 192.168.10.9,将服务器设置为 192.168.10.10。
答案2
我认为您的规则永远不会被达到,因为 REJECT 规则(就在之前)适用于所有与前面的规则不匹配的数据包。
如果你使用会发生什么:
iptables
-I INPUT 1
-p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
(即在表格开头插入规则)
编辑:更多建议
检查 sshd 是否正在监听:
ss --tcp --listening -n -p
-v
在显示 iptables 时添加选项(这会为每个规则添加一个数据包计数,以便您可以看到使用了哪一个)尝试 IPv4 和 IPv6(使用命令的
-4
选项)-6
ssh
答案3
我认为您正在尝试连接到错误的 IP。
在 ss 命令中,您会看到类似“本地地址”192.168.122.1 的内容,但您尝试连接到 IP 192.168.10.10。
ip a
你能给我们提供一下服务器的网络配置吗?如果你把服务器执行的整个输出粘贴上去就足够了。