为什么我得到一个OSError:[Errno 2]试图生成一个公钥?

2024-04-19 21:07:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试从使用ec2/boto生成的私钥创建公钥,如下所示:

key_pair = ec2.create_key_pair(name)
private_key = '{}.pem'.format(name)

public_key = subprocess.check_output("ssh-keygen -y -f #{}".format(private_key))

一开始,我认为这可能是一个权限问题,所以我改变了如下权限:

os.chmod(private_key, 0o400)

但是,我仍然得到一个OSError[Errno 2]错误。错误如下所示

Traceback (most recent call last):   
    File "infrastructure.py", line 425, in <module>
        main(arguments)   
    File "infrastructure.py", line 374, in main   
        key_pair_name=arguments['--keypair'])   
    File "infrastructure.py", line 387, in create
        key_pair_name, key_pair_fingerprint, key_pair_pem = create_key_pair(key_pair_name, region)   
    File "infrastructure.py",line 65, in create_key_pair
        raise e   
OSError: [Errno 2] No such file or directory

Tags: keynameinpyformat权限createline
2条回答

尝试切换到subprocess的非shell解释的参数集。在此过程中,还可以考虑显式指定ssh-keygen的完整路径:

public_key = subprocess.check_output(["/usr/bin/ssh-keygen", "-y", "-f", private_key])

所以我发现了我的问题。此行出错:

public_key = subprocess.check_output("ssh-keygen -y -f #{}".format(private_key))

我通过以下方法解决了这个问题:

os.chmod(private_key, 0o400) command = "ssh-keygen -y -f {}".format(private_key) public_key = subprocess.check_output(['bash','-c', command])

我仍然不知道为什么会发生这个问题,但它现在起作用了。你知道吗

相关问题 更多 >