Terowongan SSH sangat membingungkan saya. Saya bertanya-tanya apakah saya bisa melakukan ini di Linux.
Saya punya 3 mesin ..
A. My local machine at home.
B. Machine at work that I can SSH into (middle man).
C. My desktop at work that I can only SSH into from machine B.
Jadi saya bisa SSH dari A -> B dan dari B -> C, tetapi tidak dari A -> C.
Apakah ada cara untuk mengatur terowongan SSH dari A hingga B, jadi ketika saya menjalankan perintah SSH lainnya, mereka hanya bekerja dari mesin lokal saya A? Saya pada dasarnya mencoba untuk mengkloning git repo dari kantor ke rumah (dan saya tidak dapat menginstal git pada mesin B).
Juga, setelah pengaturan .. Bagaimana saya akan menghapusnya juga?
Jawaban:
Tempatkan ini di
.ssh/config
file Anda di hostA (lihat man 5 ssh_config untuk detailnya):Sekarang perintah berikut akan secara otomatis melakukan tunnel melalui hostB
Anda mungkin ingin menambahkan opsi suka
-oCiphers=arcfour
dan-oClearAllForwardings=yes
mempercepat, karena membungkusssh
di dalamssh
lebih mahal secara komputasi dan upaya ekstra dan pembungkus tidak perlu seaman ketika tunneling lalu lintas yang sudah dienkripsi.Jika Anda menggunakan OpenSSH lebih awal dari 5.3,
-W
opsi tidak tersedia. Dalam hal ini Anda dapat menerapkan hal di atas menggunakan netcat (nc
):sumber
-W
seharusnya digunakan sebagai penggantinc
pilihan.-W
, hanya yang di hostA (asal) atau yang di hostB (mesin tengah)?hostB
, dimungkinkan untuk mendeklarasikan beberapaHost hostC
baris di atasProxyCommand
sehingga sangat mudah untuk mengakses beberapa host melalui server tengah.Sunting: Ini adalah pendekatan yang salah. Lihat jawaban ephemient sebagai gantinya. Jawaban ini akan berhasil, tetapi berpotensi kurang aman dan pasti kurang mengagumkan.
Sepertinya Anda menginginkan solusi seperti berikut:
Ini akan memberi Anda shell
machineb
. Biarkan ini sendiri; meminimalkan jendela terminal.Sekarang, setiap kali Anda membuat koneksi ssh ke
localhost
, Anda akan benar-benar terhubung kemachinec
melaluinyamachineb
. Setelah selesai dengan terowongan, tutup saja terminal tempat Anda menjalankan perintah di atas.Perhatikan bahwa Anda akan membutuhkan hak pengguna super untuk menjalankan perintah.
sumber
-p 8022
perintah ssh Anda. Dan ini adalah braindead yang mudah dengan git: gunakan URIssh://localhost:8022/path/to/repo.git
.Kedengarannya seperti Anda ingin alias shell pada A yang menyebabkan ssh terjadi pada C
sumber
-t
opsi ssh luar jika Anda ingin shell interaktif, karenassh
mengasumsikan-T
jika itu diberikan perintah.Untuk shell interaktif, Anda dapat menggunakan perintah sederhana ini:
Opsi -J adalah untuk melompat .
sumber
Jika majikan Anda menyediakan VPN, saya sarankan menggunakannya.
Dengan begitu, Anda tidak perlu mengkonfigurasi aplikasi apa pun secara khusus (bahkan ssh), dan Anda dapat melihat mesin apa pun di belakang firewall. Selain itu, semua lalu lintas Anda akan dienkripsi oleh perangkat lunak VPN, yang akan menambah keamanan untuk lalu lintas yang tidak terenkripsi secara tidak sengaja atau tidak sengaja.
sumber
YASS, Namun Solusi Sederhana Lainnya
-f
parameter memberitahu SSH untuk pergi ke latar belakang sekali koneksi didirikansleep 10
diperlukan untuk menjaga koneksi sampai perintah ssh kedua menggunakan port penerusan. Kemudian ssh pertama akan ditutup ketika ssh kedua meninggalkan port yang diteruskan.Anda sekarang dapat menjalankan sesi ssh berikutnya:
Varian:
sesi ssh selanjutnya dapat dibuka dengan menjalankan:
Keuntungan utama menggunakan -M dan -S param adalah bahwa hanya satu koneksi yang terbuka dari HostA ke HostC, sesi berikutnya tidak akan mengautentikasi lagi dan berjalan jauh lebih cepat.
sumber
Platform khusus, platform nix campuran:
hostA (linux) -> HostB (solaris) -> HostC (linux)
Jika memerlukan aplikasi X pada hostC, dan hop antara ada di kotak Solaris ... dalam hal ini saya menemukan netcat (nc) yang diperlukan di ProxyCommand seperti:
hostA: ~ $ vi .ssh / config:
Kemudian tunneling otomatis berfungsi:
hostA: ~ $ ssh hostC
sumber