2017-12-22 24 views
0

Ich benutze Paramiko auf meinem lokalen ssh in einen Unix-Server. Es gibt eine ausführbare Datei, die ich von meinem lokalen auf dem Server starten möchte. Die ausführbare Datei scheitert momentan an local/paramiko, weil die Umgebungsvariable LD_LIBRARY_PATH nicht korrekt gesetzt ist, wenn ich ssh mit paramiko verwende, aber sie wird automatisch gesetzt, wenn ich putty benutze und interaktiv arbeite. Wenn ich mich über putty in die Maschine einlogge, funktioniert die ausführbare Datei wie erwartet, aber wenn ich mich über paramiko von meinem lokalen anmelde, gibt das executable einen fehlerhaften Fehler in der LD_LIBRARY_PATH-Umgebung zurück, der nicht richtig eingestellt ist.Einstellen von Umgebungsvariablen mit Paramiko

Wenn ich mich mit putty beim System anmelde, gibt eine admin .login-Datei eine Reihe von Pfaden für die Variable LD_LIBRARY_PATH an. Es sieht wie folgt aus:

setenv LD_LIBRARY_PATH path1:path2:path3:... 

Wenn jedoch in über paramiko Protokollierung, das Admin-Skript nicht gestartet wird, und ich muss manuell die Variable LD_LIBRARY_PATH gesetzt.

Meine Verbindung wie folgt aussieht:

ssh = pk.SSHClient() 
ssh.set_missing_host_key_policy(pk.AutoAddPolicy()) 
ssh.connect(hostname='server', username='user', password='password') 

Der Befehl, den ich wie laufen aussieht wollen:

stdin, stdout, stderr = ssh.exec_command('nohup executablefile') 

Wie kann ich mein LD_LIBRARY_PATH gesetzt und dann mein Programm ausführen paramiko des exec_command, oder sollte ich auf der Suche nach einer anderen Funktion?

+0

Mögliche Duplikat [Variable Unterschiede Umwelt bei der Verwendung von paramiko] (https://stackoverflow.com/questions/31964108/environment-variable-differences-when-using-paramiko) –

+0

Insbesondere finden Sie unter [meine Antwort] (https://stackoverflow.com/a/31966441/850848). –

+0

Ich stimme darin nicht überein, dass die Änderung des Parameters get_pty zu keiner Änderung führt (immer noch ein Fehler des Umgebungspfads). Ich verstehe auch nicht, wie man die ssh -T myuser @ host-Lösung implementiert, wenn ssh.connect verwendet wird - ist das eine Option für shh.connect? Die Startup-Dateien sind für den interaktiven Putty-Einsatz richtig eingerichtet, aber ich kann paramiko nicht wie bei Putty zu ssh bekommen. – Lisle

Antwort

0

Ich bastelte und fand eine einfache Lösung.

Man kann remote machine explizit sagen, was der Umgebungspfad sein soll über ssh.connect(). Der Trick besteht darin, einfach eine Reihe von Befehlen unter Verwendung von ; zu verknüpfen.

stdin, stdout, stderr = ssh.exec_command('cd directory_desired; setenv LD_LIBRARY_PATH library_path_needed; nohup executable_file')