Bagaimana cara SCP file melalui server perantara?

15

Saya menggunakan Ccygwin di WinXP (dengan bash shell). Saya ingin SCP file dari localhost saya ke mesin remote - host2. Namun, saya hanya bisa SSH ke mesin perantara - host1, dan kemudian dari sana SSH ke host2. (Catatan, saya tidak dapat mengakses host2 dari localhost saya).

Saya pikir tunneling adalah jawaban saya, tetapi ketika saya mencoba membuat tunnel

ssh -L 9999:localhost:9998 dalvarado@host1 'ssh -L 9998:localhost:1234 -N dalvarado@host2'

Tetapi setelah mengetik perintah ini dan menekan enter, sistem hanya hang. Apa cara yang tepat untuk menyiapkan terowongan dan kemudian SCP file setelah?

Terima kasih, -

Dave
sumber
2
Gandakan superuser.com/questions/174160/… - lihat jawaban saya di bawah untuk ringkasan.
jmetz
Dari pengguna Meir D : Lihat juga serverfault.com/questions/337274/…
fixer1234
Kemungkinan duplikat file scp melalui host perantara
tripleee

Jawaban:

17

Ini sudah dijawab terbaik di sini .

Untuk meringkas: masukkan berikut ini ~/.ssh/config

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

dan kemudian sederhana scp ke target.machine kapan saja Anda ingin proxy melalui proxy.machine!

Juga berfungsi untuk ssh , jadi akan menghemat waktu Anda juga untuk mesin target.

Kredit harus diberikan kepada pengguna24925 yang menjawab ini pada 2011.

Jmetz
sumber
13

Untuk mengatur terowongan SSH, gunakan format berikut:

ssh -L 9999:host2:22 user@host1

Perintah ini terhubung ke host1as userdan tunnel port 9999 di komputer yang mengeluarkan perintah ke port 22 on host2. -Nbersifat opsional, atau Anda dapat menggunakan sesuatu seperti topatauwatch untuk menjaga sesi tetap hidup jika diperlukan.

Kemudian, cukup scpdengan host2 di localhost: 9999.

Hujan
sumber
1
Ketika saya menjalankan perintah ini, apakah saya seharusnya login ke host1? Juga, setelah menjalankan perintah ini, saya membuka bash shell lain, dan menjalankan "scp hello.txt localhost: 9999", tetapi mendapat "ssh: terhubung ke host localhost port 22: Koneksi ditolak" kesalahan. Apa yang saya lakukan salah di sini?
Dave
3
Ketika Anda menjalankan perintah ini, Anda akan terhubung ke host1, ya. scpSintaks perintah Anda salah. Coba ini di scp -P 9999 hello.txt user@localhost:/path/to/destination/filemana userpengguna di host2mana Anda ingin login.
Hujan
1
@ Rain, Anda bisa memberikan contoh ini di jawaban utama;)
dmeu
5

Sejak OpenSSH 7.3 , Anda dapat menggunakan -Jatau -o ProxyJumpuntuk menentukan host bastion / jump. Oleh karena itu, ke SSH node2melalui node1:

ssh -J you@node1 you@node2

SCP tidak memiliki -Jargumen, tetapi itu memungkinkan -o, jadi ini berfungsi:

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

Pertama-tama Anda dapat scp file ke host1, seperti ini:

scp file dalvarado@host1:.

Kemudian lakukan ini untuk mendapatkannya ke host2:

ssh -t dalvarado@host1 'scp file dalvarado@host2:.'

The -tpilihan untuk sshpasukan itu untuk mengalokasikan pseudo-terminal, yang dapat membuat lebih mudah bagi scppada host1 untuk meminta Anda untuk passphrase / password. Jika Anda memiliki ssh-agent yang berjalan dan terkonfigurasi di mana-mana, Anda tidak akan diminta untuk frasa sandi / kata sandi.

Saya menawarkan alternatif ini, karena jika Anda menggunakan sebuah terowongan, Anda masih memerlukan dua perintah: satu untuk mengatur terowongan dan satu untuk menyalin file melaluinya. Ini sepertinya lebih sederhana.

Fran
sumber
Solusi yang fantastis !!!
Riccardo