![ローカルホスト経由でSSH接続をマップする](https://rvso.com/image/1609684/%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%9B%E3%82%B9%E3%83%88%E7%B5%8C%E7%94%B1%E3%81%A7SSH%E6%8E%A5%E7%B6%9A%E3%82%92%E3%83%9E%E3%83%83%E3%83%97%E3%81%99%E3%82%8B.png)
私がやろうとしていることが実現可能かどうかはわかりませんが、ポート転送を使用してローカルホスト経由で SSH 接続を実行しようとしています。
私がこれをやりたい理由は、クラウド プロバイダーに、インスタンスが初期化されるたびに異なる IP アドレスを取得する構成があるため、実行のたびに開発環境でいくつかの設定を変更する必要があるからです。静的なローカルホスト設定を通じて何らかの方法でガイドできれば、面倒な作業が少し楽になるのではないかと思いました。
したがって、現時点では、次のように接続でき、次のようにポート転送を追加しました。
ssh [email protected] -L2222:localhost:2222
私は次のようなことができるようになることを期待していました:
ssh luca@localhost -p 2222
しかし、これにはエラーが伴います:
ssh_exchange_identification: read: Connection reset by peer
驚きました。接続が拒否されたり、タイムアウトになったりするわけではないので、これは何らかの設定の問題なのだろうかと思います。
答え1
クラウド プロバイダーに、インスタンスが初期化されるたびに異なる IP アドレスを取得する構成があります。つまり、実行のたびに開発環境でいくつかの設定を変更する必要があります。静的なローカルホスト設定を介して何らかの方法でガイドできれば、面倒な作業が少し楽になるのではないかと考えています。
この問題を解決する一般的な方法は... DNS です。非常に低い TTL でサブドメインを作成し、再作成されるたびに新しいインスタンスを指すように A/AAAA レコードを更新します。クラウド プロバイダーによっては、これを自動化できる場合もあります。
(グローバル DNS が機能しない場合は、/etc/hosts も機能します。)
したがって、現時点では、次のように接続でき、次のようにポート転送を追加しました。
ssh [email protected] -L2222:localhost:2222
リモート サーバーは、ポート 2222 で SSH 接続をリッスンするように構成されていない可能性があります。標準ポート 22 のみに対して構成されています。したがって、必要な転送オプションは次のようになります。
-L 2222:localhost:22
これは2222
コンピュータ上で開かれるポートであり、localhost:22
サーバーが接続を試みる最終宛先です。
驚きました。接続が拒否されたり、タイムアウトになったりするわけではないので、これは何らかの設定の問題なのだろうかと思います。
SSH-L
転送は、ルーターのポート転送のようにパケットレベルでは機能しません。TCPレベルで機能します。クライアント自体接続をリッスンし、接続を受信するたびに、サーバーに最終宛先に接続するように要求します。
したがって、クライアント #2 → クライアント #1 → サーバー → 宛先という 3 つの連鎖接続が存在します。
これは、サーバーが接続に失敗した場合、クライアント#1(転送を実行)は、ローカル接続が実際に確立されているため、クライアント#2に対して「接続拒否」エラーを生成することはできないことを意味します。承認済みすでに。唯一できることは、データを転送せずに既存の接続を閉じることです。したがって、「ピアによる接続のリセット」です。