我们可以使用 ssh 连接到 Web 服务器,然后发送 http 请求并接收 http 响应吗?

我们可以使用 ssh 连接到 Web 服务器,然后发送 http 请求并接收 http 响应吗?
telnet www.ietf.org 80
GET /rfc.html HTTP/1.1
Host: www.ietf.org

该命令序列启动与 IETF Web 服务器 www.ietf.org 上端口 80 的 telnet(即 TCP)连接。然后是命名 URL 路径和协议的 GET 命令。尝试您选择的服务器和 URL。下一行是强制性的主机标头。

  1. 我们可以使用类似的东西ssh来代替telnet

    ssh www.ietf.org 80
    GET /rfc.html HTTP/1.1
    Host: www.ietf.org
    

  2. 什么其他节目除此之外ssh可以代替telnet上面例子中的 来建立从本地主机到远程 http 服务器的连接,这样我们就可以向 http 服务器发送 http 请求并从它接收 http 响应吗?

    什么节目种类telent可以用上面例子中的 来代替吗?

谢谢。

答案1

您不能使用ssh,因为 SSH 客户端在继续服务器主机密钥检查之前等待来自服务器的某些横幅,... SSH 协议与 HTTP 无关:

$ telnet localhost 222
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.0

您可以使用 查询您的网络服务器telnet,因为它允许您将纯文本消息写入套接字。

另一种流行的“通用”TCP(和UDP)客户端(和服务器)是nc

$ nc localhost 222
SSH-2.0-OpenSSH_7.0

$ nc webserver 80
GET /
<?xml version="1.0" encoding="UTF-8"?>
[...]

更新,回复telnet也是与http不同的协议,但是为什么我们可以通过telnet使用http,而不能通过ssh使用

客户telnet端与协议无关。它允许您在连接到 TCP 服务器后进行读/写。

HTTP 是基于纯文本消息的协议,您可以使用telnet或轻松伪造 HTTP 查询nc

回复于在继续检查服务器主机密钥之前,SSH 客户端等待的“来自服务器的横幅”是什么?

SSH 客户端与协议无关。与 TCP 服务器建立会话后,ssh 客户端要做的第一件事是等待横幅消息,该消息应标识 OpenSSH 服务器版本。然后,检查主机密钥,最终进行身份验证,这应该打开一个 shell,... ssh 客户端仅与连接到 ssh 服务器相关。

答案2

我们可以使用 ssh 连接到 Web 服务器,然后发送 http 请求并接收 http 响应吗?

不。SSH 是比 更复杂的协议telnet

  • telnet只是文本协议发送文本请求和接收文本响应。不涉及加密。它与 HTTP(也是具有简单请求和响应消息的文本协议)有很多共同点,因此您可以使用它telnet来获取 HTTP 响应。
  • SSH 是二进制协议。此外,该协议是在ssh二进制文件中连接的,因此您不必关心它(telnet与您需要使用特殊命令进行身份验证的情况不同)。

您可以阅读横幅,但随后密钥交换开始,稍后您将获得加密的数据包,您必须以某种方式解密该数据包才能了解那里发生的情况(并发送加密的数据包以获得一些答案)。

    telnet localhost 22
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    SSH-2.0-OpenSSH_7.2p2
    SSH-2.0-OpenSSH_7.2p2
    
    �\��դ`�   !�����[email protected],ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1Assh-rsa,rsa-sha2-512,rsa-sha2-256,ecdsa-sha2-nistp256,[email protected],aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected]@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected][email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1�[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],hmac-sha2-256,hmac-sha2-512,hmac-sha1none,[email protected],[email protected]

还有哪些节目...

正如已经提到的,netcat如果您想编写原始 HTTP 请求,这是一个很好的例子。否则,您可以使用或仅使用浏览器中的开发人员工具来实现相同的wget目的。curl

回答附加问题:

(1)telnet也是与http不同的协议,但是为什么我们可以通过telnet使用http,而不能通过ssh使用呢?

它不是“通过 telnet 进行 http”。你仍然使用HTTP协议,但是使用telnet工具。它们是完全没有限制的文本协议,您可以发送任何事物使用它们。

(2) SSH 客户端在继续服务器主机密钥检查之前等待的“服务器横幅”是什么?

服务器正在等待“来自客户的横幅”,正式地客户端识别字符串,如中所解释的RFC4253描述 SSH 传输层。在进行服务器主机密钥检查之前有很多阶段,但基本上是密钥交换(上面显示的第一条消息)。

相关内容