Automatizado ssh-keygen sem passphrase, como?

66

Eu gostaria de fazer um script automatizado que chame ssh-keygen e crie alguns pares de chaves de pub / private que eu usarei mais tarde. Em princípio tudo funciona bem com ....
ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q
... exceto que me pede a frase secreta que criptografaria as chaves. Este make -at apresenta a automatização difícil.

Eu poderia fornecer uma senha por meio do argumento de linha de comando -N thepassphrase , para evitar que o prompt aparecesse. Mesmo assim, eu nem desejo ter as chaves - adicionalmente protegidas por criptografia - e quero que os keypairs sejam de texto simples.

Qual é a melhor solução para esse problema?

A opção -q , que supostamente significa "silenciosa / silenciosa", ainda não evita a interação da frase secreta. Também não encontrei algo parecido com isto ssh-keygen ...... -q --no-passphrase

Por favor, não comece a pregar sobre o assunto pró e contras da "frase em falta", estou ciente disso. No formulário interativo (não como um script), o usuário pode simplesmente pressionar [ENTER] duas vezes e a chave será salva como texto simples. Isso é o que eu quero alcançar em um script como este:

#!/bin/bash

command1
command2
var=$(command3)

# this should not stop the script and ask for password
ssh-kegen -b 2048 -t rsa -f /tmp/sshkey -q

    
por humanityANDpeace 27.03.2013 / 13:16

5 respostas

81

Isso evitará que o prompt de frase secreta apareça e defina o par de chaves a ser armazenado em texto simples (o que obviamente traz todas as desvantagens e riscos disso):

ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q -N ""
    
por 27.03.2013 / 13:30
27

A maneira mais simples que encontrei para fazer o que você quer é isso

    cat /dev/zero | ssh-keygen -q -N ""

Se o arquivo ~ / ssh / id_rsa já existir, o comando sairá. Se não, você recebe uma nova chave.

    
por 08.06.2014 / 12:21
7

Isso funcionou para mim:

ssh-keygen -t rsa -f /home/oracle/.ssh/id_rsa -q -P ""

A -P é a opção de frase secreta e "" é a frase secreta vazia.

    
por 17.01.2016 / 07:59
4

Você pode usar esperar para enviar o "enter" para você

cat test.sh
#!/bin/bash
set -x
XYZ=$(expect -c "
spawn ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q
expect \"Enter passphrase (empty for no passphrase):\"
send \"\r\"
expect \"Enter same passphrase again:\"
send \"\r\"
")

Mas esteja ciente de que, se o arquivo / tmp / sshkey já existir, ele falhará porque a saída do comando será diferente.

    
por 27.03.2013 / 14:40
0

Eu fiz um eco simples antes do ssh-keygen. Então su - <user> -c "echo |ssh-keygen -t rsa"

Isso foi testado no Redhat 6

    
por 29.05.2015 / 10:08

Tags