概要
過去に paramiko を使ってコマンドを実行する方法を紹介しました
今回は channel という機能を使って接続状態を保つ方法を紹介します
環境
- macOS 11.6.8
- Python 3.10.2
- paramiko
サンプルコード
import paramiko
with paramiko.SSHClient() as client:
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
rsa_key = paramiko.RSAKey.from_private_key_file("/path/to/sshkey.pem", "xxx")
client.connect(hostname="192.168.100.1", port=22, username="user01", pkey=rsa_key)
# channelの作成
channel = client.get_transport().open_session(timeout=3600)
try:
command = "hostname"
channel.exec_command(command)
RECV_SIZE = 1024 * 32
stdout_data = b''
stderr_data = b''
while not channel.closed or channel.recv_ready() or channel.recv_stderr_ready():
stdout_data += channel.recv(RECV_SIZE)
stderr_data += channel.recv_stderr(RECV_SIZE)
code = channel.recv_exit_status()
print(stdout_data)
print(stderr_data)
finally:
channel.close()
注意事項
while で無限ループにしているので最悪抜け出せないことになるかもしれないのでもう少し考慮が必要かもしれない (外部タイマとか別のフラグのチェックとか)
0 件のコメント:
コメントを投稿