paramiko 仅作为 cron 作业无效 RSA 私钥 [重复]
Posted
技术标签:
【中文标题】paramiko 仅作为 cron 作业无效 RSA 私钥 [重复]【英文标题】:paramiko only as cron job not valid RSA private key [duplicate] 【发布时间】:2019-05-18 03:08:32 【问题描述】:Paramiko 脚本在使用 id_rsa 的交互式终端上运行良好。当作为 cron 作业运行时,它突然发现 id_rsa 无效。测试777权限已对所有相关文件设置无济于事。日志显示作业正在以正确的用户身份运行。
paramiko.ssh_exception.SSHException: not a valid RSA private key file
因此,块末尾的 if 语句似乎仅作为 cron 作业执行: `
def _read_private_key(self, tag, f, password=None):
lines = f.readlines()
start = 0
beginning_of_key = "-----BEGIN " + tag + " PRIVATE KEY-----"
while start < len(lines) and lines[start].strip()
!= beginning_of_key:
start += 1
if start >= len(lines):
raise SSHException("not a valid " + tag + " private key file")
`
感谢任何见解。
编辑:我加载密钥的代码
try:
client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.WarningPolicy)
client.connect(hostname = '<target>', key_filename = '/home/user/.ssh/id_rsa',username='root')
【问题讨论】:
向我们展示您用于加载密钥的代码。 希望你的私钥不要设置777权限! 更新了请求的代码,我复制了私钥并将其移至测试目录并更改了权限,现在已将其删除。这一切都在测试环境中。 我不明白你的意思 "我复制了私钥并把它移到了测试目录并更改了权限,它现在被删除了。" - 你是从/home/user/.ssh
加载密钥,而不是测试目录。为什么文件被删除? + 如果您生成新的 RSA 密钥,您会遇到同样的问题吗?
抱歉,让我解释一下。当我认为它可能是一个权限问题时,我没有在我的 .ssh 目录和其中的文件上使用权限,而是复制了 id_rsa 并将其移动到包含 paramiko 脚本的目录中。我调整了脚本中的路径以反映这一变化。然后我调整了该文件和目录的权限。在这继续失败之后,我删除了 id_rsa 的副本,然后将脚本中的路径改回了现在所在的 .ssh 目录。我会尝试一个新的密钥,在交互式 shell 中运行时,奇怪的密钥可以正常工作。
【参考方案1】:
我遇到了类似的情况,ssh-keygen 来帮助我。您应该复制 id_rsa 并使用 ssh-keygen 将其转换为 RSA 类型,然后将该路径提供给“key_filename”
将“BEGIN OPENSSH PRIVATE KEY”转换为“BEGIN RSA PRIVATE KEY”
ssh-keygen -p -m PEM -f ~/.ssh/id_rsa
【讨论】:
以上是关于paramiko 仅作为 cron 作业无效 RSA 私钥 [重复]的主要内容,如果未能解决你的问题,请参考以下文章