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

リモートシステムをチェックすると、スクリプトが実行されませんでした。どんな手掛かり?sshを使ってPythonでリモートでスクリプトを実行する方法は?

+0

その他のコードください

あなたはまだそれ以上のすべての後に問題がある場合は、あまりにもinstall.shファイルのパーミッションをチェックすると良いかもしれません。文脈が足りません。 –

+0

質問はあまりにも漠然としていますが、どのsshラッパーを使用しているのですか?エラーは何ですか?「スクリプトは実行されますがエラーはあります」ではなく「スクリプトは実行されませんでした。 –

+1

なぜそれをしたいのか分かりませんが、sys管理のためには[Fabric](http://fabfile.org/)が役に立つかもしれません。 – charlax

答えて

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

subprocessモジュールを参照してください。

+0

とsshキーが生成されていることを確認してください。そうしないと、プログラムはcronから実行されたときにパスワードを尋ねることができなくなります。 –

+1

SSHプロトコルを堅牢かつ使いやすくするために設計された[sshモジュール](http://pypi.python.org/pypi/ssh/1.7.11)を使用する方が良いです。 '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ディレクトリにデフォルト設定されますコマンド$PATHinstall.shまたは(おそらく)install.shスクリプトを含むディレクトリにcdが必要です。

あなたがして、あなたのデフォルトのパスを確認することができます:それはあなたのパスにない場合は、cdことができ、このようなスクリプトを実行し、しかし

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

:スクリプトがない場合には

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を使用する必要があります。 、

stdin, stdout, stderr = client.exec_command('ls -la install.sh') 
print "permissions: ", stdout.readlines() 
関連する問題