複数のSSH接続ファイルを処理するときに発生する一般的な問題

複数のSSH接続ファイルを処理するときに発生する一般的な問題

最初のSSH接続を介して直接アクセスできないファイルをダウンロードする必要があることがよくあります。たとえば、私はWindowsコンピュータを使用していますが、LAN経由でのみアクセスできる他のコンピュータにアクセスしたいと思います。これは、まず中間マシンに接続し、次のマシンにSSHを接続する必要があることを意味します。

最初のシステムでファイルが利用可能な場合は、pscpを使用して簡単に取得できます。この状況でSSHポート転送を使用できますか?

答え1

私は.ssh/config次の定義を追加します:

Host SERVER-A
    ProxyCommand ssh SERVER-B nc -q0 %h %p 2> /dev/null

sshその後、通常の方法でorを使用してください。scp

ssh user@SERVER-A

または

scp file.tar.gz user@SERVER-A:~

SERVER-Aこれらの構成は、SSHライブラリへの接続を確立したときに検出されます。接続するには、いくつかのプロキシコマンドを使用する必要があることをsshに伝えます。プロキシコマンドは、プロキシコマンドのすべての出力を指定されたポート、その定義、およびパラメータの指定されたサーバーに渡すコマンド(netcat)を接続しSERVER-Bて実行します。nc%h%p

この構造により、鍵認証を使用することもできます。 2つのサーバーのクライアントコンピュータから公開コンテンツをコピーしたばかりSERVER-AですSERVER-B

このタイプの構成は、SSHライブラリ( GUIクライアントrsyncなどsftp)を使用する他のアプリケーションとも互換性があります。

答え2

はい、この場合はSSHポート転送を使用できますが、これを試みると無効なホストキーまたは無効なホストキーに関する警告が表示されることがあります。 OpenSSHなどの一部のSSHクライアントは、ドメインまたはIPごとにSSHホストキーのみを追跡し、ポート番号は含まれません。 PuTTYはホストキーを使用してポート番号を記録しているように見えますが、各ホストで使用されるポート番号と一貫性がある限り、この問題は発生しません。 PuTTYに保存されているセッションにポート転送を追加することをお勧めします。その後、別のセッションを保存されたセッションとしてさまざまなリモートホストに保存し、pscp / psftpで使用することもできます。 2220など、高い番号のポートで転送を開始し、中間ホストを介して転送する必要がある各ホストについて、そのポートで1ずつ増やすことができます。intermediateリモートホストのポート2220と宛先、宛先があるポートなど、ローカルポート転送に保存されているセッションに追加し、宛先とremote1:22SSHポートを持つセッションと、宛先とSSHポートを持つセッションのセッションを作成します。ホストのpcsp / psftpセッションが使用されます。2221remote2:22remote1remote2remote1localhost2220remote2localhost2221@session-name

この問題は、SSH ホスト キーを何らかの方法で localhost に接続し、別のコンピュータに転送されるローカル ポートに接続しようとしたときに発生します。 OpenSSHではHostKeyAlias~/.ssh/config次のように項目を追加しました。

Host intermediate
HostName intermediate.example.org
LocalForward 2220 remote1.example.org:22
LocalForward 2222 remote2.example.org:22

Host remote1
HostName localhost
Port 2220
HostKeyAlias remote1.example.org

Host remote2
HostName localhost
Port 2221
HostKeyAlias remote2.example.org

しかし、私が好む解決策は、家庭や職場のネットワークにIPv6を展開して、最終的な宛先に到達するために中間サーバーに接続することを心配する必要がなくなることです。

答え3

中間システムをプロキシとして使用できます。それがあることを確認してくださいインターネット猫( nc)インストールする。次の行を入力します~/.ssh/configfooは、接続できないシステムの別名、銀メディエーションfoo.example.comシステムに表示される名前、銀メディエーションgateway.example.comシステム)。

Host foo
HostName foo.example.com
ProxyCommand ssh gateway.example.com nc %h %p

その後、ssh foo接続できないシステムに接続します(2つのホップを介して行われますが、これは完全に透明です)。

答え4

gelraenの答えに従ってください。

つまり.ssh/config、開いているトンネルを介してTCP転送のみを実行する特定の仮想ホスト名に対してプロキシコマンドを設定します。

Host imag
ProxyCommand socat - tcp-connect:localhost:2022

ssh imagその後、トンネルが機能したら、を使用してserver-b:22に接続できます。

socatこれが私が使ったもので、うまくいくnetcatでしょう。 ;)

1つの興味深い点ProxyCommandは、環境変数を挿入することです。だから...一度試してみてください。

関連情報