shuzo-kino.hateblo.jp
などでやったリモートコマンドですが……これをsubprocessなりで立ち上げると、毎回毎回立ち上げる羽目になり効率が宜しくありません。
実際のところ
導入
$ pip install paramiko
スクリプト
import paramiko # SSHクライアントのインスタンスを作成 client = paramiko.SSHClient() # 初めてのSSH接続時にサーバーの公開鍵を自動的に受け入れるように設定 client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # SSHサーバーに接続 remote = '192.168.1.X' username = 'foo' password = 'bar' client.connect(remote, username=username, password=password) # リモートでコマンドを実行 stdin, stdout, stderr = client.exec_command('ls -l') # コマンドの実行結果を出力 print(stdout.read().decode()) # SSH接続をクローズ client.close() # 標準入力をクローズ。これをしないとタイムアウトエラー stdin.close()
AttributeError: 'NoneType' object has no attribute 'time'とか怒られるが?
stdinを閉じないと、タイムアウトエラーとして異常終了します