Zautomatyzuj ssh-keygen -t rsa, aby nie pytał o hasło

164

Muszę zautomatyzować ssh-keygen -t rsabez hasła, tj. Wejść po monicie.
Jak mogę to zrobić ze skryptu powłoki?

Tampa
źródło

Odpowiedzi:

230

Aby wygenerować parę kluczy SSH bez pytania o hasło, możesz wykonać następujące czynności:

$ ssh-keygen -f id_rsa -t rsa -N ''
Shamoon
źródło
2
Pracował dla mnie! Github zawsze pytał o hasło bez opcji -N, nawet jeśli nie wprowadzono hasła po komunikacie „Wprowadź hasło (puste, jeśli nie ma hasła)”
Hollerweger
4
Na RHEL 6 pojawił się ten błąd: „ ssh-keygen: option requires an argument -- N” :(
Anthony O.
1
OK, to dlatego, że użyłem dzdoprzed nim polecenia, więc musiałem napisać:dzdo -i -u target_user ssh-keygen -f id_rsa -t rsa -N "''"
Anthony O.
1
Wydaje się, że spacja oddzielająca opcję od pustego hasła -N ''jest znacząca. Kiedy dodałem przestrzeń, udało się!
GH05T
33

Jeśli musisz to zrobić z PowerShell w systemie Windows, użyj:

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

pamiętaj, że musisz również upewnić się, że katalog git bin znajduje się w twojej ścieżce:

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

$env:path += ";$sshPath"

Aby użyć go w PoshGit, wystarczy:

Add-SshKey "<path>\.shh\KeyFilename"
Daniel Little
źródło
Dzięki za to. BTW, git\usr\binto poprawny reż.
majkinetor
4
To nie działa na mnie. Pojawia się błąd „Zapisywanie klucza„ mykey ”nie powiodło się: zbyt krótkie hasło (minimum cztery znaki)”. Musiałem zamienić podwójne / pojedyncze cudzysłowy, np ssh-keygen -f $Name -t rsq -N '""'.
Aaron Jensen
1
@AaronJensen to samo dla mnie. Dzięki za poprawkę. Użyłem'""'
Trevor Sullivan
@AaronJensen Thanks! '""'to jedyny wariant, który u mnie zadziałał.
Somnium
@ Daniel-Little Nie mogę znaleźć modułu PoshGit, jedyny jaki znalazłem o tej nazwie to posh-git, który nie wydaje się mieć tego cmdletu. Jakieś więcej informacji na ten temat?
Jim
18
$ ssh-keygen -f $HOME/.ssh/id_rsa -t rsa -N ''
GMaster
źródło
Ta odpowiedź jest zasadniczo skopiowana i
wklejona
@ oᴉɹǝɥɔ Odpowiedź Shamoon nie określa jawnie ścieżki do klucza prywatnego.
GMaster
11

Tylko poprawka do odpowiedzi 2 ... Dowiedziałem się, że na moim systemie OL i RHEL nazwa pliku powinna być id_rsa, a nie id.rsa.

Tak więc w systemie OL lub RHEL polecenie wyglądałoby tak:

$ ssh-keygen -f id_rsa -t rsa -N ''
ASHU
źródło
2
O ile zrozumiałem, id_rsajest to domyślna nazwa pliku dla klucza RSA, więc jeśli chcesz pozostać przy domyślnej, nie musisz jawnie używać tej -fopcji.
danidemi
3
@danidemi, chociaż masz rację, że jest to -fopcja domyślna, jednym z powodów określenia tej opcji jest to, że możesz ją wykonać w skrypcie. Możesz po prostu potwierdzić ustawienie domyślne, aby wyłączyć kolejny monit.
Tristan Reid
9

Co powiesz na :

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

Jak zauważono w 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.

(to jest z openssh-clientopakowania w Debian 9,4 odcinku: OpenSSH_6.7p1 Debian-5+deb8u4)

Manumie
źródło
Pracował dla mnie dzięki. (OpenSSH_7.6p1 Ubuntu-4ubuntu0.2)
David Webster,
0

Musiałem zautomatyzować w skrypcie bash polecenie ssh-keygen i ostateczną odpowiedź, która działa dobrze:

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

Polecenie echo z -e interpretuje "\ n" jako klawisz Enter, ale nie działa z hasłem. Następnie używając opcji -N "" (puste hasło) hasło będzie puste i nie będzie o nic pytać. &> / dev / null wyśle ​​'stdout' i 'stderr' do / dev / null, więc nic nie jest drukowane na wyświetlaczu.

mponceantolin
źródło
0
$ printf '\n' | ssh-keygen -N ''
Yang Young
źródło