Cara scp melintasi dua ssh

0

Saya memiliki tiga komputer RUMAH, BEKERJA dan SERVER dan saya terhubung dari HOME ke SERVER oleh:

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

Saya perlu mentransfer file dari HOME ke SERVER tetapi saya tidak dapat meninggalkan file dalam WORK

Saya juga perlu mentransfer file dari SERVER ke HOME setelah memprosesnya, bagaimana saya melakukannya?

Saya telah melihat https://serverfault.com/questions/37629/how-do-i-do-multihop-scp-transfers dan scp antara dua host jarak jauh dari PC (ketiga) saya, tetapi saya tidak dapat mengubah ssh config pada mesin HOME

Dan saya sudah mencoba ini tetapi saya tidak mendapat tempat:

$ 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

Saya juga sudah mencoba yang berikut tetapi ini adalah kebalikan dari mentransfer file dari SERVER -> HOME:

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

Saya juga sudah mencoba tar tetapi tidak berhasil:

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

Lalu saya mencoba:

# 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:~/

Dan saya mendapatkan kesalahan ini ketika saya memberikan perintah 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

Saya juga mencoba rsync tetapi tidak berhasil:

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

Bagaimana saya scp dari HOME untuk mentransfer file ke SERVER?

Dan juga dari SERVER ke HOME?

alva
sumber
Apakah Anda mencoba scp dari rumah ke kantor dan kemudian dari kantor ke server? Sesuatu seperti ini (dari kepala; mungkin tidak bekerja di luar kotak): scp <localfile> <workusername>@<work>:/tmp/<filename> && ssh -t <WORKusername>@<WORK> scp -P23456 /tmp/<filename> <serveruser>@localhost:/<somedirectoryontheserver>Jadi pertama-tama Anda scp untuk pekerjaan Anda dan kemudian Anda memberikan (via ssh) perintah ke komputer kerja Anda untuk scp lebih jauh ke server. Meskipun saya bingung mengapa Anda terhubung ke server melalui localhost. Apakah server virtual di komputer kantor Anda? Jika berhasil, saya akan mentransfernya ke bagian jawaban.
agtoever

Jawaban:

3

Coba gunakan ini:

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

ProxyCommandbuat proxy di WORK host yang terhubung ke SERVER: SERVERPORT (lihat nc ). %hdan %pmerupakan variabel ssh - host target dan port masing-masing.

go1dshtein
sumber
terima kasih itu berhasil tetapi bagaimana saya melakukan kebalikan dari SERVER ke HOME?
alvas
cara yang sama, hanya swap SERVERUSER@SERVER:remotefiledan localfile, seperti:scp -P SERVERPORT -o 'ProxyCommand ssh -p WORKPORT WORKUSER@WORK nc %h %p 2>/dev/null' SERVERUSER@SERVER:remotefile localfile
go1dshtein
Saya mendapatkan ssh_exchange_identification: Connection closed by remote hostketika mentransfer dari HOME ke SERVER = (
alvas
ah kesalahan ketik, sekarang berhasil, woohoo !! Terima kasih banyak!!!!
alvas
0

Anda dapat mencoba sesuatu seperti:

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