Ceci couvre les bases. Notez l'utilisation de sudo pour les choses qui ont besoin de plus de privilèges. Nous avons configuré sudo pour autoriser ces commandes pour cet utilisateur sans avoir besoin d'un mot de passe tapé. De plus, gardez à l'esprit que vous devriez lancer ssh-agent pour que cela soit "logique". Mais dans l'ensemble, cela fonctionne vraiment bien. L'exécution de deploy-control httpd configtest
vérifie la configuration d'Apache sur tous les serveurs distants.
#!/usr/local/bin/python
import subprocess
import sys
# The [email protected]: for the SourceURLs (NO TRAILING SLASH)
RemoteUsers = [
"[email protected]",
"[email protected]",
]
###################################################################################################
# Global Variables
Arg = None
# Implicitly verified below in if/else
Command = tuple(sys.argv[1:])
ResultList = []
###################################################################################################
for UH in RemoteUsers:
print "-"*80
print "Running %s command on: %s" % (Command, UH)
#----------------------------------------------------------------------------------------------
if Command == ('httpd', 'configtest'):
CommandResult = subprocess.call(('ssh', UH, 'sudo /sbin/service httpd configtest'))
#----------------------------------------------------------------------------------------------
elif Command == ('httpd', 'graceful'):
CommandResult = subprocess.call(('ssh', UH, 'sudo /sbin/service httpd graceful'))
#----------------------------------------------------------------------------------------------
elif Command == ('httpd', 'status'):
CommandResult = subprocess.call(('ssh', UH, 'sudo /sbin/service httpd status'))
#----------------------------------------------------------------------------------------------
elif Command == ('disk', 'usage'):
CommandResult = subprocess.call(('ssh', UH, 'df -h'))
#----------------------------------------------------------------------------------------------
elif Command == ('uptime',):
CommandResult = subprocess.call(('ssh', UH, 'uptime'))
#----------------------------------------------------------------------------------------------
else:
print
print "#"*80
print
print "Error: invalid command"
print
HelpAndExit()
#----------------------------------------------------------------------------------------------
ResultList.append(CommandResult)
print
###################################################################################################
if any(ResultList):
print "#"*80
print "#"*80
print "#"*80
print
print "ERRORS FOUND. SEE ABOVE"
print
sys.exit(0)
else:
print "-"*80
print
print "Looks OK!"
print
sys.exit(1)
Nice. C'était le premier code que j'ai eu à travailler. Question: Savez-vous quand la connexion ssh est terminée? – physicsmichael
juste après l'exécution de la commande. – Peter
@Peter: si j'ai besoin d'une interaction avec un hôte distant (réponse sur invite, etc) devrais-je utiliser Pexpect ou il y a une bibliothèque intégrée avec une telle fonctionnalité – legesh