Saya punya dua mesin, Client dan Server.
Klien (yang berada di belakang firewall perusahaan) membuka terowongan SSH terbalik ke Server, yang memiliki alamat IP yang dapat diakses secara publik, menggunakan perintah ini:
ssh -nNT -R0: localhost: 2222 [email protected]
Dalam OpenSSH 5.3+, yang 0
terjadi tepat setelah -R
cara "memilih port yang tersedia" daripada secara eksplisit memanggilnya. Alasan saya melakukan ini adalah karena saya tidak ingin memilih port yang sudah digunakan. Sebenarnya, sebenarnya ada banyak Klien di luar sana yang perlu mengatur terowongan serupa.
Masalahnya pada saat ini adalah bahwa server tidak tahu Klien mana yang mana. Jika kita ingin terhubung kembali ke salah satu Klien ini (via localhost) lalu bagaimana kita tahu port mana yang merujuk ke klien mana?
Saya sadar bahwa ssh melaporkan nomor port ke baris perintah ketika digunakan dengan cara di atas. Namun, saya juga ingin menggunakan autossh untuk menjaga sesi tetap hidup. autossh menjalankan proses turunannya melalui fork / exec, mungkin, sehingga output dari perintah ssh yang sebenarnya hilang dalam eter.
Selain itu, saya tidak bisa memikirkan cara lain untuk mendapatkan port jarak jauh dari Klien. Jadi, saya bertanya-tanya apakah ada cara untuk menentukan port ini di Server.
Satu ide yang saya miliki adalah entah bagaimana menggunakan / etc / sshrc, yang seharusnya merupakan skrip yang berjalan untuk setiap koneksi. Namun, saya tidak tahu bagaimana orang bisa mendapatkan informasi terkait di sini (mungkin PID dari proses sshd tertentu yang menangani koneksi itu?) Saya ingin beberapa petunjuk.
Terima kasih!
sumber
Jawaban:
Bukankah VPN lebih tepat? OpenVPN sangat mudah dikonfigurasi. Berikut adalah contoh konfigurasi dan beberapa tautan untuk memandu Anda melalui proses pembuatan sertifikat:
Kemudian buat file baru
/etc/openvpn/client_server.conf
dan letakkan yang berikut di dalamnya, ubahSERVER_IP_ADDRESS
seperlunyaKemudian buat kunci per pengguna yang akan terhubung, dan buat file konfigurasi di direktori ccd
Alamat IP HARUS cocok untuk subnet / 30 (lihat http://www.subnet-calculator.com/cidr.php ), karena hanya ada 2 alamat yang tersedia (server dan klien) per koneksi. Jadi IP klien Anda yang tersedia berikutnya adalah 192.168.100.6 dan seterusnya.
Maka sekarang Anda memiliki IP statis per pengguna yang terhubung.
Kemudian berikan
the [email protected]
file ke pengguna akhir dan gunakan file konfigurasi berikutsumber
ifconfig-push 192.168.100.2 192.168.100.3
- Saya tidak tahu mengapa ini berbeda pada platform. Dan ya, itu berarti 4 IP digunakan per klien (boros, tetapi sifat binatang).Jika masing-masing klien memiliki nama pengguna yang berbeda, Anda dapat menggunakan
netstat
untuk mengetahui port apa yangsshd
didengarkan oleh proses pengguna . Sebagai contoh:sumber
Anda bisa mengubah rentang port sementara (
/proc/sys/net/ipv4/ip_local_port_range
untuk Linux) dan kemudian menggunakan port yang dialokasikan secara statis di luar rentang itu.sumber
echo $[61002+RANDOM%4532]
untuk memilih nomor port dalam kisaran itu.Saya ingin pengaturan yang sama seperti Anda, saya meningkatkan level log dari server SSH ke DEBUG, dan itu menunjukkan di log apa yang merupakan port lokal klien
sebagai contoh:
perintah klien:
ssh -N -R0:127.0.0.1:5522 [email protected]
log server:
di sana Anda melihat nomor port
sumber
Anda harus dapat mengekstraksi informasi yang relevan dari output:
Jalankan sebagai root.
sumber
Jalankan skrip ini di server:
Anda mungkin atau mungkin tidak membutuhkan dua sudo itu. Hapus jika Anda tidak.
PS - Ini adalah versi modifikasi dari solusi yang saya temukan di tempat lain beberapa waktu lalu. Saya pikir itu mungkin berasal dari StackOverflow, tetapi saya tidak dapat menemukan referensi aslinya.
sumber