如何从S3读取.pem私钥并传入SSHTunnelForwarder构造函数?
从S3读取PEM密钥用于SSHTunnelForwarder
要实现从S3读取PEM私钥并传入SSHTunnelForwarder,你需要借助AWS SDK(boto3)获取密钥内容,再用paramiko将内容加载为密钥对象(sshtunnel底层依赖paramiko,支持直接传入这类对象)。
步骤说明
- 安装所需依赖库:
pip install sshtunnel boto3 paramiko
- 完整代码实现:
from sshtunnel import SSHTunnelForwarder import boto3 from paramiko import RSAKey S3_BUCKET = "the_bucket" S3_KEY_PATH = "the_key.pem" # 从S3获取密钥内容 s3_client = boto3.client('s3') response = s3_client.get_object(Bucket=S3_BUCKET, Key=S3_KEY_PATH) pem_content = response['Body'].read().decode('utf-8') # 将PEM内容加载为paramiko密钥对象 # 若为DSA密钥,改用paramiko.DSSKey.from_private_key_string;ED25519密钥用paramiko.Ed25519Key private_key = RSAKey.from_private_key_string( pem_content, password=SSH_PKEY_PASSWORD ) # 初始化SSH隧道 tunnel = SSHTunnelForwarder( ssh_host=(SSH_JUMPHOST, SSH_PORT), ssh_username=SSH_USERNAME, ssh_pkey=private_key, # 传入加载好的密钥对象 remote_bind_address=(REMOTE_HOST, REMOTE_PORT), local_bind_address=("127.0.0.1", 12345), ) tunnel.start() # 隧道内操作...
注意事项
- 确保运行代码的环境具备访问目标S3桶的权限(可通过IAM角色、环境变量配置AWS凭证)
- 密钥内容需解码为字符串,paramiko才能正确解析
内容的提问来源于stack exchange,提问作者Pablo M
相关产品推荐
相关产品推荐

