python - 带有键值(不是路径)的 SSHTunnel

标签 python ssh paramiko ssh-tunnel

我有一个 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/

相关文章:

python - 'polling' 指的是什么以及这段代码到底在做什么?

Python 请求模块在获取请求期间不返回整页

ssh - 启动 SSH session 时 FIPS 完整性验证测试失败

python - 使用 Paramiko 在远程计算机上通过 sudo 执行 SFTP 操作

ssh - 通过 SSH session 将文件从远程主机传输到本地主机的最佳方法是什么?

ios - 使用命令 "ARCHIVE FAILED"进行归档过程时出现 "xcodebuild archive\"错误

python - 无法使用python库: 'paramiko' with AWS Lambda

python - 运算符(operator)模块和 pandas

python - PyDict_SetItem 是否会增加键的引用计数?如果是,它发生在代码中的哪个位置?

python - Node JS 运行时但需要 python