Mendeteksi penerusan agen SSH

19

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.

shabunc
sumber
1
Untuk referensi, lihat artikel yang bagus ini: blog.joncairns.com/2013/12/understanding-ssh-agent-and-ssh-add . Ini mengarahkan Anda ke repo GitHub yang bagus dengan ssh-find-agentskrip 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.
trusktr

Jawaban:

21

Ketika ssh agent forward diaktifkan pada klien ( ForwardAgent yeson ~/.ssh/config) dan juga diaktifkan pada server jarak jauh AllowAgentForwarding yes, saat masuk ke server jarak jauh variabel lingkungan SSH_AUTH_SOCKharus 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:

home$ ssh-add
Enter passphrase ...
Identity added ...
$ ssh  hostA
hostA$ env | grep SSH_AUTH_SOCK
SSH_AUTH_SOCK=/tmp/...
$ ssh hostB
hostB$
Torian
sumber
1
Inilah ssh-addyang 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.
Mark Hudson
@MarkHudson Untuk beberapa alasan saat menjalankan LXDE Anda harus menjalankan ssh-addsetiap 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!
Paul Bernal
@PaulBernal Anda seharusnya tidak benar-benar perlu melakukan itu, saya kira Anda tidak ssh-agentmengatur dengan benar. Lihat mah.everybody.org/docs/ssh
Michael Mrozek
1
m2c: file dalam "${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
Boop
4

Memeriksa lingkungan SSH_AUTH_SOCKbagus 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_SOCKakan ditetapkan dan "berisi" kunci ssh Anda dari localpada semua host.

Sekarang anggap penerusan agen dinonaktifkan hostBtetapi diaktifkan hostC. SSH_AUTH_SOCKakan diaktifkan hostDtetapi sebenarnya akan "kosong". Tentu saja agen diteruskan tetapi hanya dari hostCke hostD. Rantai itu putus.

Sekarang untuk memeriksa apakah sebenarnya kunci tersedia pada hostDAnda cukup menelepon ssh-add. Akan keluar dengan kode 1 dalam hal apa pun, tetapi jika kunci tidak tersedia itu akan menunjukkan ini pada stderr:

Tidak dapat membuka koneksi ke agen otentikasi Anda.

Jadi Anda dapat memeriksa SSH_AUTH_SOCKplus pastikan ssh_addtidak memiliki output.

Udondan
sumber