METODE 1 (gunakan kunci ssh di antar)
Jika Anda ingin mempertahankan alur otentikasi
local -- authenticate --> inter -- authenticate (ask password) --> final
Ini tidak dapat dilakukan dengan .ssh / config proxyhost.
Yang Anda butuhkan adalah bash shell alias (saya harap Anda menggunakan bash).
Di ~/.bashrc, tambahkan baris berikut
alias ssh-final='ssh -t inter ssh user2@final.com'
Di command prompt, cukup ketikkan berikut ini
ssh-final
finalbagian dalam ~/.ssh/configtidak digunakan.
Detail Koneksi (1)
ssh -t inter ssh user2@final.com dapat dilihat sebagai berikut
local# ssh inter
inter# ssh user2@final.com
localhanya "berbicara" dengan inter. Tidak ada koneksi ssh langsung atau tidak langsung antara localdan final. localhanya menampilkan output dari ssh user2@final.com.
METODE 2 (gunakan kunci ssh di lokal)
Otentikasi dengan ssh-key yang sama
Host inter
User user1
HostName inter.example.com
Host final
User user2
Hostname <final.com / final IP Address>
Port 22
ForwardAgent yes
ProxyCommand ssh inter nc %h %p
Salin lokal ~/.ssh/id_ras.pub ke
/home/user1/.ssh/authorized_keys in `inter`
/home/user2/.ssh/authorized_keys in `final`
Rincian Koneksi (2)
tunneling ssh
Sebelum kita masuk ke detail ProxyCommand, mari kita lihat contoh berikut
Langkah 1, di jendela terminal 1
local# ssh inter -L 2000:final.com:22
Langkah 2, di jendela terminal 2
local# ssh localhost -p 2000
Di terminal 1, sebuah terowongan diatur antara port lokal 2000 dan port final.com 22. Apa pun yang dikirim ke port lokal 2000 akan diteruskan ke port final.com 22 dan sebaliknya.
Di terminal 2, ssh terhubung ke port lokal 2000, tetapi sebenarnya berkomunikasi dengan port final.com 22, yang merupakan sshd.
Dengan tunneling, klien ssh lokal di Langkah 2 terhubung dengan final.com sshd secara langsung.
"Output" dari port lokal 2000, adalah "mentah" lalu lintas daemon ssh.
Penggunaan umum terowongan semacam itu adalah untuk mengakses server web internal atau server email. Berikut ini adalah contoh untuk server web
local# ssh inter -L 2000:final.com:80
Di browser gunakan URL berikut
http://localhost:2000
Dua titik akhir terowongan adalah port lokal 2000, dan port final.com 80.
Lalu lintas masuk dan keluar dari titik akhir terowongan "SEBAGAIMANA ADANYA". Mari kita sebut lalu lintas "mentah" itu.
Perintah Proxy
Host final
User user2
Hostname <final.com / final IP Address>
Port 22
ForwardAgent yes
ProxyCommand ssh inter nc %h %p
The ProxyCommandmengambil satu langkah lebih lanjut. Itu melewati langkah membuat port lokal dan terhubung ke sana.
Seorang klien ssh akan mengeksekusi perintah apa yang pernah diberikan di belakang ProxyCommand, dan memperlakukan output dari perintah itu sebagai lalu lintas "mentah". Itu memegang titik akhir lokal, dan kemudian memulai koneksi ssh dengannya.
Mengapa yang satu bekerja dan yang lainnya tidak?
Perintah berikut
ssh inter nc final.com 22
pada dasarnya berarti (1) terhubung ke inter, kemudian (2) aktif inter, jalankan perintah nc final.com 22.
nc - arbitrary TCP and UDP connections and listens
Jadi nc final.com 22akan terhubung ke port final.com 22, mencetak semua lalu lintas masuk ke stdout, dan mengirim semua stdin ke sisi lain. Ini adalah "terowongan" antara nc stdin / out dan port final.com 22.
Karena ncdijalankan dalam sesi ssh, semua stdoutnya dilewatkan kembali ke klien ssh, sebagai lalu lintas "mentah". Dan klien ssh dapat meneruskan traffic ke nc stdin, yang akan berakhir di port final.com 22.
Melalui "tunnel" di atas, klien ssh lokal akan memulai sesi ssh dengan final.comlangsung.
Perintah berikut
ssh -t inter ssh user2@final.com
tidak bekerja dengan ProxyCommandkarena itu bukan lalu lintas "mentah" dari daemon ssh. Ini adalah stdout klien ssh . Bicara klien dengan klien berarti tidak ada bisnis.
Otentikasi dengan ssh-key yang berbeda (OP original config)
Host inter
User user1
HostName inter.com
IdentityFile ~/.ssh/id_rsa
Host final
User user2
HostName final.com
IdentityFile ~/.ssh/id_rsa_2
ProxyCommand ssh inter nc %h %p
Salin lokal ~/.ssh/id_ras.pub ke
/home/user1/.ssh/authorized_keys in `inter`
Salin lokal ~/.ssh/id_ras_2.pub ke
/home/user2/.ssh/authorized_keys in `final`
Kedua hal di atas akan memungkinkan penggunaan berikut
local# ssh final
Pemeriksaan Tambahan
Gunakan verbose
local# ssh -v final
Itu akan membantu mengidentifikasi masalah ssh.
Periksa nc
ProxcyCommandmengeksekusi ncpada inter. Periksa apakah ncsebenarnya tersedia pada inter.
local# ssh inter
inter# nc final.com 22
Periksa kunci rsa sudah diatur dengan benar
Jika kunci yang berbeda akan digunakan untuk interdan final, file-file berikut harus ada di mesin lokal
local# ls ~/.ssh
id_rsa id_rsa_2 id_rsa.pub id_rsa_2.pub
Karena Anda sudah bisa intermelakukannya, periksa pengaturan tombol aktif final. Dari mesin lokal Anda
local# ssh -t inter ssh user2@final
final# cat .ssh/authorized_keys
Anda harus melihat konten di id_rsa_2.pubsana.
ssh -t, tetapi apa yang ingin saya lakukan adalah persis mensimulasikan perilaku yang saya milikissh -tmenggunakan hanya menggunakan konfigurasi pada Windows.ssh/config.