自从我使用OpenStack版本" Liberty"安装devstack后,我遇到了一个奇怪的问题。我可以在机器上创建实例并将SSH连接到它们而没有任何问题。 devstack创建为单个节点,控制器和计算机位于同一台机器上。使用的网络是Nova,浮动IP范围为172.24.4.0。当我尝试从另一台计算机ssh到一个实例时,会出现问题。我在路由器中创建了一条路由,将所有流量从172.24.4.0定向到安装了OpenStack的机器的IP。我可以从这台外部机器远程登录到SSH端口:
$ telnet 172.24.4.9 22
Trying 172.24.4.9...
Connected to 172.24.4.9.
Escape character is '^]'.
但是,每当我尝试从外部计算机SSH连接到实例时,我都会超时。
$ ssh -v -i ~/.ssh/xxx.key cirros@172.24.4.9
OpenSSH_6.9p1, LibreSSL 2.1.7
debug1: Reading configuration data /Users/username/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 20: Applying options for *
debug1: Connecting to 172.24.4.9 [172.24.4.9] port 22.
debug1: Connection established.
debug1: identity file /Users/username/.ssh/xxx.key type 1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/username/.ssh/xxx.key-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.9
ssh_exchange_identification: read: Operation timed out
这曾经在像Juno这样的早期版本中工作,尽管我可能在Kilo中遇到过类似的问题。无论哪种方式,每当我从安装OpenStack的机器中ssh时,这个问题就会消失。这让我相信实例中的SSH服务器没有问题。
我已经确保的事情:
答案 0 :(得分:1)
当客户端连接到SSH服务器时,发生的第一次数据交换是客户端和服务器以纯文本形式将其标识字符串发送给彼此。你通常可以通过telnet看到这个:
$ telnet localhost 22
Trying ::1...
Connected to localhost.
Escape character is '^]'.
SSH-2.0-OpenSSH_6.9 <--From the server
在您的情况下,您尝试通过telnet和ssh,在这两种情况下,服务器从未将其ID字符串发送到客户端:
$ telnet 172.24.4.9 22
Trying 172.24.4.9...
Connected to 172.24.4.9.
Escape character is '^]'.
debug1: Local version string SSH-2.0-OpenSSH_6.9
ssh_exchange_identification: read: Operation timed out
换句话说,服务器由于某种原因从不发送其ID字符串,尽管它也没有关闭TCP连接。
你必须在服务器上对此进行故障排除,以找出它的行为方式。另外,我的第一个猜测是,在尝试将客户端的IP地址解析为主机名时,SSH服务器挂在DNS查询中。