2013-01-14 11 views
5

मैं इसे काम पर लाने की कोशिश कर रहा हूं लेकिन वही त्रुटियां प्राप्त कर रहा हूं। मैंने मेजबान के fqdn और ip की कोशिश की है। मैंने इसे प्रमाण पत्र और बिना पास करने की कोशिश की है। मैंने त्रुटि संदेश में संकेतित लाइनों को देखा है। गूगल खोज की, लेकिन क्यों यह काम नहीं कर रहा समझ नहीं कर सकते हैं:एसएसएच - पर्मोनो पॉइंट के साथ पायथन

import paramiko 
ssh = paramiko.SSHClient() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect('host', username='loginname') 
stdin, stdout, stderr = ssh.exec_command("pwd") 
stdout.readlines() 

त्रुटि:

Traceback (most recent call last): 
    File "audit.py", line 7, in <module> 
    ssh.connect('host', username='loginname') 
    File "/usr/lib/python2.6/site-packages/paramiko/client.py", line 338, in connect 
    self._auth(username, password, pkey, key_filenames, allow_agent, look_for_keys) 
    File "/usr/lib/python2.6/site-packages/paramiko/client.py", line 520, in _auth 
    raise SSHException('No authentication methods available') 
  • मैं ssh के माध्यम से कोई समस्या नहीं के साथ होस्ट से कनेक्ट करने में सक्षम हूँ।
  • एसएसएच संस्करण: ओपनएसएसएच_5.3 पी 1, ओपनएसएसएल 1.0.0-फीप्स 2 9 मार्च 2010
  • नोट करने के लिए: मैं कई दूरस्थ सर्वरों पर कमांड की श्रृंखला चलाने का एक तरीका बनाने की कोशिश कर रहा हूं। मैं जैसे स्क्रिप्ट को चलाने के लिए sys import argv का उपयोग कर रहा हूं, और फिर स्क्रिप्ट उन विशेष होस्टों के लिए ऑडिट के माध्यम से चलाएगी। मैंने पहले से ही एक बैश स्क्रिप्ट बनाई है जो इसे पूरा करती है लेकिन मैं पाइथन के माध्यम से इसे करने का बेहतर तरीका चाहता हूं।
+1

क्या यह 'पासवर्ड' कीवर्ड' खोने के कारण हो सकता है? – Tshepang

उत्तर

6

आप या तो एक पासवर्ड प्रदान करना चाहिए या निजी कुंजी (या दोनों), अन्यथा एसएसएच क्लाइंट को पता नहीं है कि लॉगिन डेटा के साथ प्रमाणीकरण कैसे करें।

यहां आपके संदर्भ के लिए मेरा कोड उदाहरण है।

#!/usr/bin/python 

from StringIO import StringIO 
import paramiko 

class SshClient: 
    "A wrapper of paramiko.SSHClient" 
    TIMEOUT = 4 

    def __init__(self, host, port, username, password, key=None, passphrase=None): 
     self.username = username 
     self.password = password 
     self.client = paramiko.SSHClient() 
     self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
     if key is not None: 
      key = paramiko.RSAKey.from_private_key(StringIO(key), password=passphrase) 
     self.client.connect(host, port, username=username, password=password, pkey=key, timeout=self.TIMEOUT) 

    def close(self): 
     if self.client is not None: 
      self.client.close() 
      self.client = None 

    def execute(self, command, sudo=False): 
     feed_password = False 
     if sudo and self.username != "root": 
      command = "sudo -S -p '' %s" % command 
      feed_password = self.password is not None and len(self.password) > 0 
     stdin, stdout, stderr = self.client.exec_command(command) 
     if feed_password: 
      stdin.write(self.password + "\n") 
      stdin.flush() 
     return {'out': stdout.readlines(), 
       'err': stderr.readlines(), 
       'retval': stdout.channel.recv_exit_status()} 

if __name__ == "__main__": 
    client = SshClient(host='host', port=22, username='username', password='password') 
    try: 
     ret = client.execute('dmesg', sudo=True) 
     print " ".join(ret["out"]), " E ".join(ret["err"]), ret["retval"] 
    finally: 
     client.close() 
-2

इससे पहले कि आप ssh.connect की जरूरत है:
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

तो फिर तुम जैसे stdout.read (साथ कुछ करने के लिए) की जरूरत है:

print stdout.read() 
+0

मेरे पास पहले से ही है। – Kryten

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