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 ""
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
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 ""
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.
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.
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.
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