Eu gostaria de criar um script automatizado que chame ssh-keygen
e crie alguns pares de chaves pub / particulares que usarei mais tarde. Em princípio, tudo funciona bem com ...
ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q
... exceto que ele me pede a senha que criptografaria as chaves. Isso faz com que a automação seja difícil.
Eu poderia fornecer uma senha através do argumento da linha de comando -N thepassphrase
, para impedir que o prompt apareça. Ainda assim, eu nem desejo ter as chaves - adicionalmente protegidas por criptografia - e quero que os pares de chaves sejam texto sem formatação.
Qual é a (a melhor) solução para esse problema?
A -q
opção que supostamente significa "silencioso / silencioso" 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 ou me ensinar os prós e os contras da "frase secreta que falta", estou ciente disso. Na forma interativa (não como um script), o usuário pode simplesmente pressionar [ENTER] duas vezes e a chave será salva como texto sem formatação. Isto é o que eu quero alcançar em um script como este:
#! / bin / bash command1 command2 var = $ (comando3) # isso não deve parar o script e pedir senha ssh-kegen -b 2048 -t rsa -f / tmp / sshkey -q
/tmp/sshkey
já exista, é possível obter um prompt de substituição. Isso pode ser evitado através do redirecionamento / fechamento do stdin - por exemplo, através da adição0>&-
.A maneira mais simples de encontrar o que você deseja é esta (exemplo, usando o nome de arquivo padrão)
Se o
~/.ssh/id_rsa
arquivo já existir, o comando será encerrado sem modificar nada.Caso contrário, você recebe uma nova chave nesse nome de arquivo.
De qualquer forma, você não substituiu nada e sabe que no final tem uma chave.
fonte
cat /dev/zero | ssh-keygen -q -N "" > /dev/null
yes "" | ssh-keygen -N "" >&- 2>&-
No entanto, funciona bem e não produz nada (se um arquivo de chave já existe ou não) e não substitui um arquivo de chave existente anteriormente.Isso funcionou para mim:
A
-P
é a opção de senha e""
é a senha vazia.fonte
-P <passphrase>
opção é fornecer a senha (antiga). linux.die.net/man/1/ssh-keygenVocê pode usar o expect para enviar o "enter" para você
Mas lembre-se de que, se o arquivo / tmp / sshkey já existir, ele falhará porque a saída do comando será diferente.
fonte
Eu fiz um eco simples antes do ssh-keygen. assim
su - <user> -c "echo |ssh-keygen -t rsa"
Isso foi testado no Redhat 6
fonte
Para outro usuário, testado no Ubuntu 18.04:
fonte