🐹
【Python】ParamikoリモートサーバのOSがわからない時のチェックサム確認方法
🔄【Paramiko × SFTP】リモートサーバのOSがわからない時のチェックサム確認する方法
またもや、pythonの記事です!!
最近、SSH経由でリモートサーバーのファイルの整合性(チェックサム)を確認するタスクがありました。しかし、そのサーバーは Linuxではなく、md5sumやsha256sumなどのコマンドが使えない 環境でした。
通常であれば、paramiko
を使って以下のようにリモートでチェックサムを計算できます。
ssh.exec_command("md5sum /path/to/file")
でも、対象のサーバーがLinuxでない or コマンドが使えない状況ではこの方法は使えません。
🛠 選んだ解決策:SFTPでファイルをダウンロードしてローカルでチェックサムを計算
このような制限付きの環境では、ファイルを一度ローカルにダウンロードして、Python側でチェックサムを計算するのが最も確実で汎用的な方法です。
✅ 実装コード(Paramiko + hashlib)
import paramiko
import hashlib
# SSH接続情報
hostname = 'your.server.com'
username = 'your_username'
password = 'your_password'
remote_path = '/path/to/remote/file.txt'
local_path = 'downloaded_file.txt'
# SSH接続の初期化
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname, username=username, password=password)
# SFTPでファイルをダウンロード
sftp = ssh.open_sftp()
sftp.get(remote_path, local_path)
# セッション終了
sftp.close()
ssh.close()
# ローカルでMD5チェックサムを計算
with open(local_path, 'rb') as f:
file_data = f.read()
md5_checksum = hashlib.md5(file_data).hexdigest()
print(f'ローカルで計算したMD5: {md5_checksum}')
💡 なぜこの方法を選んだのか?
以下のような理由から、今回は「SFTPで取得してローカルでチェックサム計算する方法」を選びました。
- ✅ リモート側のOSがLinuxでないため、md5sumやsha256sumが存在しない
- ✅ Pythonはローカル環境にあるのでhashlibで自由にチェックサム計算できる
- ✅ SFTPならParamikoだけで実装可能(追加モジュール不要)
- ✅ ファイルサイズがそこまで大きくなかったため、ダウンロードによる負荷は許容範囲
📝 注意点
- ファイルサイズが大きいと転送に時間がかかるので注意
- ダウンロードしたファイルの削除処理など、セキュリティやクリーンアップも必要に応じて追加
- 本番環境での運用時には公開鍵認証などセキュリティ強化が必須
🧭 まとめ
- サーバーのOSや環境によって、リモートでのチェックサム取得ができない場合がある
- そのような場合は、SFTPでファイルをダウンロードし、ローカルでチェックサムを計算するのが確実
-
paramiko + hashlib
の組み合わせで簡潔に実装可能
この方法なら、どんな環境でも柔軟にファイル整合性を確認できます。サーバー環境に左右されないチェックの仕組みを持っておくと、障害時の切り分けにも強くなれます!
Discussion