Pythonの拡張機能であるparamikoを使ってリモートVMにSSH接続できるようにします.
ポート番号と自身のローカルVMの公開鍵の絶対パスを引数に入れます.
port = 22
private_key_path = '/home/"pass"/.ssh/"公開鍵名"'
SSHセッションを確立します
- paramiko ライブラリの SSHClient クラスのインスタンスを作成します
- クライアントに、システムのホストキーを読み込むように指示します.これにより,既知のホストの鍵が保存されている場合,その情報が利用されます
- ホストキーがクライアントにまだ知られていない場合、新しいホストキーを自動的に受け入れるポリシーを設定します
- Ed25519 アルゴリズムを使用した秘密鍵をファイルから読み込みます
- connect メソッドを使用してSSH接続を確立します
client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
private_key = paramiko.Ed25519Key(filename=private_key_path)
client.connect(host_name, port, user_name, pkey=private_key)
SSHクライアントがセットアップされ,指定された秘密鍵を使用して指定されたホストに接続することができます
接続したいリモートVMのディレクトリを取得します
- リモートサーバー上でリストアップしたいディレクトリのパスを指定します(以下のプログラムでは"/var/log/")
- リモートサーバー上で実行するコマンドを構築する(以下のプログラムでは"ls -a"を使用してディレクトリ内のすべてのファイルとディレクトリをリストアップしています)
- exec_commandメソッドを使用して,リモートサーバー上でコマンドを実行します
stdin, stdout, stderr はそれぞれ標準入力,標準出力,標準エラーを表します - 標準出力から読み取ったリモートサーバーのコマンド実行結果を文字列として取得します
remote_directory = '/var/log/'
command = f"ls -a {remote_directory}"
stdin, stdout, stderr = client.exec_command(command)
file_name = stdout.read().decode('utf-8')
file_nameにはリモートサーバーのコマンド実行結果が文字列として入っている