2つのSSH間でSCPを実行する方法

2つのSSH間でSCPを実行する方法

私は HOME、WORK、SERVER の 3 台のコンピューターを持っており、HOME から SERVER へは次のように接続しています。

ssh -t <WORKusername>@<WORK> ssh -p23456 <SERVERusername>@localhost

する必要があるファイルをHOMEからSERVERに転送する しかし、ファイルを残しておくことはできません仕事

また、私はサーバーからホームにファイルを転送する処理した後、どうすればいいですか?

私は見てみましたhttps://serverfault.com/questions/37629/how-do-i-do-multihop-scp-transfersそして私の(3番目の)PCから2つのリモートホスト間のscpしかし、SSHの設定を変更することはできません機械

そして私はこれを試しましたが、どこにも行きませんでした:

$ scp -o ProxyCommand="ssh <WORKusername>@<WORK> nc localhost" ASPEC.zip <SERVERusername>@localhost:~/
<WORKusername>@<WORK>'s password: 
This is nc from the netcat-openbsd package. An alternative nc is available
in the netcat-traditional package.
usage: nc [-46DdhklnrStUuvzC] [-i interval] [-P proxy_username] [-p source_port]
      [-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_protocol]
      [-x proxy_address[:port]] [hostname] [port[s]]
ssh_exchange_identification: Connection closed by remote host
lost connection

次のことも試しましたが、これは SERVER -> HOME からファイルを転送する逆になります。

ssh -t <WORKusername>@<WORK> "ssh -p 23456 <SERVERusername>@localhost \"cat file.zip\""

tarも試してみましたが、うまくいきませんでした。

tar c file.zip | ssh -t <WORKusername>@<WORK> "ssh -p 23456  <SERVERusername>@localhost | tar x"
Pseudo-terminal will not be allocated because stdin is not a terminal.
<WORKusername>@<WORK>'s password: 
Pseudo-terminal will not be allocated because stdin is not a terminal.
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).
tar: This does not look like a tar archive
tar: Exiting with failure status due to previous errors

それから私は試しました:

# From home:
$ ssh -L 23456:<SERVERusername>@localhost:22 <WORKusername>@<WORK>

# After ssh, in WORK:
$ ssh -p 23456 <SERVERusername>@localhost

# From home:
$ scp -P file.zip <SERVERusername>@localhost:~/

そしてscpコマンドを実行すると、これらのエラーが発生しました。

# on WORK terminal:
channel 3: open failed: administratively prohibited: open failed

# on SERVER terminal:
ssh_exchange_identification: Connection closed by remote host
lost connection

rsyncも試しましたが、うまくいきませんでした。

rsync -e "ssh -A -t <WORKusername>@<WORK>e ssh -p23456 <SERVERusername>@localhost" file.zip :~/

HOME から scp を使用してファイルを SERVER に転送するにはどうすればよいですか?

また、サーバーからホームへもですか?

答え1

これを使ってみてください:

scp -P SERVERPORT -o 'ProxyCommand ssh -p WORKPORT WORKUSER@WORK nc %h %p 2>/dev/null' localfile SERVERUSER@SERVER:remotefile

ProxyCommandSERVER:SERVERPORTに接続しているWORKホストにプロキシを作成します(いいえ) %hおよび は%pそれぞれターゲット ホストとポートを表す ssh 変数です。

答え2

次のようなことを試してください:

cat localfile | ssh <WORKusername>@<WORK> "ssh -p23456 <SERVERusername>@localhost 'cat > remotefile'"

関連情報