Automatize o ssh-keygen -t rsa para que não solicite uma senha

164

Eu preciso automatizar ssh-keygen -t rsasem uma senha, ou seja, entrar no prompt.
Como posso fazer isso a partir de um script de shell?

Tampa
fonte

Respostas:

230

Para gerar um par de chaves SSH sem ser solicitada uma senha, você pode fazer o seguinte:

$ ssh-keygen -f id_rsa -t rsa -N ''
Shamoon
fonte
2
Trabalhou para mim! Github sempre solicitada uma senha sem a opção -N mesmo quando não está entrando em um passwort após o promt "Enter passphrase (vazio para nenhum passphrase)"
Hollerweger
4
No RHEL 6, recebi este erro: " ssh-keygen: option requires an argument -- N" :(
Anthony O.
1
OK, isso foi porque eu usei o dzdocomando na frente dele, então tive que escrever:dzdo -i -u target_user ssh-keygen -f id_rsa -t rsa -N "''"
Anthony O.
1
Parece que o espaço que separa a opção e a senha vazia -N ''é significativo. Quando adicionei o espaço, ele conseguiu!
GH05T #
33

Se você precisar fazer isso no PowerShell no Windows, use:

ssh-keygen -f $Name -t rsa -N '""'

note que você também precisa garantir que o diretório git bin esteja no seu caminho:

$sshPath = "<path>\git\bin\"

$env:path += ";$sshPath"

Então, para usá-lo no PoshGit, basta:

Add-SshKey "<path>\.shh\KeyFilename"
Daniel Little
fonte
Obrigado por isso. BTW, git\usr\biné o dir correto.
majkinetor
4
Isso não funciona para mim. Eu recebo o erro "Falha ao salvar a chave" mykey ": senha muito curta (mínimo de quatro caracteres)". Eu tive que mudar as aspas duplas / simples, por exemplo ssh-keygen -f $Name -t rsq -N '""'.
Aaron Jensen
1
@AaronJensen o mesmo para mim. Obrigado pela correção. Eu usei'""'
Trevor Sullivan
@AaronJensen Thanks! '""'é a única variante que funcionou para mim.
Somnium
@ Daniel-Little Não consigo encontrar um módulo PoshGit, o único que encontro com esse nome é posh-git, que parece não ter esse cmdlet. Mais alguma informação sobre isso?
Jim
18
$ ssh-keygen -f $HOME/.ssh/id_rsa -t rsa -N ''
GMaster
fonte
Esta resposta é essencialmente copiar e colar da resposta Shamoon
21-18
@ oᴉɹǝɥɔ A resposta de Shamoon não especifica explicitamente o caminho para a chave privada.
GMaster
11

Apenas uma correção para responder 2 ... Eu descobri no meu sistema OL e RHEL o nome do arquivo deve ser id_rsa, não id.rsa.

Portanto, em um sistema OL ou RHEL, o comando seria:

$ ssh-keygen -f id_rsa -t rsa -N ''
ASHU
fonte
2
Tanto quanto eu entendi, id_rsaé o nome do arquivo padrão para uma chave RSA; portanto, se você deseja manter o padrão, não é obrigado a usar explicitamente a -fopção.
danidemi
3
@danidemi enquanto você estiver certo de que é o padrão, uma razão para especificar a -fopção é para que você possa executar isso em um script. Você pode apenas reafirmar o padrão para desativar o prompt subseqüente.
Tristan Reid
9

A respeito :

ssh-keygen -q -t rsa -f ~/.ssh/id_rsa -N ''

Conforme observado em man ssh-keygen:

SYNOPSIS
     ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1] [-N new_passphrase] [-C comment] [-f output_keyfile]
(...)
      -q      Silence ssh-keygen.

(isto é, com openssh-clientpacote no Debian 9.4 trecho: OpenSSH_6.7p1 Debian-5+deb8u4)

Manumie
fonte
Trabalhou para mim obrigado. (OpenSSH_7.6p1 Ubuntu-4ubuntu0.2)
David Webster
0

Eu precisava automatizar em um script bash o comando ssh-keygen e a resposta final que funciona bem para mim:

echo -e "\n" | ssh-keygen -N "" &> /dev/null

O comando echo com -e interpreta "\ n" como uma tecla Enter, mas não funciona com a senha. Em seguida, usando a opção -N "" (senha vazia) a senha ficará vazia e não solicitará nada. &> / dev / null enviará 'stdout' e 'stderr' para / dev / null, para que nada seja impresso na tela.

mponceantolin
fonte
0
$ printf '\n' | ssh-keygen -N ''
Yang Young
fonte