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 私钥 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Paramiko、私钥和 cron

每六个小时在 Linux 上运行一次 cron 作业

将 mySQL 查询作为 cron 作业运行?

如何在 AppEngine 中注销 CRON 作业?

cron 作业会杀死最后一个 cron 执行吗?

使用 libnotify 的 Python 3 脚本作为 cron 作业失败