私は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する適切な方法は何ですか?
ありがとう、-
これはすでに最高の回答 ここ です。
要約すると、以下を~/.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に送信する必要があります。
SSHトンネルを設定するには、次の形式を使用します。
ssh -L 9999:Host2:22 user@Host1
このコマンドはHost1
にuser
として接続し、Host2
のポート22にコマンドを発行するコンピューターのポート9999をトンネルします。 -N
はオプションですが、必要に応じて、top
やwatch
などを使用して、セッションを存続させることができます。
次に、単純にscp
をlocalhost:9999のHost2に送信します。
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:~
次のように、最初にファイルをHost1にscpできます。
scp file dalvarado@Host1:.
次に、これを実行してHost2に取得します。
ssh -t dalvarado@Host1 'scp file dalvarado@Host2:.'
-t
オプションをssh
に指定すると、強制的に疑似端末が割り当てられます。これにより、Host1のscp
がパスフレーズ/パスワードを要求するのが簡単になります。すべての場所でssh-agentを実行および構成している場合は、パスフレーズ/パスワードの入力を求められるべきではありません。
私がこの代替案を提供するのは、トンネルを使用した場合でも、2つのコマンドが必要になるためです。1つはトンネルをセットアップするためのコマンドで、もう1つはトンネルを介してファイルをコピーするためのコマンドです。これはもっと簡単に思えます。