Автоматическое выполнение ssh-keygen с помощью Paramiko

#python #ssh #paramiko #ssh-keygen

#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 запрашивается местоположение и парольная фраза (два раза). Все, что я обычно делаю, это нажимаю enter три раза, когда в интерактивной оболочке. Но здесь, поскольку я подключен к master by 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:

Не пытайтесь имитировать пользовательский ввод.

Используйте -f и -N переключатели командной строки ssh-keygen :

 ssh-keygen -f keyfile -N ""