2011-03-09 18 views
12

मैं डॉक्स से निम्नलिखित सरल fabfile.py है:अजगर कपड़ा देता है: गंभीर त्रुटि: नहीं मौजूदा सत्र

from fabric.api import run 

def host_type(): 
    run('uname -s') 

मैं इसे का उपयोग कर चलाने की कोशिश:

fab -H 192.168.0.201 host_type 

लेकिन त्रुटि मिलती है :

[email protected]:~/me$ fab -H 192.168.0.201 host_type 
[192.168.0.201] run: uname -s 
Password for [email protected]: 

Fatal error: No existing session 

Aborting. 

मैं 1 9 2.168.0.201 में ठीक कर सकता हूं।

कोई विचार?

+0

आपके एसएसएच सत्र के साथ कुछ अजीब हो रहा है। सर्वर क्या ओएस चल रहा है? 'Ssh -o" पसंदीदा प्रमाणीकरण = पासवर्ड "का प्रयास करें और देखें कि क्या यह आपको पहुंच से इनकार करता है या नहीं। – JimB

+0

यह अभी काम करना शुरू कर दिया है। मैंने वीएम को रोकने और उन्हें पुनरारंभ करने के अलावा कुछ भी याद नहीं किया, लेकिन मैंने सोचा कि मैंने पहले ऐसा किया होगा ... वैसे भी विचारों के लिए सभी को धन्यवाद। – verbatim

उत्तर

-1

यह मेरे लिए ssh एजेंट विफलता, स्मार्ट कार्ड हटाने की वजह से किया गया था। समस्या "एसएसएच उपयोगकर्ता @ होस्ट" आउटपुट में आसानी से देखी जा सकती है (मेरे मामले में यह "एजेंट कुंजी का उपयोग करने में विफलता में विफलता" संदेश था)।

मेरा अनुमान है कि ओपी में एसएसएच के साथ कुछ क्षणिक समस्या भी थी, इसलिए वही (कण्य स्पष्ट नहीं) paramiko त्रुटि।

-1

मुझे भी यह वही परेशान बेकार त्रुटि मिली। शोध करने के बाद, और कुछ चीजों की कोशिश करने के बाद, मैंने अंततः इसे उबंटू 10.04 पर तय किया। यह मैं क्या किया है:

  1. this खोजने के बाद, मैं गलत पर सेट करने के लिए/apps/gnome-keyring/डेमॉन घटकों/ssh SSH को GNOME कीरिंग के इंटरफ़ेस निष्क्रिय करने के लिए gconf- संपादक हुआ करता था।
  2. मैंने अपनी ~/.ssh निर्देशिका हटा दी।
  3. मैंने रीबूट किया।
1

ठीक करने के लिए यह

  1. अपने कपड़े recept को यह पंक्तियां जोड़ें:

    from fabric.api import env 
    
    env.key_filename = "/path/to/.ssh/ssk_non_public_key" 
    

    आप सर्वर है कि होने की जरूरत है फैब स्क्रिप्ट द्वारा तक पहुँचता है पर सार्वजनिक ssh कुंजी दे रखा है।

  2. यदि नहीं - तो आपको हटाएं।ssh इस निर्देशिका भी मदद कर सकता

या आप 1 के संयोजन का उपयोग ssh-keygen द्वारा और से ssh कुंजी बना सकते हैं) और 2)

1

आम तौर पर, अगर आप इस त्रुटि मिलती है, तो आप चाहिए

  • होस्ट नाम
  • उपयोगकर्ता
  • प्रमाणीकरण विधि
  • : सटीक पैरामीटर paramiko साथ SSHing कोशिश उपयोग करने के लिए कोशिश कर रहा है

मुझे पता चला कि बहुत से एसएसएच कुंजी होने के कारण कुछ (लेकिन सभी नहीं) मेरे कपड़े एसएसएच कनेक्शन विफल होने के कारण, क्योंकि सभी चाबियाँ दूरस्थ मेजबान को दी जा रही थीं। अतीत में, विकृत कुंजी ने मेरे लिए यह त्रुटि संदेश भी उठाया है (आप उन्हें एक समय में ~/.ssh/ से चाबियाँ हटाकर देख सकते हैं।)

दुर्भाग्य से, फैब्रिक आपके .ssh/config सेटिंग्स का सम्मान नहीं करता है। आप इस डिबग करने के लिए चाहते हैं, तो आपको निम्न चला सकते हैं:

#!/usr/bin/env python 
import paramiko 

paramiko.util.log_to_file("/tmp/paramiko.log") 
ssh = paramiko.SSHClient() 
# Run this if you get host key errors: see later 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect("example.com", username="myuser", password="mypassword") 

और /tmp/paramiko.log में उत्पादन की जांच - आप की तरह कुछ देख सकते हैं:

INF [20120904-16:58:52.155] thr=1 paramiko.transport: Disconnect (code 2): Too many authentication failures for myuser 

आप set no_keys on the Fabric env environment कर सकते हैं:

env.no_keys = True 

लेकिन फिर आपको विशिष्ट मेजबानों के लिए विशिष्ट कुंजी का उपयोग करने के लिए फैब्रिक को बताना होगा। जैसा कि ऊपर का सुझाव दिया, आप के साथ क्या कर सकते हैं कि आपके fabfile में:

from fabric.api import env 

env.key_filename = "/path/to/.ssh/ssk_non_public_key" 

अधिक आम तौर पर here's a function to parse your .ssh config and pull out selective keys - इस कुंजी में, SSH कुंजी का उपयोग करने के लिए। यह स्वचालित रूप से काम करने के लिए के लिए, आप ~/.ssh/config को IdentityFile जोड़ने की आवश्यकता होगी:

Host example.com 
    IdentityFile /home/jp/.ssh/id_rsa_example 

विफलता का एक अन्य कारण है कि paramiko does not recognize all host key types हो सकता है। यह कुछ और समस्याग्रस्त है: paramiko चुपचाप ~/.ssh/known_hosts में मेजबान कुंजी को अनदेखा कर रहा है, क्योंकि यह मेजबान कुंजी का प्रारूप नहीं है जो यह समझता है। ssh-इंग -v साथ प्रयास करें और देखें क्या लाइन SSH इसके लिए एक होस्ट कुंजी मैच पाता है कहते हैं:

debug1: Host '1.2.3.4' is known and matches the RSA host key. 
debug1: Found key in /home/jp/.ssh/known_hosts:105 

आप इस लाइन को हटाने उसके बाद फिर से ssh कर रहे हैं और (नई?) होस्ट कुंजी को स्वीकार करने की कोशिश कर सकते हैं और देखें कि क्या paramiko खुश है। यदि यह समस्या है, हालांकि, और यह हल नहीं करता है, तो कोई स्पष्ट समाधान नहीं है जिसे मैं देख सकता हूं।

+0

क्या आपने एक बग रिपोर्ट दर्ज की है? – jberryman

20

संक्षिप्त उत्तर: यदि आपके पास एक से अधिक एसएसएच सार्वजनिक कुंजी है और पासवर्ड प्रमाणीकरण का उपयोग करना चाहते हैं तो '-k' और '-a' कमांड लाइन झंडे आज़माएं।

जब मुझे यह त्रुटि आई, तो यह एक बहुत ही अनूठी स्थिति का परिणाम था। मेरे पास ~/.shsh में कई अलग-अलग सार्वजनिक कुंजी हैं। मेरे पास एसएसएच एजेंट में शामिल कई सार्वजनिक कुंजी भी हैं। मैं केवल एक पासवर्ड के साथ फैब्रिक का उपयोग करने का प्रयास कर रहा था।

यहाँ है कि मैं क्या सर्वर प्रमाणीकरण लॉग में देखा है:

Nov 7 07:56:02 ubuntu sshd[1862]: Disconnecting: Too many authentication failures for user [preauth] 
Nov 7 07:56:08 ubuntu sshd[1864]: Disconnecting: Too many authentication failures for user [preauth] 

मैं कपड़ा निर्देश दिया '-k' आदेश-पंक्ति ध्वज के साथ प्रमाणीकरण के लिए नहीं सार्वजनिक कुंजी का उपयोग करने के लिए। मैं एसएसएच एजेंट के माध्यम से जो कुछ भी उपलब्ध है उसका उपयोग करने के लिए उस फैब्रिक (पैरामीको के माध्यम से) चूक गया था। मेरे मामले में, ये सभी सार्वजनिक कुंजी एसएसएच एजेंट के साथ पंजीकृत थीं, इसलिए कपड़े को सार्वजनिक चाबियों का उपयोग न करने का एक अपूर्ण समाधान था। मैंने '-a' कमांड लाइन ध्वज जोड़ा जो फैब्रिक को एसएसएच एजेंट से पूछताछ नहीं करता है। अंत में, मैं फैब्रिक के साथ सर्वर से कनेक्ट करने के लिए पासवर्ड प्रमाणीकरण का उपयोग कर सकता था।

+4

'-a' ने मेरे लिए काम किया, धन्यवाद – gipi

+0

क्या आपने एक बग रिपोर्ट दर्ज की है? – jberryman

0

मेरे पास ~/.ssh/config में निजी कुंजी थी और मुझे पता चला कि मुझे इसे ssh-add ~/.ssh/PRIVATE_KEY_NAME के साथ फिर से जोड़ने की आवश्यकता है, तो सबकुछ फिर से काम करना शुरू कर देता है। मैं आगे एजेंट के साथ प्रयोग के आदेश optioni -A

0

पर्याप्त प्रतिष्ठा Troy J. Farrell's पोस्ट पर टिप्पणी करने, jberryman's सवाल के जवाब में है। यह एक बग नहीं है, लेकिन एसएसएच सार्वजनिक कुंजी को संभालने के तरीके में एक आर्टिफैक्ट है।

मेरी समस्या एसएस-एजेंट (ed25519) में लोड की गई चाबियों में से एक थी जो मैंने कपड़े में env.hosts में लोड की गई प्रणालियों में से एक के साथ असंगत थी। चूंकि मैं अपनी दूसरी चाबियों का उपयोग करना चाहता था, इसलिए मैंने अभी-ए विकल्प जोड़ा है, न कि कपड़े के लिए विकल्प। यह काम किया। केवल चेतावनी यह है कि यदि आपकी निजी कुंजी में से एक पासवर्ड सुरक्षित है, तो आपको हर बार कपड़े का उपयोग करने के लिए इस पासफ्रेज को दर्ज करना होगा।

संबंधित मुद्दे