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

时间:2015-10-30 20:05:00

标签: python amazon-ec2

我正在尝试使用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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

所以我想出了我的问题。这一行出错:

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])

我仍然不知道为什么会出现这个问题,但它现在有效。