我正在尝试使用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
答案 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])
我仍然不知道为什么会出现这个问题,但它现在有效。