2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonでsshして,コマンドの出力結果をリストに入れる

Posted at

pythonでサーバーにsshして,入力したLinuxコマンドの出力結果をリストに格納する方法を説明します.pexpectを使用します.

Pythonでsshをする

まず,pyファイルを作りpexpectをインポートします.

from pexpect import pxssh

次にsshしたいサーバの情報を入力します

# ログイン情報を設定しSSHサーバーにログイン
ssh = pxssh.pxssh()
ssh.login(server="接続したいSSHサーバーのIP",  username="SSHサーバー側のユーザー名", password="接続したいSSHサーバーのパスワード")

この間に処理を書く

#ログアウト
ssh.logout()

pyフォルダを実行するには,pyフォルダがあるサーバのターミナルで

python3 実行したいpyファイル

これでssh接続ができます.

コマンドを実行してリストに格納する

下記のコードでできます

ssh.sendline('実行したいコマンド')
ssh.expect(r"\[.*\]\$ ",timeout=60)
komando=ssh.after.decode(encoding='utf-8')
↑またはssh.before.decode(encoding='utf-8')
list=(re.findall('切り取りたい文字列',komando))

1行ずつ説明します.

  • ssh.sendlineは実行したいコマンドを入れてください(la -al,catなど)
  • ssh.expectは特定の文字列(上記では\[.*\]\$ )が来るまで待機します.上記はターミナルのtest@testvm:~$$です.$が来たら次の処理に進みます.文字列はワイルドカードで指定します.
    timeoutは待機する時間です.デフォルトでは5秒になります.この時間を過ぎると処理が勝手に終了してしまうので,時間のかかる処理の場合は長めに設定しときましょう.
  • ssh.after.decode(encoding='utf-8')は出力したコマンドと結果を出力します.afterとbeforeがあり,afterはssh.expectの前の出力が入り,beforeはあとの出力が入ります.例えば,下記のようになります.
ssh.sendline('ls /volume1/jasmine2-backup/backup')
ssh.expect(r"\[.*\]\$ ")
after=ssh.after.decode(encoding='utf-8')
before=ssh.before.decode(encoding='utf-8')
print("after:"+after)
print("before:"+before)
#結果
after:[0m2023-12-19-17-08  2023-12-21-17-08  2024-01-09-17-08
2023-12-20-17-08  2023-12-22-17-08
[PEXPECT]$ 

before:ls /volume1/jasmine2-backup/backup

確かに結果は出ましたが,これでは使いずらいです.
そこでre.findallで必要な文字列だけとってリストに入れます.
上記のフォルダだけ取りたい場合はワイルドカードで指定します.

after=ssh.after.decode(encoding='utf-8')
re=(re.findall(r'20\d*-\d*-\d*-\d*-\d*',after)
print(re)
#結果
['2023-12-19-17-08', '2023-12-21-17-08', '2024-01-09-17-08', '2023-12-20-17-08', '2023-12-22-17-08']

このようにpythonでsshして,コマンドの出力結果をリストに入れることができます.


subprocessでやる方法もあったのですが,上手くいかなかったので別の方法でやりました.同じような状況の人の役に立てればいいなと思います.


参考にさせていただいたサイト
https://zenn.dev/mtmatma/articles/19f4d455776723

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?