Zautomatyzowane keygen ssh bez hasła, jak?


86

Chciałbym stworzyć zautomatyzowany skrypt, który wywołuje ssh-keygeni tworzy parę kluczy publicznych / prywatnych, których będę używać później. Zasadniczo wszystko działa dobrze z ...
ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q
... oprócz tego, że prosi mnie o hasło, które szyfruje klucze. To utrudnia automatyzację.

Mogę podać hasło za pomocą argumentu wiersza poleceń -N thepassphrase, aby nie wyświetlać monitu. Nadal nie chcę mieć kluczy - dodatkowo zabezpieczonych przez szyfrowanie - i chcę, aby klucze były jawnym tekstem.

Jakie jest (najlepsze) rozwiązanie tego problemu?

-qOpcja, która podobno oznacza „quiet / silent” ma wciąż nie uniknąć interakcji hasłem. Nie znalazłem też czegoś takiego
ssh-keygen ...... -q --no-passphrase

Proszę, nie zaczynajcie wygłaszać kazań i wykładów na temat zalet i wad „brakującego hasła”, jestem tego świadomy. W interaktywnej formie (nie jako skrypt) użytkownik może po prostu dwukrotnie nacisnąć [ENTER], a klucz zostanie zapisany jako zwykły tekst. Oto, co chcę osiągnąć w skrypcie takim jak ten:

#! / bin / bash

polecenie 1
polecenie 2
var = $ (polecenie3)

# nie powinno to zatrzymać skryptu i poprosić o hasło
ssh-kegen -b 2048 -t rsa -f / tmp / sshkey -q

Odpowiedzi:


105

Zapobiegnie to pojawieniu się monitu o hasło i ustawi parę kluczy do przechowywania w postaci zwykłego tekstu (co oczywiście niesie ze sobą wszystkie wady i ryzyko):

ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q -N ""

3
To działa. W przypadku, gdy /tmp/sshkeyjuż istnieje, pojawia się monit o zastąpienie. Można temu zapobiec poprzez przekierowanie / zamknięcie standardowego wejścia - np. Poprzez dodanie 0>&-.
maxschlepzig

34

Najprostszym sposobem na zrobienie tego, co chcesz, jest to (przykład z użyciem domyślnej nazwy pliku)

    cat /dev/zero | ssh-keygen -q -N ""

Jeśli ~/.ssh/id_rsaplik już istnieje, polecenie zostanie zakończone bez modyfikowania czegokolwiek.

Jeśli nie, otrzymasz nowy klucz w tej nazwie pliku.

Tak czy inaczej, niczego nie nadpisałeś, a na końcu wiesz, że masz klucz.


potwierdzono: w dniu lubuntu 14.04.2
użytkownik77115

Jeśli naprawdę chcesz, żeby było cicho, potokuj dane wyjściowe do / dev / null:cat /dev/zero | ssh-keygen -q -N "" > /dev/null
Chris Gregg

Na (co prawda antycznym) SLES 11 powyższe polecenie nie generuje klucza. yes "" | ssh-keygen -N "" >&- 2>&-działa jednak dobrze i nie generuje niczego (niezależnie od tego, czy plik klucza już istnieje) i nie zastępuje wcześniej istniejącego pliku klucza.
zrajm

Zweryfikowano na Ubuntu (14.04)
Binita Bharati,

2
Dlaczego cat / dev / zero?
maxschlepzig


5

Możesz użyć opcji „wyślij” dla siebie

cat test.sh
#!/bin/bash
set -x
XYZ=$(expect -c "
spawn ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q
expect \"Enter passphrase (empty for no passphrase):\"
send \"\r\"
expect \"Enter same passphrase again:\"
send \"\r\"
")

Należy jednak pamiętać, że jeśli plik / tmp / sshkey już istnieje, zakończy się niepowodzeniem, ponieważ wynik działania polecenia będzie inny.


1
dziękuję za wkład. oczekiwanie wydaje się jeszcze bardziej uniwersalne w przypadku problemów tego samego rodzaju ... no cóż, tych, w których skrypty i interakcja z użytkownikiem kolidowałyby. Będę świadomy potencjalnego konfliktu, że / tmp / sshkey już istnieje i sprawdzę go przed użyciem polecenia.
ludzkośćANDpeace

2

Zrobiłem proste echo przed ssh-keygen. Więcsu - <user> -c "echo |ssh-keygen -t rsa"

Zostało to przetestowane na Redhat 6


Nie wydaje mi się, żeby to była najlepsza odpowiedź, ale myślę, że nie ma też powodu, by głosować negatywnie, chłopaki.
cubuspl42,

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.