使用 telnet 测试远程主机连接

使用 telnet 测试远程主机连接

我正在从命令行使用 telnet 来测试与远程主机的连接,下面是我使用的命令。我认为我可以连接到主机,但无法完全理解 telnet 输出

yabhi$ telnet <remote host_ipaddr> 22
Trying <remote host_ipaddr>…
Connected to <remote host>
Escape character is '^]'.
SSH-2.0-OpenSSH_5.3
Connection closed by foreign host.

yabhi$ telnet <remote host_ipaddr> 23
Trying <remote host_ipaddr>…
telnet: connect to address <remote host_ipaddr>: Connection refused
telnet: Unable to connect to remote host

在我远程登录到端口 22 的第一个命令中,我得到了已与端口 22(SSH 端口)建立连接的确认。但是当我尝试测试任何命令时,例如“ping”或“date”(打印日期),我收到连接关闭错误消息。此行为是否确认是否已建立与远程主机的连接

令人惊讶的是,当我 telnet 到端口 23(telnet 服务器运行的端口)时,我收到无法连接消息。

答案1

telnet以这种方式使用只是建立一个有些原始 TCP 连接。 nc或者netcat是用于 IP 网络连接的命令行测试的更好工具。

在第一个实例中,您连接到端口 22 上的侦听sshd,并获取 SSH 握手的第一部分——服务器版本字符串。

在第二个实例中,您连接到telnetd传统上侦听的端口 23。然而,由于telnet它的安全性不如ssh,因此在现代系统上通常不会默认启用它。您无法连接,因为没有正在telnetd监听<remote_host_ipaddr>

你是不是这样使用时会建立远程 shell 会话telnet,这就是为什么你无法在远程系统上执行 shell 命令,例如pingdate。您正在建立一个网络连接,该连接允许您手动键入通常通过网络发送的相关协议的内容。使用 SSH,在初始版本交换后您几乎会陷入困境,因为交换的数据在此之后已加密。

更典型的用途是测试运行基于文本的协议的服务器,例如 HTTP、IMAP 或 SMTP,例如

$ telnet <remote_host_ipaddr> 80
> GET /index.html HTTP/1.0
>
...
$

答案2

telnet可以检查端口是否已打开并正在侦听。但并没有真正在远程主机上运行命令。telnet主要不安全,所有现代系统都将其禁用。这也是您与端口 23 的连接失败的原因:系统不应该接受原则连接并且端口已关闭。Connection refused表示连接已被防火墙或关闭的端口阻止。

答案3

如需更专用的测试方式,您可以使用我们的测试工具 dda-serverspec (https://github.com/DomainDrivenArchitecture/dda-serverspec-crate)用于此类任务。您可以定义您的期望

{:netcat [{:host "mywebserver.com" :port "443"}
          {:host "telnet mywebserver.com" :port "80"}
          {:host "telnet mywebserver.com" :port "8443"}]}

并针对本地主机或远程主机(通过 ssh 连接)测试这些期望。对于远程测试,您必须定义目标:

{:existing [{:node-name "test-vm1"
             :node-ip "35.157.19.218"}
            {:node-name "test-vm2"
             :node-ip "18.194.113.138"}]
 :provisioning-user {:login "ubuntu"}}

您可以运行测试java -jar dda-serverspec.jar --targets targets.edn serverspec.edn

在幕后,我们使用 netcat 进行一些特殊的超时或最小化流量设置...

相关内容