scp antara dua server tidak di jaringan yang sama


13

Ada dua server yang dapat saya akses dengan 2 koneksi VPN yang berbeda. Saya telah berhasil membuat kedua VPN bekerja pada waktu yang sama pada mesin saya (sedikit aturan routing).

Saya ingin melakukan scp <remote1>:some/file <remote2>:destination/folderdari terminal laptop saya. Tetapi ketika saya mencoba ini, scpperintah yang dipanggil pada remote1 tidak dapat menemukan remote2 karena mereka tidak di jaringan yang sama. Apakah mungkin untuk memaksa scpperintah untuk melewati laptop saya sebagai router?

Jika saya mencoba dengan Nautilus (terhubung ke server, kedua server, lalu salin-tempel) berfungsi, tapi saya ingin melakukannya dari terminal.


Mesin Anda yang menghubungi keduanya, remote1 dan remote2 . Apakah Anda yakin kesalahannya adalah remote1 tidak dapat mengakses remote2 ?
Jan

Ya, kesalahannya adalah ssh: Tidak dapat menyelesaikan nama host <remote2>: Nama atau layanan tidak dikenal kehilangan koneksi
Danduk82

Dan jika saya mencoba menggunakan alamat IP secara langsung untuk <remote2> koneksi gagal setelah beberapa saat (hangout).
Danduk82

Maka saya kira itu mesin Anda yang tidak dapat terhubung ke remote2 . Mungkin VPN koneksi kali keluar atau flakey ...
Jan

Tidak berfungsi, bahkan DNS berfungsi. Saya benar-benar merasa bahwa perintah scp mencoba untuk mengeksekusi koneksi antara remote1 dan remote2 secara langsung pada remote1 .
Danduk82

Jawaban:


34

Versi scp yang lebih baru memiliki opsi -3

-3

Copies between two remote hosts are transferred through the local host. Without this option the data is copied directly between the two remote hosts

Bagus! Apa yang saya butuhkan. Terima kasih banyak
Danduk82

1
Great ditemukan, saya tidak tahu itu!
Jan

9

Jika Anda membutuhkan lebih banyak fleksibilitas daripada scp -3, dataran sshdan pipa itu menyenangkan.

Ini sama dengan mengarahkan aliran melalui mesin lokal:

ssh sourceRemote 'cat /path/to/sourceFile' \
| ssh destinationRemote 'cat > /path/to/destinationFile'

Anda kemudian dapat menambahkan lebih banyak pengalihan aliran di titik mana pun, misalnya rantai beberapa mesin perantara, atau menyimpan salinan lokal dari file yang ditransfer saat sedang dirutekan.


2
Anda akan mendapatkan bilah progres yang bagus jika mesin sumber telah pvdiinstal dan Anda mengganti yang pertama catdengannya.
liori

6

Memperluas jawaban @ Anko, Anda dapat menggunakan tarbeberapa file:

ssh -q user@sourcehost 'cd /source/path; tar -czf - files...' | \
ssh -q user@desthost 'cd /dest/path; tar -xzf -'

Mengompresi sepenuhnya opsional - data Anda mungkin tidak terlalu kompresif atau cukup besar untuk menjamin overhead. Jika versi tarAnda tidak mendukung -zswitch, pipa melalui gzip -cdan gzip -dcmasing - masing.

PS: Waspadalah versi taryang tidak menghapus garis miring pada ekstraksi (yaitu, menulis ke nama path absolut jika disediakan).

Sunting: -e nonetidak diperlukan dengan pipa, karena pseudo-terminal tidak dialokasikan.


1
sshmemiliki -Cbendera untuk mengaktifkan kompresi aliran. Menurut manhalaman, menggunakan algoritma yang sama seolah- gzipolah. Halaman manual juga membantu menjelaskan kapan harus menggunakannya: "Kompresi diinginkan pada jalur modem dan koneksi lambat lainnya, tetapi hanya akan memperlambat segalanya pada jaringan cepat."
Anko

4
@Anko, masalah dengan menggunakan di -Csini adalah bahwa mesin lokal harus mengompres dan mengkompres ulang data. Memberitahu taruntuk melakukan kompresi berarti bahwa data terkompresi dilewatkan langsung melalui pipa tanpa pemrosesan
cjm
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.