2016-04-07 10 views
4

Ich benutze Python Paramiko und scp, um einige Operationen auf Remote-Maschinen durchzuführen. Einige Computer, auf denen ich arbeite, benötigen Dateien, die lokal auf ihrem System verfügbar sind. Wenn das der Fall ist, verwende ich Paramiko und scp, um die Dateien zu kopieren. Zum Beispiel:Paramiko/scp - überprüfen, ob Datei auf Remote-Host existiert

from paramiko import SSHClient 
from scp import SCPClient 

ssh = SSHClient() 
ssh.load_system_host_keys() 
ssh.connect('192.168.100.1') 

scp = SCPClient(ssh.get_transport()) 
scp.put('localfile', 'remote file') 
scp.close() 

ssh.close() 

Meine Frage ist, wie kann ich überprüfen, um zu sehen, ob ‚localfile‘ auf dem entfernten Rechner vorhanden ist, bevor ich die scp versuchen?

Ich mag würde, um zu versuchen und Python-Befehle verwenden, wenn möglich, das heißt nicht

Antwort

8

Verwenden paramiko der SFTP-Client statt bash. Dieses Beispielprogramm prüft vor dem Kopieren auf Existenz.

#!/usr/bin/env python 

import paramiko 
import getpass 

# make a local test file 
open('deleteme.txt', 'w').write('you really should delete this]n') 

ssh = paramiko.SSHClient() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
try: 
    ssh.connect('localhost', username=getpass.getuser(), 
     password=getpass.getpass('password: ')) 
    sftp = ssh.open_sftp() 
    sftp.chdir("/tmp/") 
    try: 
     print(sftp.stat('/tmp/deleteme.txt')) 
     print('file exists') 
    except IOError: 
     print('copying file') 
     sftp.put('deleteme.txt', '/tmp/deleteme.txt') 
    ssh.close() 
except paramiko.SSHException: 
    print("Connection Error") 
+0

Danke für Ihren Vorschlag. Benötigt sftp irgendetwas, um auf der entfernten Maschine zu laufen, d.h. FTP? – Mark

+0

Nein, es sollte Teil des Servers ssh Daemon sein. Mein SFTP funktionierte ohne zusätzliche Konfiguration. – tdelaney

Verwandte Themen