我有一台 Odroid XU4,上面装有 Ubuntu 14.04 服务器。
我使用 安装了 ssh 服务器apt-get install openssh-server
。我使用 获得了本地 IP hostname -I
,即192.168.0.186
,我生成了一个随机端口号:61354
。我创建了一个文件/etc/ssh/authorized_keys
并附加了客户端机器的公钥:cat /media/stick/id_rsa.pub >> /etc/ssh/authorized_keys
。之后我用 覆盖了配置文件nano /etc/ssh/sshd_config
。我将其设置为PasswordAuthentication no
,ListenAddress 192.168.0.186
,Port 61354
,AuthorizedKeysFile /etc/ssh/authorized_keys
。之后我重新启动了机器。
ssh 192.168.0.186 -p 61354
我尝试在客户端上使用 SSH 访问它,但没有成功: ssh: connect to host 192.168.0.186 port 61354: Bad file number
,这远非详细的错误消息。我成功了ping 192.168.0.186
,所以 IP 没有问题。如何解决这个问题?
编辑:
$ ssh -vvv -p 61354 192.168.0.186
OpenSSH_4.6p1, OpenSSL 0.9.8e 23 Feb 2007
debug1: Reading configuration data /c/Users/inf3rno/.ssh/config
debug2: ssh_connect: needpriv 0
debug1: Connecting to 192.168.0.186 [192.168.0.186] port 61354.
debug1: connect to address 192.168.0.186 port 61354: Connection refused
ssh: connect to host 192.168.0.186 port 61354: Bad file number
在我尝试的服务器上ps aux | grep sshd
,根据它显示 ssh 服务器正在运行。因此可能存在防火墙,阻止客户端连接到服务器。我不知道我从这里安装的操作系统映像中到底有什么:http://odroid.in/ubuntu_14.04lts/。我尝试查看我是否有防火墙。(根据论坛的说法,没有安装防火墙。)
我检查过了nmap
[inf3rno@inf3rno ~]$ sudo nmap -sS 192.168.0.186 -p 61354
[sudo] password for inf3rno:
Starting Nmap 7.00 ( https://nmap.org ) at 2016-02-07 15:22 CET
Nmap scan report for 192.168.0.186
Host is up (0.0041s latency).
PORT STATE SERVICE
61354/tcp closed unknown
MAC Address: 00:1E:06:30:1E:CE (Wibrain)
Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds
和traceroute
traceroute to 192.168.0.186 (192.168.0.186), 30 hops max, 60 byte packets 1 192.168.0.186 (192.168.0.186) 5.833 ms 5.773 ms 8.347 ms
我使用本教程尝试了一个简单的套接字服务器:http://www.binarytides.com/netcat-tutorial-for-beginners/
$ nc -l -v 1234 # starting the socket server
$ telnet localhost 1234 # client connection: ok
$ telnet 192.168.0.186 1234 # client connection: refused
所以这显然与网络有关,我可能需要检查调制解调器设置。我在另一台装有 Fedora 的机器上尝试了此操作,结果相同。
结论
事实证明这是与网络有关的问题。很可能机器上没有安装防火墙,所以这不是与防火墙有关的问题。我在 Fedora 23 安装中也遇到了同样的问题。我认为这是网络中的一般问题,可能是由我购买的新调制解调器引起的。我尝试检查调制解调器设置,也许我找到了问题的根源。
答案1
您需要使用ssh
手册页中描述的命令:
ssh -p 61354 192.168.0.186
端口号必须位于主机名/IP 之前,否则可能不被遵守。
对于实际的错误,该connect
功能被阻止,如问题中所述所以. 您需要在途中的防火墙上打开该端口(traceroute 192.168.0.186
),或者使用某个已打开的端口(如果您没有在同一台机器上运行https服务器,则443
应该打开)。
答案2
尽管问题中有结论部分,我还是设法使用相同的命令在带有套接字服务器的机器之间发送数据。我之前所做的是访问调制解调器的管理页面。它经历了第一个访问过程,例如密码更改等。我没有在设置中更改任何内容,但之后通信正常工作。我不确定是我输入了错误的命令还是这个第一个访问过程修复了它,这并不重要。问题的根源是其他东西。
完成这部分后,SSH 服务器仍然无法工作,因此我开始调整配置。
之后,我用 nano /etc/ssh/sshd_config 覆盖了配置文件。我将其设置为 PasswordAuthentication no、ListenAddress 192.168.0.186、Port 61354、AuthorizedKeysFile /etc/ssh/authorized_keys。
我从配置文件中删除了ListenAddress
and Port
。之后我permission denied (public key)
使用ssh 192.168.0.186
命令收到了消息,因此连接已建立,但身份验证失败。所以我还有工作要做,但至少它已连接。
最后,我删除了AuthorizedKeysFile /etc/ssh/authorized_keys
并将文件移动到默认位置~/.ssh/authorized_keys
并连接。现在它正常工作了。:-)ssh [email protected]