web-dev-qa-db-ja.com

中間サーバーを介してファイルをSCPするにはどうすればよいですか?

私はWinXP(bashシェル)でCcygwinを使用しています。ローカルホストからリモートマシンにファイルをSCPしたい-Host2。ただし、SSHを実行できるのは中間マシンのHost1のみで、そこからSSHでHost2に接続できます。 (注意:私は自分のローカルホストからHost2にアクセスできません)。

トンネリングが私の答えだと思ったが、トンネルを設定しようとしたとき

ssh -L 9999:localhost:9998 dalvarado@Host1 'ssh -L 9998:localhost:1234 -N dalvarado@Host2'

しかし、このコマンドを入力してEnterキーを押すと、システムがハングします。トンネルをセットアップしてからファイルをSCPする適切な方法は何ですか?

ありがとう、-

15
Dave

これはすでに最高の回答 ここ です。

要約すると、以下を~/.ssh/configに入れます

Host target.machine
User          targetuser
HostName      target.machine
ProxyCommand  ssh [email protected] nc %h %p 2> /dev/null

そして、proxy.machine経由でプロキシしたいときはいつでもscpをtarget.machineに単純に!

sshでも機能するため、ターゲットマシンへのsshの実行時間も節約できます。

クレジットは、2011年にこれに回答したuser24925に送信する必要があります。

18
jmetz

SSHトンネルを設定するには、次の形式を使用します。

ssh -L 9999:Host2:22 user@Host1

このコマンドはHost1userとして接続し、Host2のポート22にコマンドを発行するコンピューターのポート9999をトンネルします。 -Nはオプションですが、必要に応じて、topwatchなどを使用して、セッションを存続させることができます。

次に、単純にscpをlocalhost:9999のHost2に送信します。

13
Rain

OpenSSH 7. なので、-Jまたは-o ProxyJumpを使用して、要塞/ジャンプホストを指定できます。したがって、node2を介してnode1にSSHで接続するには:

ssh -J you@node1 you@node2

SCPには-J引数はありませんが、-oは許可されるため、これは機能します。

scp -o ProxyJump=you@node1 file.txt you@node2:~
6
ZiggyTheHamster

次のように、最初にファイルをHost1にscpできます。

scp file dalvarado@Host1:.

次に、これを実行してHost2に取得します。

ssh -t dalvarado@Host1 'scp file dalvarado@Host2:.'

-tオプションをsshに指定すると、強制的に疑似端末が割り当てられます。これにより、Host1のscpがパスフレーズ/パスワードを要求するのが簡単になります。すべての場所でssh-agentを実行および構成している場合は、パスフレーズ/パスワードの入力を求められるべきではありません。

私がこの代替案を提供するのは、トンネルを使用した場合でも、2つのコマンドが必要になるためです。1つはトンネルをセットアップするためのコマンドで、もう1つはトンネルを介してファイルをコピーするためのコマンドです。これはもっと簡単に思えます。

3
Fran