中間サーバーにsftpする必要がありますか?


11

特定のホストに直接sftpできません。ホームマシンからホストにファイルを移動するには、中間ホストにファイルをsftpする必要があります。中間ホストへのssh。ファイルを最終的な宛先にsftpします。そのような狂気を避けることは可能ですか?

回答:


28

ローカルマシンから、中間ホストから最終ホストへのam SSHトンネルを作成できます。

ssh user@intermediate -L 2000:final:22 -N

これにより、中間ホストをトンネリングすることで、ポート22で最終サーバーに直接接続するローカルホストでポート2000が開きます。ここで、別のプロンプトでポート2000でsftpに接続し、最終サーバーにトンネリングします。ここで指定したユーザーは最終ホスト用です。

sftp -P 2000 user@localhost

ただし、これはsuperuser.comまたはserverfault.comに属しているようです。


おかげで、私はそれを試してみます。そしてあなたは正しい、それは間違ったフォーラムです。ごめんなさい。

user @ localhostパスワードを入力した後、次のメッセージを受け取りました。受信したメッセージが長すぎます1131376238
user74094

14

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キーペアでも削除できます...


ありがとう、ゴードン。両方のパスワードを受け取り、メッセージで停止します。受信したメッセージが長すぎます1131376238
user74094

接続内の何か-ホストの1つでのログインスクリプト、またはnc-が sftpを混乱させる追加のテキストを書き込んでいるようです(snailbook.comのこのFAQを参照)。1131376238はASCII文字「Conn」の10進エンコードであるため、おそらく「Connecting to ...」、「Connected from ...」、または「Connection failed」のようなメッセージです。sftpの代わりにsshで試してみてください。メッセージが目に見える形で印刷されているかどうかを確認してください。
ゴードンデイヴィソン

sshは問題なく動作しました。また、この質問に頻繁に直面することにも言及する必要があります:ホスト 'xxxxx(<プロキシコマンドのhostipなし)'の信頼性は確立できません。RSAキーフィンガープリントは37:40:d4:c7:etcです。接続を続行してもよろしいですか(yes / no)?はい
-user74094

ゴードン、とても便利!これをコマンドラインfu onelinersのテキストファイルに追加しています。トンありがとう!
トラビスレリュー

であるexec必要?(ここでは、その部分がなくても正常に動作します。)
equaeghe

3

マシンで実行中のsshプロセスにデータをパイプし、中間マシンでコマンドを実行して、stdinを読み取り、必要に応じてsftpに送信できます。

ローカルマシンのワンライナーでこれを行うことができますが、sshへの引数の引用には注意が必要です。私は今すぐ電話にいるので、残念ながら詳細を入力することはできません。おそらく他の誰かがこの答えを演習として完了することができるでしょう!


0

最終的なホストはファイアウォールで保護されており、それを回避するために使用できる方法しか推測できません。

たとえば、ローカルマシンからsshを公開し、最初のホストにsshを公開し、2番目のホストにsshを公開し、最終ホストからマシンにsftpを公開します。


0

AとBが最初と2番目のホストだとしましょう。コピーされるファイルはfooです

sftpの代わりに、次を使用できます

猫フー| ssh A "cat-> foo"

これで、これらのうち2つをデイジーチェーン接続できます

猫foo | ssh A "cat-| ssh B \" cat-> foo \ ""


気に入ったので、試してみました。Aのパスワードを取得し、メッセージを生成しました:ホストキーの検証に失敗しました。
user74094
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.