2016-04-25 22 views
1
verwenden

Ich versuche, ein Python-Skript zu schreiben, um eine Reihe von Remote-Befehlen auf einem Linux-Rechner von Windows auszuführen. Ich benutze Paramiko als die SSH-Verbindungsbibliothek und führe einige Fab-Skripte auf dem entfernten Rechner aus.Agentenweiterleitung mit paramiko unter Windows

Die Fab-Skripts verbinden sich dann jedoch mit anderen Maschinen, so dass ich Agentenweiterleitung verwenden muss. Jedes Mal, wenn ich den Code ausführen bekomme ich diesen Fehler:

Exception in thread Thread-3: 
Traceback (most recent call last): 
    File "C:\Python27\lib\threading.py", line 801, in __bootstrap_inner 
    self.run() 
    File "C:\Python27\lib\site-packages\paramiko\agent.py", line 117, in run 
    raise AuthenticationException("Unable to connect to SSH agent") 

ich kopierte wörtlich mehrere Beispiele einschließlich: https://gist.github.com/toejough/436540622530c35404e6

Es sieht aus wie ich ein lokalen Authentifizierungsagenten einrichten müssen, da es nur weiterleitet zu nichts, aber ich kann nicht herausfinden, wie das geht.

Mein Code:

privkey = paramiko.RSAKey.from_private_key_file(PrivKeyDirFile, password = PrivKeyPw) 

# Start the client 
client = paramiko.client.SSHClient() 
client.set_missing_host_key_policy(paramiko.client.AutoAddPolicy()) 
client.load_system_host_keys() 
client.connect(hostname = Host, username = User, pkey = privkey) 
# get a session 
sshChannel = client.get_transport().open_session() 
# set up the agent request handler to handle agent requests from the server 
paramiko.agent.AgentRequestHandler(sshChannel) # <--UNDOCUMENTED??!! 
# get a shell 
sshChannel.get_pty() 
sshChannel.invoke_shell() 

# SNIP 

sshChannel.send 

("command-which-invokes-fab-script\n") 
# error now happens 

Bitte um Hilfe!

Antwort

0

Vielleicht bin ich einfach zu viel ein Anfänger mit SSH/paramiko, aber ich bin verwirrt, indem sie alles auf der Linie beginnend

# get a session 

Warum nicht einfach haben:

# Connect the client as before ... 
# Run the command: 
stdin, stdout, stderr = client.exec_command('command-which-invokes-fab-script', get_pty = True) 
+0

Wir sind Ausführen einer interaktiven Sitzung, die das Senden und Abhören einer großen Anzahl von Befehlen erfordert. Von unserem Lesen und Experimentieren war der Befehl exec_command für einzelne Befehle nützlicher, während der Kanal für die interaktivere Methode nützlicher ist. – voiceofthemany

+0

@voiceofthemany - Okay. Erhalten Sie denselben Fehler, wenn Sie 'exec_command' verwenden? Wenn nicht, möchten Sie vielleicht den Quellcode für 'exec_command' vergleichen mit dem, was Sie geschrieben haben. – ArtOfWarfare

+0

Ja, derselbe Fehler für den Befehl "problem" bei Verwendung von exec_command. – voiceofthemany