使用Paramiko自动执行ssh-keygen

时间:2019-04-14 06:45:38

标签: python ssh paramiko ssh-keygen

我有一个lxd容器master,它的IP为10.154.151.8。我想通过本机上的ssh-keygen在其上执行ssh。也就是说,

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('10.154.151.8',username='root')
stdin,stdout,stderr = ssh.exec_command('ssh-keygen')

我在这里面临的问题是,在发出命令ssh-keygen之后,将询问 location passphrase (两次)。我通常要做的就是在交互式外壳中按 enter 三次。但是在这里,由于我是通过master连接到ssh的,所以不能这样做。输出为:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/rohit/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/rohit/.ssh/id_rsa.
Your public key has been saved in /home/rohit/.ssh/id_rsa.pub.
The key fingerprint is:

所以我尝试做:

stdin.write("\n")
stdin.write("\n")
stdin.write("\n")

但这并没有创建id_rsa.pub文件。

类似地,我尝试了:

stdin.write("") 
stdin.write("") 
stdin.write("") 

但是那也不起作用。

那么,我在这里做什么错了?

此外,还有其他方法(最好使用paramiko)来生成id_rsa.pub文件吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

不要尝试模拟用户输入。

使用-f-Nssh-keygen命令行开关:

ssh-keygen -f keyfile -N ""