1. ホーム
  2. python

[解決済み] パラミコでSSHのリターンコードを取得するには?

2022-11-05 02:53:54

質問

client = paramiko.SSHClient()
stdin, stdout, stderr = client.exec_command(command)

コマンドのリターンコードを取得する方法はありますか?

すべてのstdout/stderrを解析して、コマンドが正常に終了したかどうかを知ることは困難です。

どのように解決するのですか?

SSHClient は、Paramiko のより低レベルな機能のためのシンプルなラッパークラスです。 このクラスは API ドキュメント には recv_exit_status() メソッドに Channel クラスで使用されます。

非常にシンプルなデモスクリプトです。

import paramiko
import getpass

pw = getpass.getpass()

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.WarningPolicy())
client.connect('127.0.0.1', password=pw)

while True:
    cmd = raw_input("Command to run: ")
    if cmd == "":
        break
    chan = client.get_transport().open_session()
    print "running '%s'" % cmd
    chan.exec_command(cmd)
    print "exit status: %s" % chan.recv_exit_status()

client.close()

実行例です。

$ python sshtest.py
Password: 
Command to run: true
running 'true'
exit status: 0
Command to run: false
running 'false'
exit status: 1
Command to run: 
$