![我们可以使用 ssh 连接到 Web 服务器,然后发送 http 请求并接收 http 响应吗?](https://linux22.com/image/99043/%E6%88%91%E4%BB%AC%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%20ssh%20%E8%BF%9E%E6%8E%A5%E5%88%B0%20Web%20%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%8C%E7%84%B6%E5%90%8E%E5%8F%91%E9%80%81%20http%20%E8%AF%B7%E6%B1%82%E5%B9%B6%E6%8E%A5%E6%94%B6%20http%20%E5%93%8D%E5%BA%94%E5%90%97%EF%BC%9F.png)
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。下一行是强制性的主机标头。
我们可以使用类似的东西
ssh
来代替telnet
ssh www.ietf.org 80 GET /rfc.html HTTP/1.1 Host: www.ietf.org
?
什么其他节目除此之外
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 传输层。在进行服务器主机密钥检查之前有很多阶段,但基本上是密钥交换(上面显示的第一条消息)。