Automatizando pressionamentos de tecla “enter” para script bash gerando chaves ssh

101

Eu gostaria de criar um script que simplesmente seja executado ssh-keygen -t rsa. Mas como passar para ele entrar 3 vezes?

Sławosz
fonte

Respostas:

217

Experimentar:

ssh-keygen -t rsa -N "" -f my.key

-N "" diz a ele para usar uma senha longa vazia (a mesma que duas das entradas em um script interativo)

-f my.keydiz a ele para armazenar a chave em my.key(mude como achar necessário).

A coisa toda funciona sem que você precise fornecer nenhuma tecla enter :)

Para enviar entradas para um script interativo:

echo -e "\n\n\n" | ssh-keygen -t rsa
Rudu
fonte
4
Está correto anwser, mas ainda gostaria de saber como pressionar Enter mais de uma vez - em outro script.
Sławosz
3
Com certeza - atualizou a resposta para incluir como enviar novas linhas para um script.
Rudu,
2
echo -e "\ n \ n \ n" | sshkeygen -t rsa não está funcionando para mim, você pode tentar você mesmo? Passe apenas primeiro entre. Mas em outro script simples funciona.
Sławosz
1
Eu testei antes de postá-lo - ele funciona bem, embora pareça que o traço ssh-keygencaiu - você o adicionou de volta? {editado} Além disso - você não pode executar o script mais de uma vez - ele muda as perguntas para confirmar que você deseja sobrescrever o _rsaarquivo de chave existente (portanto, ay ou n precisa ser fornecido)
Rudu
13
Eu recomendaria usar em yes ""vez de echo -e "\n\n\n"( yesproduz qualquer argumento fornecido [ou "y" por padrão] no infinito - perfeito para essas situações em que se deseja apenas dar uma resposta "sim" para qualquer coisa que um programa possa solicitar). yesé mais curto e deve ssh-keygensempre adicionar uma pergunta, que também será respondida automaticamente. :)
zrajm
22

uma versão com senha é:

$ ssh-keygen -t rsa -b 4096 -C "comment" -P "examplePassphrase" -f "desired pathAndName" -q 
  • o -q é para silêncio

A fonte é http://linux.die.net/man/1/ssh-keygen

Michel Marro
fonte
4
Use -P para uma senha já existente, use -N para uma nova
brianlmerritt
1

Concordo com Michel Marro, exceto que precisa de mais alguns: Se o arquivo já existir, ele ainda será interativo perguntando se deve sobrescrevê-lo.

Use a resposta desta pergunta .

yes y | ssh-keygen -q -t rsa -N '' >/dev/null

O redirecionamento para nulo é necessário para silenciar a mensagem de substituição.

shamox
fonte
0
echo -e "\n"|ssh-keygen -t rsa -N ""
Mannix
fonte
Eh? Na verdade, isso tem menos novas linhas do que uma das respostas que você afirma não funcionar (e isso está no subconjunto de plataformas onde echo -eemite algo diferente de -etudo, que não ssh-keygenestá disponível em todos os lugares ).
Charles Duffy
... para ser claro, eu faço uso de produção ssh-keygen -N ''como parte de um procedimento de instalação automatizado, e ele não lê stdin, então não há necessidade de echo( qualquer echo variante) canalizado nele. (Concedido, acredito que stdin está conectado /dev/nullem meu caso de uso de produção; pode haver um comportamento diferente quando ele está vinculado a um TTY, mas a melhor resposta é </dev/nullao invés de echo ... |)
Charles Duffy
1
Ele me solicita um nome de arquivo: $ ssh-keygen -t rsa -N '' Generating public/private rsa key pair. Enter file in which to save the key (/home/dlyons/.ssh/id_rsa):
Mannix
0

É recomendado usar ed25519 para segurança e desempenho.

yes "y" | ssh-keygen -o -a 100 -t ed25519 -C "Bla Bla" -f /mypath/bla -N ""

aqui

-o Formato de chave OpenSSH em vez do PEM mais antigo (requer OpenSSH 6.5+)

-a Número de teste de primalidade durante a triagem de candidatos DH-GEX

-t Tipo de chave (ed25519, RSA, DSA etc.)

-f /mypath/bla O caminho e nome do arquivo de saída

-N "" Use a passphase vazia

e yes "y"sem interação.

Irá gerar dois arquivos

/mypath/bla
/mypath/bla.pub

onde o blaarquivo é privado e bla.pubpúblico.

Madan Sapkota
fonte