यह एक समस्या है जो मैं लंबे समय से कर रहा हूं, लेकिन हर बार जब मैं कुछ खो जाने का अनुमान लगाने की कोशिश करता हूं, तो मुझे लगता है कि मैं यहां बेहतर पूछना चाहूंगा कि शायद कोई और अनुभवी व्यक्ति मेरी मदद कर सके।
पृष्ठभूमि
मेरा रास्पबेरी पाई, रास्पियन जेसी चल रहा है, और मैं एसएसएच का उपयोग अक्सर इसमें लॉगिन करने और दूरस्थ रूप से कमांड निष्पादित करने के लिए करता हूं। अपने पहले SSH सत्रों के दौरान मैंने देखा कि जब मैं लॉग इन करता था तो हर बार RPI पर एक ssh-agentप्रक्रिया शुरू की जाती थी , लेकिन कभी भी नहीं मारता था जब ing: लॉग इन और आउट कई बार प्रक्रियाओं का एक गुच्छा पैदा हो जाता था, जिसे सिर्फ वहीं लटकाने के लिए छोड़ दिया जाता था। इधर-उधर के मैन पेज और जवाबों को पढ़ते हुए और हाल ही में मैंने वहां के उद्देश्य को समझा , और मैंने यह भी सीखा कि इसे लॉग आउट करते समय आम तौर पर मारना चाहिए, इसलिए मैंने खुद से पूछना शुरू किया कि यह क्यों नहीं था। इसके अलावा, मैंने देखा कि जारी करने के कारण एक और उदाहरण पैदा होता है। मैं रिश्तेदार आदमी पृष्ठ पर पढ़ाexitssh-agentssh-agentsource ~/.bashrcssh-agentपर्यावरण चर SSH_AGENT_PIDको परिभाषित किया जाना चाहिए क्योंकि ssh-agentकार्यक्रम को evalअपने आउटपुट को निष्पादित करने और ऐसे चर को परिभाषित करने के लिए शुरू किया जाना चाहिए , जो तब अन्य SSH- संबंधित आदेशों द्वारा उपयोग किए जाते हैं, जिसमें ssh-agent -kवर्तमान सत्र के सापेक्ष एजेंट को मारना शामिल है , इसलिए मैं भागे echo $SSH_AGENT_PIDऔर echo $SSH_AUTH_SOCK, लेकिन वे दोनों खाली थे। मुझे अचानक एहसास हुआ: शायद यह प्रक्रिया लॉगआउट पर नहीं मिलती क्योंकि ssh-agent -kपर्यावरण चर से इसकी पीआईडी को पढ़ने की कोशिश की जाती है जो सेट नहीं है।
समस्या
चूंकि ssh-agentलॉगआउट पर नहीं मारा जा रहा है, और यह सुनिश्चित करने के लिए होता है क्योंकि आवश्यक पर्यावरण चर सेट नहीं होते हैं, इसका केवल एक ही मतलब हो सकता है: जो कोई भी ssh-agentलॉगिन पर कॉल करता है वह शायद इसे उचित तरीके से नहीं करता है (जो होगा eval "$(ssh-agent -s)") । तो मैंने सोचा: ठीक है, समस्या क्या है? मैं अभी भी जो भी विन्यास फाइल, सेवा, या लॉगिन स्क्रिप्ट मिलेगा, एजेंट को शुरू करने और मैन्युअल रूप से इसे ठीक करने के लिए निष्पादित किया जाता है! पृथ्वी पर यह कहाँ हो सकता है?
मैंने क्या कोशिश की है
चूँकि मैंने देखा है कि ssh-agentजब भी मैं कॉल करता हूँ तो हर बार इसे देखा जाता है source ~/.bashrc, यह पहली फाइल थी जिसका मैंने निरीक्षण किया था, लेकिन वहां भी कुछ भी नहीं है जिसमें एसएसएच से संबंधित किसी भी चीज़ का संदर्भ दिया गया हो। मैं निम्नलिखित सभी फ़ाइलों के अंदर viस्ट्रिंग की खोज करता रहा ssh, लेकिन कुछ भी नहीं मिला :
~/.bashrc
~/.profile
/etc/bash.bashrc
/etc/profile
/etc/profile.d/ (every file in this folder)
/etc/environment
क्या कुछ और फ़ाइल है जो इसमें शामिल हो सकती है source ~/.bashrc? मैं वास्तव में नहीं जानता।
तब मैंने प्रासंगिक systemdसेवाओं के लिए खोज की , लेकिन केवल पाया ssh.service, जो है WantedBy=multi-user.target, और इसलिए लॉगिन पर नहीं चलाया जाता है (और अच्छी तरह से, यह स्पष्ट है क्योंकि यह एसएसएच सर्वर डेमॉन है)।
मैंने अपने /home/piफोल्डर में हर एक फाइल को एक अस्थायी फोल्डर में ले जाने और फिर से लॉग आउट और बैक करने की कोशिश की, लेकिन फिर ssh-agentभी स्पॉन हुआ।
आखिरकार, मैंने चैंबर में आखिरी शॉट भी फायर किया: मैं find / -name 'ssh-agent'रूट के रूप में चला गया , जो केवल मुद्रित /usr/bin/ssh-agent, एक निष्पादन योग्य था, इसलिए मैंने एक नकली निष्पादन योग्य बनाया जो मूल रूप से केवल मूल कमांड को लॉग करता था :
#! /bin/bash
ps -o args= $PPID > /home/pi/LOG
cat /proc/$PPID/cmdline >> /home/pi/LOG
मैंने असली का नाम /usr/bin/ssh-agentबदल दिया और इसे सही अनुमतियों / उपयोगकर्ता / समूह को सेट करने वाले नकली के साथ बदल दिया source ~/.bashrc, फिर से भाग गया, फिर LOGफ़ाइल को मुद्रित किया :
-bash
-bash
जो चल रहा है, उस पर एक भी सुराग नहीं।
कुछ और जानकारी
मैं कुछ और विवरण जोड़ रहा हूं, मुझे नहीं पता कि वे सहायक हो सकते हैं या नहीं, लेकिन आप जानते हैं ... क्षमा से बेहतर सुरक्षित है।
यहाँ मेरा है
.bashrc।मैंने एक नए उपयोगकर्ता
dummyका उपयोग करके बनाया हैuseradd -m dummy, और इसमें लॉग इन करने से कोई शुरुआत नहीं होती हैssh-agent(मुझे ऐसा लगता है कि इसका मतलब कुछ हो सकता है)।diff /home/pi/.bashrc /home/dummy/.bashrcशो मूल रूप से कुछ भी नहीं है (बस एक टिप्पणी मैंने बनाया), के लिए एक हीdiff /home/pi/.profile /home/dummy/.profile।एजेंट सॉकेट समस्या के बिना बनाया गया है, भले ही
SSH_AUTH_SOCKसेट न किया गया हो:pi:~$ ls -lAh /tmp/ssh-vQRTAyj7DJry/ total 0 srw------- 1 pi pi 0 Jan 28 03:12 agent.1328निश्चित रूप से क्यों नहीं, लेकिन सॉकेट फ़ाइल नाम पर संख्या हमेशा
ssh-agentप्रक्रिया के पीआईडी से पहले एक होती है।से स्निपेट
htop:PID USER PRI NI VIRT RES SHR S Command 1 root 20 0 5472 3900 2728 S /sbin/init 1329 pi 20 0 3696 224 16 S └─ ssh-agent -sस्थापित संकुल मिलान
ssh:pi:~$ apt list --installed | grep ssh libpam-chksshpwd/oldstable,now 1.1.8-3.1+deb8u2+rpi3 armhf [installed] libssh-gcrypt-4/oldstable,now 0.6.3-4+deb8u2 armhf [installed,automatic] libssh2-1/oldstable,now 1.4.3-4.1+deb8u1 armhf [installed,automatic] openssh-client/oldstable,now 1:6.7p1-5+deb8u4 armhf [installed,automatic] openssh-server/oldstable,now 1:6.7p1-5+deb8u4 armhf [installed,automatic] openssh-sftp-server/oldstable,now 1:6.7p1-5+deb8u4 armhf [installed,automatic] ssh/oldstable,now 1:6.7p1-5+deb8u4 all [installed] sshpass/oldstable,now 1.05-1 armhf [installed]के लिए खोज
ssh-agent -sरिकर्सिवली का उपयोग करgrepमें/etcऔर/libपैदावार कोई परिणाम नहीं।मेरे पास कोई डेस्कटॉप वातावरण स्थापित नहीं है, लेकिन मेरे पास
/etc/X11कुछ कॉन्फ़िगरेशन फ़ाइलों के साथ एक फ़ोल्डर है। मैंने फ़ोल्डर को किसी और चीज़ में बदलने और सिर्फ मामले में रिबूट करने की कोशिश की, लेकिन प्रक्रिया अभी भी खराब हो गई है, इसलिए जाहिर है कि इसके लिए बहुत कुछ नहीं है।
निष्कर्ष
अब, इसे यथासंभव सरल बनाने के लिए, मुझे केवल दो प्रश्न मिले हैं:
- यह कहां और कैसे
ssh-agentपैदा हुआ, कौन आदेश जारी करता है? - आवश्यक पर्यावरण चर निर्धारित किए बिना, इसे उचित तरीके से क्यों नहीं कहा जाता है, और इसलिए अनिश्चित काल के लिए वहां लटकने की प्रक्रिया को छोड़ दिया जाता है?
~/.bashrcतब क्या है।