SSH एजेंट अग्रेषण का पता लगाना


19

मैं कैसे पता लगा सकता हूं कि एजेंट फॉरवर्डिंग के साथ या बिना एसएसएच कनेक्शन स्थापित किया गया है?

मैं निम्नलिखित करने की कोशिश कर रहा हूं:

ssh-add -D (delete all stored keys)
ssh --vvv something
ssh-add (adding key)
ssh --vvv something

और आउटपुट की तुलना करें, लेकिन मैं केवल सूक्ष्म अंतर देख सकता हूं।


1
संदर्भ के लिए, यह अच्छा लेख देखें: blog.joncairns.com/2013/12/understanding-ssh-agent-and-ssh-add । यह आपको ssh-find-agentमौजूदा ssh- एजेंटों को खोजने और उनका उपयोग करने के लिए एक स्क्रिप्ट के साथ एक अच्छे GitHub रेपो की ओर इशारा करता है , बहुत आसान! README में रेपो के कुछ उदाहरण हैं। यदि SSH आउटपुट को देखने के बजाय SSH कॉन्फिग फाइलों का निरीक्षण करने के साथ-साथ ssh- एजेंट को सक्षम किया जाता है, तो आप यह पता लगाने में सक्षम हो सकते हैं।
trusktr

जवाबों:


21

जब ssh एजेंट फॉरवर्ड को क्लाइंट ( ForwardAgent yesऑन ~/.ssh/config) में सक्षम किया जाता है और रिमोट सर्वर पर भी सक्षम किया जाता है AllowAgentForwarding yes, जब रिमोट सर्वर पर लॉग इन करते हुए पर्यावरण चर SSH_AUTH_SOCKमौजूद होना चाहिए। फिर यदि आप किसी अन्य सर्वर में लॉग इन करते हैं (आप सार्वजनिक कुंजी इस तीसरे सर्वर पर रहते हैं) तो आपको किसी भी पासवर्ड के लिए संकेत नहीं दिया जाना चाहिए।

स्पष्टीकरण देना:

home$ ssh-add
Enter passphrase ...
Identity added ...
$ ssh  hostA
hostA$ env | grep SSH_AUTH_SOCK
SSH_AUTH_SOCK=/tmp/...
$ ssh hostB
hostB$

1
ssh-addक्या मेरे लिए चाल किया है। मैं महीनों से उस बारे में नहीं जानता था। तब मैंने एकता से LXDE तक डेस्कटॉप स्विच किए और एजेंट कुंजी अग्रेषण ने काम करना बंद कर दिया।
मार्क हडसन

@ MarkHudson किसी कारण से LXDE चलाते ssh-addसमय आपको हर बार एक नई कंसोल विंडो खोलते हुए चलना पड़ता है । इसलिए मैंने उस कमांड लाइन को अंत तक जोड़ा ~/.bash_profile, और अब प्रमाणीकरण एजेंट अग्रेषण हर बार पारदर्शी तरीके से काम करता है!
पॉल बर्नल

@PaulBernal आपको वास्तव में ऐसा करने की आवश्यकता नहीं है, मुझे लगता है कि आपने ssh-agentसही तरीके से सेट नहीं किया है। देखें mah.everybody.org/docs/ssh
माइकल Mrozek

1
M2C: में फ़ाइल "${SSH_AUTH_SOCK}", एक सॉकेट है उसे अपने साथ परीक्षण कर सकते हैंif [[ ! -S "${SSH_AUTH_SOCK}" ]]; then echo "warn: no forward agent detected ('${SSH_AUTH_SOCK}' is not a socket)"; fi
Boop

4

के लिए पर्यावरण की जाँच SSH_AUTH_SOCKप्रत्यक्ष ssh कनेक्शन के लिए अच्छा है।

यदि आप proxy_commandसमीपस्थ ( ) का उपयोग करते हैं, तो आपके पास एक ऐसा कन्वेक्शन हो सकता है जो ऐसा दिखता है:

local-> hostA-> hostB-> hostC->hostD

यदि एजेंट फ़ॉरवर्डिंग उन सभी मेजबानों पर सक्रिय है, तो SSH_AUTH_SOCKसेट हो जाएगा और localसभी होस्टों पर आपकी ssh कुंजी "समाहित" कर देगा ।

अब मान लें कि एजेंट अग्रेषण अक्षम है, hostBलेकिन चालू है hostCSSH_AUTH_SOCKपर सेट किया hostDजाएगा, लेकिन यह वास्तव में "खाली" होगा। बेशक एजेंट भेज दिया जाता है, लेकिन केवल से hostCकरने के लिए hostD। चेन टूट गई है।

अब यह जांचने के लिए कि क्या वास्तव में कुंजी hostDआपके पास उपलब्ध है, बस कॉल कर सकते हैं ssh-add। यह किसी भी स्थिति में कोड 1 के साथ बाहर निकल जाएगा, लेकिन यदि कुंजी अनुपलब्ध है, तो यह इस पर दिखाई देगा stderr:

आपके प्रमाणीकरण एजेंट के लिए कनेक्शन नहीं खोला जा सका।

तो आप SSH_AUTH_SOCKप्लस के लिए जांच कर सकते हैं सुनिश्चित करें ssh_addकि कोई आउटपुट नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.