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?

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 ''

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"

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 ''

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 ''

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)


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.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.