我使用 Ubuntu 11.04 作为桌面操作系统。我安装了 openssh-server,可以从同一台计算机连接到它。我想使用它从另一台计算机(在同一本地网络上)创建到这台计算机的连接。由于某种原因没有响应。Ufw 处于非活动状态。另一台具有相同设置的计算机可以正常工作。这台计算机只有一个 NIC。
机器 A(Ubuntu 11.04)
- IP地址:192.168.1.22
- 已安装 SSH 服务器
- ufw 状态:不活跃
- sshd 似乎绑定到所有接口
- 从机器 B ping 到这台机器成功
- 尝试了 ssh root@localhost,只是想看看是否有效,结果确实如此
Netstat 结果 机器 A
unix 2 [ ACC ] STREAM LISTENING 13480 2275/ssh-agent /tmp/ssh-BKiZJjfU2214/agent.2214
unix 2 [ ACC ] STREAM LISTENING 13651 2195/gnome-keyring- /tmp/keyring-VvDtwo/ssh
记录结果
09/02/11 10:25:26 AM ubuntu-a kernel [ 5564.741977] Inbound IN=eth0 OUT= MAC=xxxx SRC=192.168.1.44 DST=192.168.1.22 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=45506 DF PROTO=TCP SPT=49089 DPT=22 WINDOW=14600 RES=0x00 SYN URGP=0
机器 B(Ubuntu 11.04)
- IP地址:192.168.1.33
- 安装 ssh-server
- 尝试从机器 A 登录,成功了
- 尝试登录机器 A,导致连接超时
我在这里遗漏了什么?
答案1
运行这个:
netstat -lepn | grep ssh
在结果中,您可以看到 sshd 是否绑定到所有接口或全部 (0.0.0.0)。如果它仅绑定到本地接口,则在 /etc/sshd_config 中更改以下设置:
ListenAddress ::
ListenAddress 0.0.0.0
如果你没有看到这样的行,那么你的 sshd 没有运行:
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 0 8627 674/sshd
tcp6 0 0 :::22 :::* LISTEN 0 8629 674/sshd
如果是这种情况,您可以尝试使用以下命令启动它:
start ssh
答案2
在安装 openssh-server 后,您可以从自己的 PC 而不是同一网络上的其他 PC 建立 SSH 连接,这当然是不现实的(假设您没有更改默认设置,并且网络上没有任何魔法阻止连接通过)。
我要做的第一件事是检查以确保 SSH 正在监听所有以太网适配器(而不仅仅是本地主机)。您可以使用 来执行此操作netstat
,使用 TCP(-t)列出正在监听(-l)的服务名称(-n)而不是数字,然后将结果传递给grep
搜索:22
SSH 默认监听的端口:
netstat -ntl | grep :22
您应该得到以下结果:
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 :::22 :::* LISTEN
如果您没有得到该结果,那么这可能是您的第一个问题。sudo server ssh restart
我会尝试做的第一件事是检查 SSH 服务器是否确实已启动(使用 重新启动)(但您可能不是这种情况,因为您可以从本地主机连接)。我会检查的第二件事是 SSH 服务器配置是否正常。
如果这是我得到的结果,netstat
那么我可以假设 SSH 服务器正在监听所有以太网适配器,这意味着来自同一网络上的其他 PC 的连接应该可以工作。
我接下来要查看的是 PC 的 IP 地址,以确保我从尝试连接的 PC 指定了正确的 IP 地址。ifconfig
应该给我所需的信息。
在我的 PC 上,ifconfig
显示:
eth0 Link encap:Ethernet HWaddr 00:26:9e:e8:cf:31
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:42 Base address:0xc000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:4239 errors:0 dropped:0 overruns:0 frame:0
TX packets:4239 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1341552 (1.3 MB) TX bytes:1341552 (1.3 MB)
wlan0 Link encap:Ethernet HWaddr c4:17:fe:3c:aa:d7
inet addr:192.168.1.66 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::c617:feff:fe3c:aad7/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:54149 errors:0 dropped:0 overruns:0 frame:0
TX packets:24983 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:29122251 (29.1 MB) TX bytes:4707094 (4.7 MB)
这表明我的eth0
没有 IP 地址(因为它没有连接)并且我的无线适配器wlan0
有 IP 地址192.168.1.66
。这是我需要用来从同一网络上的另一台 PC 连接的 IP 地址。
在另一台电脑上,假设我使用与“问题”电脑上相同的用户名登录,我将从终端连接:
ssh 192.168.1.66
还是不起作用?
接下来要尝试检查 PC 之间是否存在任何类型的网络通信。尝试从另一台 PC ping“问题”PC。如果您无法获得 ping 回复,那么这可能不是 SSH 问题,而是网络问题。
您还可以尝试另一件事...几个月前,我尝试从笔记本电脑打印到无线打印机时遇到了问题。原来是无线路由器导致了这个问题。路由器重启后,打印又恢复正常了。您尝试过重启路由器吗?
还是没有运气?
好的,现在我们在机器 A 上尝试sudo tcpdump
。我们要转储所有源 IP 地址为 192.168.1.33(机器 B)且通过端口 22 进入的数据包eth0
(假设您的网络适配器是eth0
):
sudo tcpdump -i eth0 src host 192.168.1.33 and dst port 22
现在在机器 B 上尝试:
SSH 192.168.1.22
是否tcpdump
产生任何输出?
我们也可以尝试telnet
从机器 B 连接机器 A 的 22 端口:
telnet 192.168.1.22 22
这应该会产生类似这样的结果:
user@machineb:~$ telnet 192.168.1.22 22
Trying 192.168.1.22...
Connected to 192.168.1.22.
Escape character is '^]'.
SSH-2.0-OpenSSH_5.8p1 Debian-1ubuntu3
其他计算机可以连接到机器 A 吗?
机器B可以连接到任何其他计算机吗?
答案3
tcpdump -nvvvli ethX port 22 or icmp
在 Ubuntu 11.04 上执行(替换ethX
为您的网络设备名称,例如eth0
)。查看端口 22 (ssh) 上的连接是否命中,以及它是否正确应答 (不是 ICMP 也不是 TCP RST)。