2012-01-09 2 views
4
def execute(self,command): 
      to_exec = self.transport.open_session() 
      to_exec.exec_command(command) 
      print 'Command executed' 
connection.execute("install.sh") 

Когда я проверяю удаленную систему, я обнаружил, что сценарий не запускался. Любая подсказка?Как выполнить скрипт удаленно в python с помощью ssh?

+0

Больше код, пожалуйста. Недостаточно контекста. –

+0

вопрос слишком расплывчатый, какой ssh-оболочкой вы используете, что такое ошибка, и откуда вы знаете, что «сценарий не запускался» вместо «сценарий работает, но с ошибками». –

+1

Я не знаю, почему вы хотите это сделать, но если это для администрирования sys, вы можете найти [Fabric] (http://fabfile.org/) полезным. – charlax

ответ

-2
subprocess.Popen('ssh thehost install.sh') 

См. Модуль subprocess.

+0

и убедитесь, что у вас есть ключи ssh, иначе ваша программа не сможет запросить пароль при выполнении из cron, например. –

+1

Лучше использовать модуль [ssh] (http://pypi.python.org/pypi/ssh/1.7.11), который был разработан, чтобы сделать его надежным и простым в использовании SSH-протоколом; нет никакой веской причины использовать модуль 'subprocess', потому что это не только проблема, но и вы не можете полагаться на код возврата из' ssh', потому что, если он возвращает код ошибки 255, вы не можете сказать, является ли это то, что ваш удаленный скрипт, или если это было просто 'ssh', возвращающее код из-за ошибки, полностью не связанной с удаленным скриптом. – aculich

11

ниже код будет делать то, что вы хотите, и вы можете адаптировать его к execute функции:

from paramiko import SSHClient 
host="hostname" 
user="username" 
client = SSHClient() 
client.load_system_host_keys() 
client.connect(host, username=user) 
stdin, stdout, stderr = client.exec_command('./install.sh') 
print "stderr: ", stderr.readlines() 
print "pwd: ", stdout.readlines() 

Однако следует отметить, что команды будут по умолчанию вашей $HOME директории, так что вам необходимо либо иметь install.sh в вашем $PATH или (скорее всего) вам понадобится cd в каталог, содержащий сценарий install.sh.

Вы можете проверить свой путь по умолчанию с:

stdin, stdout, stderr = client.exec_command('getconf PATH') 
print "PATH: ", stdout.readlines() 

Однако, если это не в вашем пути вы можете cd и выполнить сценарий, как это:

stdin, stdout, stderr = client.exec_command('(cd /path/to/files; ./install.sh)') 
print "stderr: ", stderr.readlines() 
print "pwd: ", stdout.readlines() 

Если сценарий не в вашем $PATH вам нужно будет использовать ./install.sh вместо install.sh, как и если бы вы были в командной строке.

Если вы все еще возникают проблемы после всего выше оно также может быть хорошим, чтобы проверить права доступа к файлу install.sh тоже:

stdin, stdout, stderr = client.exec_command('ls -la install.sh') 
print "permissions: ", stdout.readlines() 
Смежные вопросы