Saya tahu ini adalah jawaban yang terlambat, tetapi saya baru tahu cara keren untuk melakukan ini. Ini pada dasarnya adalah jawaban Holger Just, tetapi dalam file konfigurasi yang disimpan:
Anda harus meletakkan ini di ~/.ssh/config
file Anda di local.machine, (membuat file jika tidak ada)
Host target.machine
User targetuser
HostName target.machine
ProxyCommand ssh [email protected] nc %h %p 2> /dev/null
Setelah menyimpan file, Anda bisa menggunakannya
ssh target.machine
kapan saja Anda ingin terhubung. Scp juga akan berfungsi karena ia juga menghormati file konfigurasi ssh. Begitu juga Nautilus, jika Anda menggunakan GNOME dan ingin menggunakan GUI.
Host proxy.machine
baris dalam~/.ssh/config
file yang sama , 2) Sebutkan apakah perintah ini dapat disarangkan (mis. Klien terhubung ke proxy host 1 yang menghubungkan ke proxy host 2 yang terhubung ke. ..target) dan 3) apanc %h %p
artinyaAnda dapat melakukannya dalam satu perintah, tetapi Anda perlu netcat (nc) diinstal pada mesin proxy:
[EDIT: campur aduk urutan mesin ...]
sumber
Anda sekarang dapat * melakukan ini sebagai satu-liner, tanpa memerlukan
nc
tempat:Penjelasan
pcreds
dantcreds
mewakili proxy dan sasaran kredensial Anda jika diperlukan (username
,username:password
, dll).Ini dimungkinkan karena built-in seperti netcat-like, menghilangkan persyaratan untuk
nc
host perantara. Menggunakanssh -W host:port
set up tunnel ke host dan port yang ditentukan dan menghubungkannya ke stdin / stdout, dan kemudianscp
berjalan di atas tunnel.The
%h
dan%p
diProxyCommand
diganti dengan host target dan port yang Anda tentukan.Untuk kenyamanan lebih, Anda dapat mengonfigurasi proxy di konfigurasi ssh Anda:
dan sejak saat itu lakukan saja
* sejak OpenSSH 5.4 - dirilis Maret 2010
sumber
-p <portnum>
sebelum-W
dalam metode mana pun untuk menentukan port proxyJika Anda tidak keberatan menggunakan rsync daripada scp, Anda dapat menggunakan satu-baris berikut:
(Anda akan memerlukan akses tanpa kata sandi ke mesin proxy)
sumber
Oke, sebenarnya dua perintah ...
sumber
8080
-p <portnumber>
ke perintah ssh AndaSatu kalimat? Bukan dari atas kepalaku. Anda harus membuat proxy terlebih dahulu dan Anda tidak dapat melakukannya dengan scp dengan sendirinya.
Ketika melakukannya secara manual, saya membuka sesi layar untuk terowongan saya:
screen -S tunnel
Layar digunakan untuk menjaga terowongan tetap berada di shell latar belakang. Gunakan teknik apa pun yang Anda inginkan agar terowongan tetap terbuka di latar belakang (jawaban @ weeheavy mungkin yang paling sederhana). Sekali dalam sesi layar saya memulai terowongan saya seperti itu
ssh -L 2222:target.machine:22 [user@]proxy.machine
Untuk memecahnya, yang pada dasarnya mengatakan "Pada mesin lokal saya, buka port 2222 dan koneksi yang mengenai localhost: 2222 diproksikan melalui proxy.machine ke target.machine: 22"
Setelah koneksi ssh dan terowongan terbentuk, lepaskan dari sesi layar dengan "Ca d". Untuk kembali ke sesi layar itu, ketik
screen -raAd tunnel
Setelah Anda kembali ke shell asli, perintah scp Anda akan terlihat seperti
scp -P 2222 localhost:your/file/on/target.machine local/path
Ingatlah bahwa localhost port 2222 sebenarnya hanyalah sebuah terowongan yang akan menuju target.machine.
sumber
Muncul bahwa scp mendukung opsi "-o" sama seperti ssh, meskipun saya tidak yakin bagaimana cara melewatinya nama pengguna / kata sandi proxy:
Jika Anda
nc: invalid option -- X
melihat https://stackoverflow.com/a/23616021/32453sumber
Bagaimana tentang:
sumber
Anda dapat mencoba sesuatu seperti:
Tapi itu tidak akan berfungsi jika proxy.machine Anda perlu meminta kata sandi Anda (SSH itu tidak ada dalam TTY, jadi askpass akan gagal).
Jika Anda memiliki lebih dari satu file, Anda dapat menggunakan tar seperti ini (belum diuji, saya biasanya menggunakan netcat seperti itu):
sumber
Solusi sederhana lain untuk mentransfer source_file dari source_host ke destination_host melalui proxy_host :
Masuk di proxy_server :
Dari server proxy, transfer source_file dari source_host ke destination_host (Anda dapat mengetik ini sebagai satu baris, menghilangkan
\
, atau dua baris, seperti yang ditunjukkan di bawah ini):Ini mensyaratkan bahwa login di source_host ke proxy_host menggunakan rsa_key.
sumber
Jika Anda perlu menggunakan kunci publik, Anda akan membutuhkan sesuatu seperti ini.
sumber
Saya mengikuti artikel ini dan menemukan jawaban yang cocok untuk saya. (Karena jawaban di atas tidak bekerja untuk saya).
Bagaimana caranya
scp
cara file melalui host perantara (alias host melompat) http://mperdikeas.github.io/networking.html.files/scp-a-file-through-jump-host.htmlDan jawaban saya adalah sebagai berikut:
Contoh:
Saya harap jawaban ini dapat membantu Anda.
sumber