मेरे ssh- एजेंट को कौन शुरू कर रहा है, और इसे ठीक से समाप्त क्यों नहीं करेगा?


9

यह एक समस्या है जो मैं लंबे समय से कर रहा हूं, लेकिन हर बार जब मैं कुछ खो जाने का अनुमान लगाने की कोशिश करता हूं, तो मुझे लगता है कि मैं यहां बेहतर पूछना चाहूंगा कि शायद कोई और अनुभवी व्यक्ति मेरी मदद कर सके।

पृष्ठभूमि

मेरा रास्पबेरी पाई, रास्पियन जेसी चल रहा है, और मैं एसएसएच का उपयोग अक्सर इसमें लॉगिन करने और दूरस्थ रूप से कमांड निष्पादित करने के लिए करता हूं। अपने पहले 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कुछ कॉन्फ़िगरेशन फ़ाइलों के साथ एक फ़ोल्डर है। मैंने फ़ोल्डर को किसी और चीज़ में बदलने और सिर्फ मामले में रिबूट करने की कोशिश की, लेकिन प्रक्रिया अभी भी खराब हो गई है, इसलिए जाहिर है कि इसके लिए बहुत कुछ नहीं है।


निष्कर्ष

अब, इसे यथासंभव सरल बनाने के लिए, मुझे केवल दो प्रश्न मिले हैं:

  1. यह कहां और कैसे ssh-agentपैदा हुआ, कौन आदेश जारी करता है?
  2. आवश्यक पर्यावरण चर निर्धारित किए बिना, इसे उचित तरीके से क्यों नहीं कहा जाता है, और इसलिए अनिश्चित काल के लिए वहां लटकने की प्रक्रिया को छोड़ दिया जाता है?

मुझे आश्चर्य है कि आपके पास ~/.bashrcतब क्या है।
लकक्चु २

@ilkachu अच्छी तरह से, यहाँ तुम जाओ ...
मार्को बोनेली

जवाबों:


1

मैं कुछ संभावित कारणों को जानता हूं:

  • यदि आप उपयोग कर रहे हैं libpam-ssh, तो यह आपके लिए एक सत्र स्टार्ट-अप के भाग के रूप में आपके लिए SSH एजेंट को स्वचालित रूप से शुरू कर सकता है, और यहां तक ​​कि स्वचालित रूप से आपकी कुंजियाँ लोड कर सकता है यदि उनके पास कोई पासफ़्रेज़ नहीं है या उनका पासफ़्रेज़ आपके लॉगिन पासवर्ड के समान है।

  • यदि आप उपयोग कर रहे हैं gpg-agent, तो यह वैकल्पिक रूप से ssh-agentभी कार्य कर सकता है। इसके शट-डाउन को अलग तरह से संभाला जाता है, इसलिए केवल SSH_AUTH_SOCKपर्यावरण चर होगा, न किSSH_AGENT_PID

  • यदि आपके पास SSH- एजेंट (जैसे PuTTY का पेजेंट) आपके वर्कस्टेशन पर चल रहा है और एजेंट फॉरवर्डिंग सक्षम (और रिमोट इसकी sshdअनुमति देता है) के साथ SSH कनेक्शन बनाते हैं , तो दूरस्थ होस्ट पर आप फिर से केवल SSH_AUTH_SOCKबिना ही देख पाएंगे SSH_AGENT_PID... क्योंकि एजेंट सॉकेट sshdजो अपने स्थानीय कार्य केंद्र के SSH एजेंट को वापस सुरंगों में जाता है ।


1
सुझावों के लिए धन्यवाद, लेकिन दुर्भाग्य से उन विकल्पों में से कोई भी मेरे लिए लागू नहीं होता है। मेरे पास नहीं है libpam-ssh; दोनों SSH_AGENT_PIDऔर SSH_AUTH_SOCKपरेशान हैं (सॉकेट बेशक वैसे भी मौजूद है); मैं उपयोग नहीं करता हूँ gpg-agentऔर एजेंट अग्रेषण को PuTTY पर सक्षम नहीं करता है। मैं वास्तव में खो रहा हूँ: \
मार्को Bonelli
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.