यह एक समस्या है जो मैं लंबे समय से कर रहा हूं, लेकिन हर बार जब मैं कुछ खो जाने का अनुमान लगाने की कोशिश करता हूं, तो मुझे लगता है कि मैं यहां बेहतर पूछना चाहूंगा कि शायद कोई और अनुभवी व्यक्ति मेरी मदद कर सके।
पृष्ठभूमि
मेरा रास्पबेरी पाई, रास्पियन जेसी चल रहा है, और मैं एसएसएच का उपयोग अक्सर इसमें लॉगिन करने और दूरस्थ रूप से कमांड निष्पादित करने के लिए करता हूं। अपने पहले SSH सत्रों के दौरान मैंने देखा कि जब मैं लॉग इन करता था तो हर बार RPI पर एक ssh-agent
प्रक्रिया शुरू की जाती थी , लेकिन कभी भी नहीं मारता था जब ing: लॉग इन और आउट कई बार प्रक्रियाओं का एक गुच्छा पैदा हो जाता था, जिसे सिर्फ वहीं लटकाने के लिए छोड़ दिया जाता था। इधर-उधर के मैन पेज और जवाबों को पढ़ते हुए और हाल ही में मैंने वहां के उद्देश्य को समझा , और मैंने यह भी सीखा कि इसे लॉग आउट करते समय आम तौर पर मारना चाहिए, इसलिए मैंने खुद से पूछना शुरू किया कि यह क्यों नहीं था। इसके अलावा, मैंने देखा कि जारी करने के कारण एक और उदाहरण पैदा होता है। मैं रिश्तेदार आदमी पृष्ठ पर पढ़ाexit
ssh-agent
ssh-agent
source ~/.bashrc
ssh-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
तब क्या है।