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, -


2
Gandakan superuser.com/questions/174160/… - lihat jawaban saya di bawah untuk ringkasan.
jmetz


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 proxyuser@proxy.machine 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.


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.


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

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.


Solusi yang fantastis !!!
Riccardo
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.