Paramiko は Python 標準の sftp モジュールより高機能で、SSH を通じた暗号化通信を扱えるライブラリです。以下では、認証鍵を使って安全にファイルをアップロード・ダウンロードする例を示します。
import paramiko from pathlib import Path def secure_transfer(host, port, username, key_path, local_path, remote_path): try: private_key = paramiko.RSAKey.from_private_key_file(key_path) # SSH クライアントの作成 ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.RejectPolicy()) # 未登録ホストは拒否 ssh.connect(hostname=host, port=port, username=username, pkey=private_key) # SFTP セッション開始 with ssh.open_sftp() as sftp: sftp.put(local_path, remote_path) # アップロード print(f'Successfully uploaded: {local_path} → {remote_path}') ssh.close() except paramiko.AuthenticationException: print('認証エラー: 鍵またはユーザー情報を確認してください') except paramiko.SSHException as e: print(f'SSH エラー: {e}') except FileNotFoundError: print('ローカルまたはリモートのファイルパスが正しくありません') except Exception as e: print(f'予期しないエラー: {e}') # 使用例 if __name__ == '__main__': host = 'example.com' port = 22 username = 'ubuntu' key_path = str(Path.home() / '.ssh' / 'id_rsa') local_path = '/path/to/local/file.txt' remote_path = '/home/ubuntu/file.txt' secure_transfer(host, port, username, key_path, local_path, remote_path)
秘密鍵を使用する(パスワードではなく)
`RejectPolicy` で未知のホスト鍵を拒否
例外を細かく分けて安全に処理
ファイルパスは `Path` オブジェクトで明示
この方法は SSH 経由で通信するため、転送内容・認証情報ともに暗号化されます。特に自動スクリプトでは、AutoAddPolicy ではなく RejectPolicy を使うことで中間者攻撃のリスクを避けられます。