🐹

【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