我有一个 SSH key 存储在变量中,因为我正在使用云功能并且无权访问文件系统。例如:
with SSHTunnelForwarder(
ssh_address_or_host='my-host',
ssh_username='my-user',
ssh_pkey='/home/david/.ssh/id_rsa' # this
) as tunnel:
如何将路径硬编码为字符串,而不是将路径传递给 ssh_pkey
文件?是的,我会将其移动到环境变量或其他变量中,但是为了测试,有没有办法向其传递字符串?
最佳答案
这就是我为 GCP Cloud Functions 解决该问题的方法。首先,我使用 Python 打印出 key 文件“temp_key.pem”的 Base64 编码 key 。我这样做的原因是因为复制和粘贴 key 在 GCP 环境变量中不起作用,即使它在本地起作用:
import base64
with open('temp_key.pem', 'rb') as f:
blob = base64.b64encode(f.read())
print(blob)
for_google_cloud_function = blob.decode('utf-8')
print(for_google_cloud_function)
这个输出我使用了我的环境变量 SSH_KEY_BLOB。然后在我的 GCP Cloud Function 中添加了此内容(我错过了从 GCP 环境变量获取它的行):
# decode key back into a useable form from base64
SSH_KEY_BLOB_DECODED = base64.b64decode(SSH_KEY_BLOB)
SSH_KEY = SSH_KEY_BLOB_DECODED.decode('utf-8')
# pass key to parmiko to get your pkey
pkey = paramiko.RSAKey.from_private_key(io.StringIO(SSH_KEY))
# setup your SSHTunnel like normal
server = SSHTunnelForwarder(
remote_server_ip,
ssh_username=SSH_USERNAME,
ssh_pkey=pkey,
remote_bind_address=('127.0.0.1', 27017)
)
这样, key 就不会被硬编码,并且该功能可以从文件中自给自足。它们可能是更好的方法,但这对我有用。
关于python - 带有键值(不是路径)的 SSHTunnel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67511931/