Saya ingin mengakses komputer, katakanlah mesin A yang berbasis di jaringan universitas saya. Namun, komputer ini hanya dapat diakses melalui jaringan internal universitas, jadi saya tidak dapat menggunakan SSH ke komputer ini dari rumah secara langsung.
Inilah yang saya lakukan sekarang:
Masuk ke mesin universitas yang berbeda, katakanlah mesin B
(Mesin B ini dapat diakses melalui SSH dari komputer di rumah saya.)
Gunakan SSH pada B untuk terhubung ke A.
Apakah ada cara untuk melakukannya lebih cepat? Hanya menggunakan satu perintah ssh.
networking
ssh
remote-access
tunnel
nikosdi
sumber
sumber
Jawaban:
Ya, menggunakan
ProxyCommand
konfigurasi SSH Anda.Buat file konfigurasi SSH di direktori home Anda (kecuali jika Anda ingin membuat seluruh sistem),
~/.ssh/config
:Sekarang Anda dapat mencapai Mesin A secara langsung menggunakan
Perhatikan juga bahwa sekarang Anda memiliki satu nama target host SSH untuk itu, Anda dapat menggunakan ini di aplikasi lain juga. Misalnya:
SCP untuk menyalin file.
Dalam aplikasi GUI Anda:
gunakan
sftp://user@internalmachine/
sebagai lokasi untuk menelusuri di mesin.Berbasis KDE (Lumba-lumba): gunakan
fish://user@internalmachine/
Catatan
Ubah
hostname.or.IP.address.internal.machine
dan port (22
) ke mesin yang ingin Anda jangkau seolah-olah Anda ingin dariunibroker
mesin.Bergantung pada versi netcat pada host unibroker,
-q0
opsi harus dihilangkan. Mengenai otentikasi; Anda pada dasarnya mengatur dua koneksi SSH dari workstation Anda. Ini berarti host unibroker dan host mesin internal diverifikasi / diautentikasi satu demi satu (untuk keypair / kata sandi dan verifikasi kunci host).Penjelasan
Pendekatan penggunaan
ProxyCommand
dan 'netcat' ini hanyalah salah satu cara untuk melakukannya. Saya suka ini, karena klien SSH saya berbicara langsung ke mesin target sehingga saya dapat memverifikasi kunci host dari klien saya dan saya dapat menggunakan otentikasi kunci publik saya tanpa menggunakan kunci lain pada broker.Masing-masing
Host
mendefinisikan awal bagian host baru.Hostname
adalah nama host target atau alamat IP dari host itu.User
adalah apa yang akan Anda berikan sebagai bagian penggunassh user@hostname
.ProxyCommand
akan digunakan sebagai pipa ke mesin target. Dengan menggunakan SSH ke mesin pertama dan secara langsung membuat 'netcat' (nc
) sederhana ke target dari sana, ini pada dasarnya hanya plaintext maju ke mesin internal dari broker di antara mereka. The-q
opsi untuk membungkam setiap keluaran (hanya preferensi pribadi).Pastikan Anda menginstal netcat di broker (biasanya tersedia secara default di Ubuntu) - baik netcat-openbsd atau netcat-traditional .
Perhatikan bahwa Anda masih menggunakan SSH dengan enkripsi dua kali di sini. Sementara saluran netcat adalah teks biasa, klien SSH Anda pada PC Anda akan mengatur saluran terenkripsi lainnya dengan mesin target akhir.
sumber
Hop dalam sekali jalan
Alternatif yang jelas untuk pendekatan ProxyCommand yang saya berikan di jawaban saya yang lain akan 'melompat' langsung ke mesin target:
Perhatikan
-t
padassh
perintah pertama . Tanpa itu, itu akan gagal:Ini akan memaksa TTY nyata untuk dialokasikan
Kelemahan dari ini adalah bahwa sekarang semua konfigurasi, verifikasi dan otentikasi terjadi di Mesin B, yang saya benar-benar tidak suka dalam situasi saya karena alasan keamanan. Saya suka keypair saya di PC saya sendiri dan mengotentikasi dan memverifikasi mesin target akhir dari PC saya sendiri. Selain itu, Anda hanya dapat menggunakan shell interaktif untuk SSH, jadi ini tidak akan berurusan dengan alat lain seperti SCP atau menggunakan file manager GUI Anda.
Untuk semua alasan yang disebutkan di atas, saya sangat merekomendasikan pendekatan ProxyCommand , tetapi untuk koneksi cepat ini berfungsi dengan baik.
sumber
Anda bisa menggunakan
-J
opsi baris perintah:Dari
man ssh
:Itu diperkenalkan di OpenSSH versi 7.3 (dirilis pada Agustus 2016). Ini tersedia di Ubuntu 16.10 dan yang lebih baru.
sumber
Coba gunakan
di ~ / .ssh / config Anda dan lakukan semuanya dalam satu kesempatan dengan tombol yang hanya berada di komputer Anda.
sumber
B
mesin.Ini adalah saran yang sangat membantu. Setelah mengacaukan selama berjam-jam, saya menemukan catatan ini, & mengkonfirmasi ini berfungsi persis seperti yang didokumentasikan. Untuk menghubungkan melalui MachineA ke MachineB, dari mesin jarak jauhC:
misal: [xuser @ machineC ~] ssh -t MachineSsh MachineB
"-T" sangat penting, ssh gagal jika tidak ada. Anda akan diminta dua kali, pertama untuk kata sandi pada MachineA, kemudian kedua untuk MachineB. Juga, perhatikan bahwa ini mengasumsikan Anda memiliki pengguna "xuser" yang ditentukan pada ketiga mesin. Jika tidak, cukup gunakan sintaks ssh: "yuser @ MachineA ...". Perhatikan juga bahwa Anda dapat menggunakan titik-titik IP mentah #, jika Anda mau. Ini berguna jika Anda menautkan melalui jaringan lokal pribadi yang menggunakan IP yang tidak terpapar ke dunia - yaitu. tidak ada dalam file host lokal Anda, atau DNS apa pun. Untuk mendapatkan file dari MachineB, ke machineC jauh, Anda dapat scp dari MachineB ke MachineA, lalu dari MachineA ke machineC jauh. (Mis. MachineC jarak jauh dapat melakukan ping MachineA, tetapi bukan MachineB.) Peringatan: Saya diuji dengan Fedora dan WindowsXP, MachineA adalah XP-box yang menjalankan ICS (Internet Connection Sharing), sedangkan MachineB dan mesin jarak jauhC adalah kotak Fedora-Linux. Saran ini memecahkan masalah utama bagi saya - yaitu. akses jarak jauh yang terbatas dan dipantau ke situs jarak jauh saya. Perhatikan juga, ketika Anda "logout" dari MachineB, Anda akan melihat dua "Koneksi ke xxx.xxx.xxx.xxx ditutup." pesan.
sumber
-t
masih diperlukan.ProxyCommand adalah solusi bersih untuk kasus ketika Anda mengizinkan akses shell di kedua sistem. Kami ingin memberikan akses pengguna jarak jauh ke mesin internal (A) melalui broker (B), tetapi tanpa mengizinkan pengguna akses shell ke B untuk meningkatkan keamanan. Ini berhasil:
Ganti shell login
Ganti shell login (gunakan
chsh
) untukextuser
pada broker dengan skrip berikut (disimpan dalam file):Asalkan tidak ada kata sandi login telah diatur di extuser @ B untuk pengguna jarak jauh dan di internaluser @ A untuk extuser @ B, maka menjalankan perintah berikut akan langsung membawa pengguna jarak jauh ke A
Kiat : Buat pengaturan yang diperlukan agar tidak ada kata sandi login yang diotorisasi pada extuser @ B sebelum mengubah ke shell login khusus. Setelah perubahan, karena akun ini tidak dapat diakses oleh siapa pun melalui shell, hanya sudoer @ B yang dapat membuat perubahan pada file berwenang_kunci dengan mengeditnya secara langsung.
Baris terakhir adalah untuk menekan tampilan spanduk masuk dari B, sehingga pengguna jarak jauh memiliki akses transparan ke A.
sumber
Anda berarti Anda memerlukan beberapa jumper :)
Baru-baru ini, saya menemukan masalah ini dengan jumper1 jumper2 dan mesin terakhir saya, seperti untuk sol saya
naskah lokal:
kemudian pada jumper ke-1 (yang merupakan router saya), saya menempatkan skrip bernama Y00.sh:
Anda dapat menggantinya dengan IP dan kata sandi Anda, semoga berhasil!
sumber