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. その他のプログラム上記の例ではなく、ローカルホストからリモートhttpサーバーへの接続を確立してhttpリクエストをhttpサーバーに送信し、http応答を受信できますsshか?telnet

    プログラムタイプtelent上記の例のものを代わりに使用できますか?

ありがとうございます。

答え1

sshSSHクライアントは、サーバーホストキーの確認を続行する前にサーバーがいくつかのバナーを待つため、使用できません。 SSHプロトコルはHTTPとは何の関係もありません。

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

telnetソケットにプレーンテキストメッセージを書き込むことができるため、Webサーバーでクエリを使用できます。

別の一般的な「汎用」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はプレーンテキストメッセージに基づくプロトコルであり、telnetHTTPクエリを使用したり簡単に偽造したりできますnc

返信するSSHクライアントがサーバーホストキーの確認を進める前に待機する「サーバーのバナー」とは何ですか?

SSH クライアントはプロトコルに拘束されません。 TCPサーバーとのセッションの確立後にSSHクライアントが最初に行うことは、OpenSSHサーバーのバージョンを識別するバナーメッセージを待つことです。その後、ホストキーを確認して最後に認証すると、シェルが開きます。 SSH クライアントは、SSH サーバーへの接続にのみ関連します。

答え2

SSHを使用してWebサーバーに接続し、httpリクエストを送信してhttpレスポンスを受信できますか?

いいえ。 SSHはSSHよりも複雑なプロトコルですtelnet

  • telnetただ文字契約文字要求を送信し、文字応答を受け取ります。暗号化は必要ありません。これはHTTP(単純な要求と応答メッセージを含むテキストプロトコル)と共通しているため、これを使用してtelnetHTTP応答を取得できます。
  • 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リクエストを作成したい場合の良い例です。そうでない場合は、ブラウザの開発者ツールを使用するか、単に使用して同じwgetcurl

追加の質問に答えてください:

(1)Telnetもhttpとは異なるプロトコルですが、なぜTelnetではhttpを使用できますが、sshでは使用できませんか?

そうではない「Telnet経由のhttp」。それでもHTTPプロトコルを使用しますが、telnetツールも使用します。送信できる完全に無制限のテキストプロトコルです。何もないそれを書く。

(2) SSH クライアントがサーバホストキーの確認を進める前に待機する「サーババナー」とは何ですか?

サーバーが待っています「クライアントのバナー」、公務員クライアント識別文字列で説明されているようにRFC4253SSHトランスポート層について説明します。サーバーのホスト鍵検証を実行する前にいくつかの手順がありますが、デフォルトでは鍵交換(上記の最初のメッセージ)です。

関連情報