回答:
ローカルマシンから、中間ホストから最終ホストへのam SSHトンネルを作成できます。
ssh user@intermediate -L 2000:final:22 -N
これにより、中間ホストをトンネリングすることで、ポート22で最終サーバーに直接接続するローカルホストでポート2000が開きます。ここで、別のプロンプトでポート2000でsftpに接続し、最終サーバーにトンネリングします。ここで指定したユーザーは最終ホスト用です。
sftp -P 2000 user@localhost
ただし、これはsuperuser.comまたはserverfault.comに属しているようです。
SFTPのProxyCommandオプションを使用して、SFTP接続を介してSFTP接続を透過的にトンネリングできます(WhiteFang34の回答に少し似ていますが、転送されたローカルTCPポートではなく、SSH接続のstdin&stdoutを介します)。
sftp -o "ProxyCommand=ssh -e none user@intermediatehost exec /usr/bin/nc %h %p 2>/dev/null" user@finalhost
(つまり、中間ホストにnetcatが/ usr / bin / ncとしてインストールされていると仮定します-そうでない場合は、TCPセッションにstdin&stdoutをゲートウェイする同等の方法を見つけてインストールする必要があります。)
このオプションの素晴らしい点は、〜/ .ssh / configファイルに追加できることです。これにより、透過的になります。
Host finalhost
ProxyCommand ssh -e none user@intermediatehost exec nc %h %p 2>/dev/null
そのエントリを使用して、sftp、scp、およびsshを使用してfinalhostを実行すると、トンネルが自動的に呼び出されます。唯一の非透過部分は、2つのパスワード(中間ホストと最後のホスト)のプロンプトが表示されることですが、必要に応じてSSHキーペアでも削除できます...
exec
必要?(ここでは、その部分がなくても正常に動作します。)
最終的なホストはファイアウォールで保護されており、それを回避するために使用できる方法しか推測できません。
たとえば、ローカルマシンからsshを公開し、最初のホストにsshを公開し、2番目のホストにsshを公開し、最終ホストからマシンにsftpを公開します。
AとBが最初と2番目のホストだとしましょう。コピーされるファイルはfooです
sftpの代わりに、次を使用できます
猫フー| ssh A "cat-> foo"
これで、これらのうち2つをデイジーチェーン接続できます
猫foo | ssh A "cat-| ssh B \" cat-> foo \ ""