Automatyzacja naciśnięć klawiszy „enter” dla skryptu bash generującego klucze ssh

102

Chciałbym stworzyć skrypt, który po prostu działa ssh-keygen -t rsa. Ale jak przejść do niego 3 razy wejść?

Sławosz
źródło

Odpowiedzi:

218

Próbować:

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

-N "" każe mu użyć pustego hasła (takiego samego jak dwa wpisy w interaktywnym skrypcie)

-f my.keykaże mu przechowywać klucz w my.key(zmień według własnego uznania).

Całość działa bez konieczności podawania jakichkolwiek klawiszy enter :)

Aby wysłać wpisy do interaktywnego skryptu:

echo -e "\n\n\n" | ssh-keygen -t rsa
Rudu
źródło
4
To jest poprawna odpowiedź, ale nadal chciałbym wiedzieć, jak naciskać enter więcej niż jeden raz - w innym skrypcie.
Sławosz
3
Jasne - zaktualizowałem odpowiedź, aby zawierała sposób wysyłania nowych linii do skryptu.
Rudu,
2
echo -e "\ n \ n \ n" | sshkeygen -t rsa nie działa dla mnie, czy możesz spróbować samemu? Mija tylko pierwsze wejście. Ale na innym prostym skrypcie to działa.
Sławosz
1
Przetestowałem go, zanim go opublikowałem - działa dobrze, chociaż wygląda na to, że ssh-keygenzostał upuszczony kreska - czy dodałeś to z powrotem? {edytowano} Ponadto - nie możesz uruchomić skryptu więcej niż jeden raz - zmienia pytania, aby potwierdzić, że chcesz nadpisać istniejący _rsaplik klucza (więc trzeba podać ay lub n)
Rudu
13
Zalecałbym użycie yes ""zamiast echo -e "\n\n\n"( yeswyświetla dowolny podany argument [lub domyślnie "y"] w nieskończoność - idealne w sytuacjach, w których chce się po prostu udzielić odpowiedzi "tak" na cokolwiek program może poprosić). yesjest krótszy i powinien ssh-keygenzawsze dodać pytanie, na które również zostanie automatycznie udzielona odpowiedź. :)
zrajm
22

wersja z hasłem to:

$ ssh-keygen -t rsa -b 4096 -C "comment" -P "examplePassphrase" -f "desired pathAndName" -q 
  • -q oznacza ciche

Źródło to http://linux.die.net/man/1/ssh-keygen

Michel Marro
źródło
4
Użyj -P dla istniejącego hasła, użyj -N dla nowego
brianlmerritt
1

Zgadzam się z Michelem Marro, tyle że potrzeba trochę więcej: jeśli plik już istnieje, nadal będzie interaktywny z pytaniem, czy musi go nadpisać.

Skorzystaj z odpowiedzi na to pytanie .

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

Przekierowanie do wartości null jest konieczne, aby wyciszyć wiadomość zastępującą.

shamox
źródło
0
echo -e "\n"|ssh-keygen -t rsa -N ""
Mannix
źródło
Ech? To faktycznie ma mniej nowych linii niż jedna z odpowiedzi, które twierdzisz, że nie działają (i to na podzbiorze platform, na których echo -eemituje coś innego niż -ew ogóle, co nie ssh-keygenjest wszędzie dostępne).
Charles Duffy
... żeby było jasne, używam programu produkcyjnego ssh-keygen -N ''jako części zautomatyzowanej procedury instalacji i nie czyta on w ogóle stdin, więc nie ma potrzeby podłączania do niego echo( żadnego echo wariantu). (To prawda, uważam, że stdin jest powiązany z /dev/nullmoim przypadkiem użycia w produkcji; może być inne zachowanie, gdy jest ono dołączone do urządzenia TTY, ale lepszą odpowiedzią jest </dev/nullraczej niż echo ... |)
Charles Duffy
1
Monituje mnie o nazwę pliku: $ 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

Zalecane jest używanie ed25519 ze względu na bezpieczeństwo i wydajność.

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

tutaj

-o Format klucza OpenSSH zamiast starszego PEM (wymaga OpenSSH 6.5+)

-a Liczba testów pierwszości podczas badań przesiewowych kandydatów DH-GEX

-t Typ klucza (ed25519, RSA, DSA itp.)

-f /mypath/bla Ścieżka i nazwa pliku wyjściowego

-N "" Użyj pustego hasła

i yes "y"bez interakcji.

Wygeneruje dwa pliki

/mypath/bla
/mypath/bla.pub

gdzie blaplik jest prywatny i bla.pubpubliczny.

Madan Sapkota
źródło