Vérifier qu'un fichier existe sur ssh
Je suis en train de tester si un fichier existe sur SSH à l'aide de pexpect. J'ai obtenu la plupart de code de travail, mais j'ai besoin d'attraper la valeur, de sorte que je puis affirmer, si le fichier existe. Le code que j'ai fait est ci-dessous:
def VersionID():
ssh_newkey = 'Are you sure you want to continue connecting'
# my ssh command line
p=pexpect.spawn('ssh [email protected]')
i=p.expect([ssh_newkey,'password:',pexpect.EOF])
if i==0:
p.sendline('yes')
i=p.expect([ssh_newkey,'password:',pexpect.EOF])
if i==1:
p.sendline("word")
i=p.expect('service@main-:')
p.sendline("cd /opt/ad/bin")
i=p.expect('service@main-:')
p.sendline('[ -f email_tidyup.sh ] && echo "File exists" || echo "File does not exists"')
i=p.expect('File Exists')
i=p.expect('service@main-:')
assert True
elif i==2:
print "I either got key or connection timeout"
assert False
results = p.before # print out the result
VersionID()
Merci pour toute aide.
Je ne pense pas que vous auriez vu à l'aide de ssh-agent pour stocker votre mot de passe? Si vous l'avez fait, vous pourriez éviter d'pexpect entièrement et il suffit de faire: ssh user@host "commande"
J'ai posté ma réponse à cette question ci-dessous. Merci
J'ai posté ma réponse à cette question ci-dessous. Merci
OriginalL'auteur chrissygormley | 2010-02-03
Vous devez vous connecter pour publier un commentaire.
Si le serveur accepte sftp séances, je ne vous embêtez pas avec pexpect, mais au lieu d'utiliser la paramiko SSH2 module Python:
Le code ouvre une SFTPClient de connexion au serveur, sur lequel vous pouvez utiliser stat() pour vérifier l'existence des fichiers et des répertoires.
sftp.stat va soulever une IOError ("No such file') lorsque le fichier n'existe pas.
Si le serveur ne prend pas en charge le protocole sftp, ce serait le travail:
SSHClient.exec_command retourne un triple (stdin,stdout,stderr). Ici, nous venons de vérifier la présence d'une sortie. Vous pouvez à la place faire varier la commande ou vérifier stderr pour tous les messages d'erreur à la place.
N' "sftp [email protected].0.0" le travail pour vous (c'est à dire dans un shell)?
Le sftp ne travail que pour les autres machines, mais pour la caméra, je suis de la connexion en elle est de se faire rejeter. Je vais regarder comment résoudre ce problème et d'essayer le code ci-dessus à nouveau. Merci
Il est probable que le sftp binaire n'existe pas sur l'appareil photo. Essayez d'utiliser ssh ou sftp avec
-v
Je serais intéressé de savoir si la deuxième solution (sans SFTP, voir ci-dessus) qui a fonctionné pour vous.
OriginalL'auteur flight
Pourquoi ne pas profiter du fait que le code de retour de la commande est passée via SSH?
De cette façon, vous pouvez vérifier le code de retour sans avoir besoin de la capture de sortie.
OriginalL'auteur MikeyB
J'ai eu quelques problèmes avec cela à chaque fois que j'ai couru mon programme, il serait changer la sortie. par exemple, Si j'étais à la recherche pour
/bin/bash
, il retournait parfois qu'il a été trouvé, et d'autres fois, il serait de retour qu'il manquait.J'ai eu le code suivant à travailler de façon cohérente pour les fichiers et dossiers en les faisant précéder de ce que j'attendais avec
\r\n
ou
Espère que cela vous aide.
Edit: Aussi remarqué que lorsque vous en ssh avec Windows (cygwin) et essayer de voir si un fichier existe, le fichier doit être cité. Sur Linux, c'est facultatif. Ainsi, le
%s
danshost.sendline
a été changé pour%r
.OriginalL'auteur SomeGuyOnAComputer
Je n'ai pas de pexpect de l'expérience, mais en regardant leur page web, vous pouvez appeler le fait de s'attendre de la méthode à valeurs multiples et il renvoie l'index de l'une qu'elle correspond à (ce n'est basée que sur moi juste en regardant cet exemple).
En fait, vous êtes déjà à l'aide de cette fonctionnalité au top.
Si vous voulez attraper si le fichier existe ou pas?...
...
OriginalL'auteur eric.frederich
J'ai travaillé la solution qui va me faire. Le code est ci-dessous:
Cet extrait la valeur de " p " dans un format de chaîne de caractères. J'ai ensuite divisé la chaîne jusqu'à obtenir la chaîne de caractères "le Fichier Existe" dans une liste et de le comparer à la réponse que je cherche. Si le Fichier n'existe pas, le test échouera.
Merci pour toute l'aide.
OriginalL'auteur chrissygormley
Lorsque tant qu'utilisateur, vous tapez quelque chose dans ssh, le shell se fera l'écho des caractères de retour. Ce qui se passe maintenant.
Donc, en faisant:
Entraînera une entrée de:
Faire:
Sera alors toujours i==0, car "le Fichier existe" est présent dans la première ligne qui est reçu en retour.
Une alternative où l'original de l'envoyer en ligne, n'a pas attendu phrase:
Ou plus comme l'original:
Le crochet est la version de exactement le même que le
test
version.Vous êtes de droite. J'ai enlever cette partie de la réponse.
OriginalL'auteur Johan