Bagaimana saya bisa mengetahui apakah koneksi SSH telah dibuat dengan atau tanpa penerusan agen?
Saya mencoba melakukan hal berikut:
ssh-add -D (delete all stored keys)
ssh --vvv something
ssh-add (adding key)
ssh --vvv something
dan membandingkan output, tetapi saya hanya dapat melihat perbedaan yang halus.
ssh-find-agent
skrip untuk menemukan dan menggunakan ssh-agent yang ada, sangat berguna! Repo memiliki beberapa contoh dalam README. Anda mungkin dapat mendeteksi jika ssh-agent diaktifkan seperti itu, bersama dengan memeriksa file konfigurasi SSH, daripada melihat output SSH.Jawaban:
Ketika ssh agent forward diaktifkan pada klien (
ForwardAgent yes
on~/.ssh/config
) dan juga diaktifkan pada server jarak jauhAllowAgentForwarding yes
, saat masuk ke server jarak jauh variabel lingkunganSSH_AUTH_SOCK
harus ada. Kemudian jika Anda masuk ke server lain (kunci publik Anda harus berada di server ketiga ini) Anda tidak boleh diminta kata sandi apa pun.Untuk memperjelas:
sumber
ssh-add
yang melakukan trik untuk saya. Saya telah bekerja selama berbulan-bulan tanpa mengetahui tentang itu. Kemudian saya beralih desktop dari Unity ke LXDE dan penerusan kunci agen berhenti bekerja.ssh-add
setiap kali Anda membuka jendela konsol baru. Jadi saya menambahkan baris perintah itu ke akhir~/.bash_profile
, dan sekarang penerusan agen otentikasi bekerja setiap waktu secara transparan!ssh-agent
mengatur dengan benar. Lihat mah.everybody.org/docs/ssh"${SSH_AUTH_SOCK}"
adalah socket, Anda dapat mengujinya denganif [[ ! -S "${SSH_AUTH_SOCK}" ]]; then echo "warn: no forward agent detected ('${SSH_AUTH_SOCK}' is not a socket)"; fi
Memeriksa lingkungan
SSH_AUTH_SOCK
bagus untuk koneksi ssh langsung.Jika Anda menggunakan proxy (
proxy_command
) Anda mungkin memiliki konksi yang terlihat seperti:local
->hostA
->hostB
->hostC
->hostD
Jika penerusan agen aktif pada semua host tersebut, maka
SSH_AUTH_SOCK
akan ditetapkan dan "berisi" kunci ssh Anda darilocal
pada semua host.Sekarang anggap penerusan agen dinonaktifkan
hostB
tetapi diaktifkanhostC
.SSH_AUTH_SOCK
akan diaktifkanhostD
tetapi sebenarnya akan "kosong". Tentu saja agen diteruskan tetapi hanya darihostC
kehostD
. Rantai itu putus.Sekarang untuk memeriksa apakah sebenarnya kunci tersedia pada
hostD
Anda cukup meneleponssh-add
. Akan keluar dengan kode 1 dalam hal apa pun, tetapi jika kunci tidak tersedia itu akan menunjukkan ini padastderr
:Jadi Anda dapat memeriksa
SSH_AUTH_SOCK
plus pastikanssh_add
tidak memiliki output.sumber