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
final
bagian dalam ~/.ssh/config
tidak digunakan.
Detail Koneksi (1)
ssh -t inter ssh user2@final.com
dapat dilihat sebagai berikut
local# ssh inter
inter# ssh user2@final.com
local
hanya "berbicara" dengan inter
. Tidak ada koneksi ssh langsung atau tidak langsung antara local
dan final
. local
hanya 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 ProxyCommand
mengambil 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 22
akan 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 nc
dijalankan 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.com
langsung.
Perintah berikut
ssh -t inter ssh user2@final.com
tidak bekerja dengan ProxyCommand
karena 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
ProxcyCommand
mengeksekusi nc
pada inter
. Periksa apakah nc
sebenarnya 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 inter
dan 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 inter
melakukannya, 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.pub
sana.
ssh -t
, tetapi apa yang ingin saya lakukan adalah persis mensimulasikan perilaku yang saya milikissh -t
menggunakan hanya menggunakan konfigurasi pada Windows.ssh/config
.