क्या यह सुनिश्चित करने का एक सुविधाजनक तरीका है कि किसी दिए गए उपयोगकर्ता (यानी मेरे) से सभी लॉगिन समान ssh- एजेंट का उपयोग करें? मैंने ज्यादातर समय इस काम को करने के लिए एक स्क्रिप्ट को हैक किया, लेकिन मुझे सभी पर संदेह था कि ऐसा करने का कोई तरीका था जो मुझे अभी याद नहीं था। इसके अतिरिक्त, उस समय से कंप्यूटिंग तकनीक में आश्चर्यजनक प्रगति हुई है, उदाहरण के लिए इस वेबसाइट पर।
तो यहाँ लक्ष्य यह है कि
- जब भी मैं बॉक्स में लॉग इन करता हूं, चाहे वह एसएसएच के माध्यम से हो, या जीडीएम / केडीएम / आदि से शुरू हुआ या एक कंसोल में:
- यदि मेरे उपयोगकर्ता नाम में वर्तमान में कोई
ssh-agent
रनिंग नहीं है, तो एक शुरू किया जाता है, पर्यावरण चर निर्यात किया जाता है, औरssh-add
कहा जाता है। - अन्यथा, मौजूदा एजेंट के निर्देशांक लॉगिन सत्र के पर्यावरण चर में निर्यात किए जाते हैं।
- यदि मेरे उपयोगकर्ता नाम में वर्तमान में कोई
यह सुविधा विशेष रूप से मूल्यवान है जब प्रश्न में बॉक्स को ssh
तीसरे बॉक्स में प्रवेश करते समय रिले बिंदु के रूप में उपयोग किया जाता है । इस मामले में यह निजी कुंजी के पासफ़्रेज़ में टाइप करने से बचता है जब आप हर बार ssh में और फिर उदाहरण के लिए, कुछ git push
या कुछ करना चाहते हैं।
नीचे दी गई स्क्रिप्ट ज्यादातर यह विश्वसनीय रूप से करती है, हालांकि यह हाल ही में बॉट हुआ जब एक्स दुर्घटनाग्रस्त हो गया और मैंने फिर एक और ग्राफिकल सत्र शुरू किया। हो सकता है उस उदाहरण में अन्य पेंच हो।
यहाँ मेरी बुरी-अच्छी स्क्रिप्ट है। मैं अपने से यह स्रोत .bashrc
।
# ssh-agent-procure.bash
# v0.6.4
# ensures that all shells sourcing this file in profile/rc scripts use the same ssh-agent.
# copyright me, now; licensed under the DWTFYWT license.
mkdir -p "$HOME/etc/ssh";
function ssh-procure-launch-agent {
eval `ssh-agent -s -a ~/etc/ssh/ssh-agent-socket`;
ssh-add;
}
if [ ! $SSH_AGENT_PID ]; then
if [ -e ~/etc/ssh/ssh-agent-socket ] ; then
SSH_AGENT_PID=`ps -fC ssh-agent |grep 'etc/ssh/ssh-agent-socket' |sed -r 's/^\S+\s+(\S+).*$/\1/'`;
if [[ $SSH_AGENT_PID =~ [0-9]+ ]]; then
# in this case the agent has already been launched and we are just attaching to it.
##++ It should check that this pid is actually active & belongs to an ssh instance
export SSH_AGENT_PID;
SSH_AUTH_SOCK=~/etc/ssh/ssh-agent-socket; export SSH_AUTH_SOCK;
else
# in this case there is no agent running, so the socket file is left over from a graceless agent termination.
rm ~/etc/ssh/ssh-agent-socket;
ssh-procure-launch-agent;
fi;
else
ssh-procure-launch-agent;
fi;
fi;
कृपया मुझे बताएं कि ऐसा करने का एक बेहतर तरीका है। इसके अलावा विसंगतियों / gaffes (उदाहरण के लिए var
सामान डालना etc
) को नितंब न करें ; मैंने यह कुछ समय पहले लिखा था और तब से मैंने कई चीजें सीखी हैं।