Saya ingin menyalin file dari mesin saya ke server C, tetapi hanya memiliki akses ke server C melalui server B.
Alih-alih pertama-tama mentransfer ke server B, masuk dan kemudian transfer ke server C, Apakah mungkin untuk mentransfer file secara langsung dengan SCP atau program serupa?
(Mode trac Emacs memiliki fitur ini untuk mengedit file dari jarak jauh).
Dengan asumsi OpenSSH, tambahkan ke konfigurasi SSH Anda di .ssh / config
Ini akan menyebabkan SSH dapat menghubungkan "langsung" ke mesin bernama jauh dengan proxying melalui mesin bernama dekat. Kemudian dapat menggunakan aplikasi seperti scp dan sftp ke mesin yang jauh.
Agar ini berfungsi, Anda perlu 'nc' alias netcat diinstal pada mesin yang bernama near. Tetapi banyak sistem modern sudah memilikinya.
solusi tar towo lebih efektif untuk masalah satu-shot, dengan asumsi Anda telah menghafal sintaks tar dan aturan operasi.
sumber
near
berbeda dengan nama pengguna aktifdistant
, pengguna terdekat masukProxyCommand ssh nearuser@near...
, dan pengguna jauh masuk keUser distantuser
baris terpisah .Dengan versi ssh terbaru di server dekat (B) mesin, yang berikut ini akan berfungsi tanpa netcat:
Namun itu akan membutuhkan AllowTcpForwarding menjadi yes (default) pada mesin near (B)
sunting: membutuhkan OpenSSH 5.4+ pada B
sumber
Anda dapat ssh ke server B menggunakan sesuatu seperti
Kemudian Anda dapat ssh ke server C menggunakan
Demikian pula scp akan bekerja menggunakan
Ingatlah untuk menggunakan huruf p yang benar dengan scp dan ssh
sumber
Itu mungkin dan relatif mudah, bahkan ketika Anda perlu menggunakan sertifikat untuk otentikasi (tipikal dalam lingkungan AWS).
Perintah di bawah ini akan menyalin file dari
remotePath
padaserver2
langsung ke mesin Anda dilocalPath
. Secara internal permintaan scp diproksi viaserver1
.Cara sebaliknya juga berfungsi (mengunggah file):
Jika Anda menggunakan otentikasi kata sandi, coba dengan
Jika Anda menggunakan kredensial pengguna yang sama di kedua server:
sumber
Jika Anda ingin benar-benar jahat, Anda bisa rantai ssh dan tar, semacamnya
tar c mydir | ssh server "ssh otherserver | tar x"
, tetapi ini bisa mengalami semua masalah.Cara yang lebih mudah adalah dengan membuat terowongan SSH dengan metode bawaan SSH; lihat
-D
switch di halaman manual dan teruskan beberapa port ke port ssh server lain.sumber
Anda juga dapat melakukan ini secara terbalik dan mungkin lebih mudah.
Misalkan Anda memiliki sesi ssh dibuka dengan mesin yang ingin Anda kirimi file. PC terjauh-hop ini, kita akan menyebutnya hop2 ini. Host "proxy" Anda adalah hop1. PC yang merupakan asal file, kami akan memanggil asal itu.
Anda dapat membangun terowongan yang menyediakan port lokal pada PC jarak jauh. Dengan demikian, kami menetapkan port untuk dibuka pada PC jarak jauh, yang akan menjadi pengalihan ke port yang Anda tumpangi saat membangun terowongan.
Di hop2:
Sekarang di sesi terowongan yang dibuka, Anda dapat melakukan hal yang sama dari hop1 ke file_origin.
Di hop1:
Anda sekarang terowongan dari hop2 ke hop1 ke asal. Secara kebetulan, sekarang kedua port 5555 dan 6666 terbuka pada asalnya, yang dialihkan ke port 22 hop2. Dalam sesi ini, kedua berikut adalah rute scp yang valid ke hop2:
Asal:
Dengan cara ini, Anda dapat memiliki beberapa jumlah hop yang sewenang-wenang di antaranya, dan lebih mudah untuk digunakan dalam hal merantai bersama lebih dari dua hop.
sumber
Cobalah mengadaptasi contoh berikut ini konfigurasi openssh untuk pengaturan yang dapat digunakan untuk banyak host:
Ini menganggap seperangkat server yang dimulai dengan "uat-" yang hanya dapat diakses melalui server jumpbox / gateway "bastion-uat". Anda mungkin juga ingin menambahkan
ForwardAgent yes
jika Anda menggunakan kunci untuk masuk.sumber
ForwardAgent yes
untuk ini. Penerusan agen tidak diperlukan dalam kasus ini karena tidak ada klien ssh yang akan berjalan di benteng, dan meneruskan agen ketika tidak diperlukan hanya akan mengurangi keamanan. Dan saya pikirssh
hilang dari perintah Anda. Jikassh
versi terbaru sedang digunakan yang tidak Anda butuhkannc
, Anda bisa mengetikssh -W %h:%p bastion-uat
.Ini bukan scp (yang diminta OP), tapi saya merasa sangat mudah digunakan
rsync
untuk menyalin dari lokal ke jarak jauh melalui satu hop dengan:Sumber: http://mjbright.blogspot.com/2012/09/using-rsync-over-multi-hop-ssh.html
Saya telah mencoba saran -o ProxyPass di atas dan tidak ingin mengubah konfigurasi untuk kebutuhan saya yang berubah. Seperti yang dinyatakan penulis di tautan di atas, file tujuan yang mendahului titik dua (:) penting untuk menunjukkan jalur yang ditentukan ada di server tujuan. Juga, menggunakan rsync, Anda memiliki opsi untuk membandingkan tanggal, sinkronisasi folder, dll. Saya harap ini membantu seseorang!
sumber
scp -o 'ProxyJump jumpboxname' somefilename.txt finaldhosthost: / tmp /.
sumber