Mengingat Anda memiliki sshd
berjalan di mesin lokal Anda, itu mungkin dan Anda tidak perlu mengetahui alamat IP keluar Anda. Jika penerusan port SSH diaktifkan, Anda dapat membuka terowongan aman bahkan saat Anda sudah membuka koneksi ssh, dan tanpa menghentikannya.
Asumsikan Anda memiliki koneksi ssh ke beberapa server:
local $ ssh [email protected]
Password:
remote $ echo abc > abc.txt # now we have a file here
Oke sekarang kita perlu menyalin file itu kembali ke server lokal kita, dan untuk beberapa alasan kita tidak ingin membuka koneksi baru. Oke, mari dapatkan baris perintah ssh dengan menekan Enter ~C
(Masukkan, lalu tilde, lalu kapital C):
ssh> help
Commands:
-L[bind_address:]port:host:hostport Request local forward
-R[bind_address:]port:host:hostport Request remote forward
-D[bind_address:]port Request dynamic forward
-KR[bind_address:]port Cancel remote forward
Itu seperti -L/R/D
biasa pilihan. Kami membutuhkan -R
, jadi kita menekan Enter ~C
lagi dan ketik:
ssh> -R 127.0.0.1:2222:127.0.0.1:22
Forwarding port.
Di sini kami meneruskan port server jarak jauh 2222 ke port 22 mesin lokal (dan di sinilah Anda memerlukan server SSH lokal untuk dimulai pada port 22; jika mendengarkan di beberapa port lain, gunakan itu alih-alih 22).
Sekarang jalankan saja scp
pada server jarak jauh dan salin file kami ke port server jarak jauh 2222 yang dipetakan ke port 22 mesin lokal kami (di mana sshd
lokal kami sedang berjalan).
remote $ scp -P2222 abc.txt [email protected]:
[email protected]'s password:
abc.txt 100% 4 0.0KB/s 00:00
Kita selesai!
remote $ exit
logout
Connection to example.com closed.
local $ cat abc.txt
abc
Rumit, tapi jika Anda benar-benar tidak bisa jalankan saja scp
dari terminal lain, bisa membantu.
Saya menemukan solusi satu baris di SU ini jauh lebih mudah daripada jawaban yang diterima. Karena menggunakan variabel lingkungan untuk alamat IP lokal, menurut saya ini juga memenuhi permintaan OP untuk tidak mengetahuinya sebelumnya.
berdasarkan itu, inilah fungsi bash untuk "Mengunduh" file (yaitu mendorong dari sesi SSH ke lokasi yang ditetapkan di mesin lokal)
function dl(){
scp "$1" ${CLIENT_IP%% *}:/home/<USER>/Downloads
}
Sekarang saya cukup memanggil dl somefile.txt
sementara SSH masuk ke remote dan somefile.txt
muncul di folder Unduhan lokal saya.
tambahan:
- Saya menggunakan kunci rsa (ssh-copy-id) untuk menyiasati permintaan kata sandi
- Saya menemukan trik ini untuk mencegah bashrc lokal bersumber dari panggilan scp
Catatan:ini memerlukan akses SSH ke mesin lokal dari jarak jauh (apakah ini sering terjadi pada siapa saja?)