113

I would like to create script, which simply runs ssh-keygen -t rsa. But how to pass to it 3 times enter?

5 Answers 5

236

Try:

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

-N "" tells it to use an empty passphrase (the same as two of the enters in an interactive script)

-f my.key tells it to store the key into my.key (change as you see fit).

The whole thing runs without you needing to supply any enter keys :)

To send enters to an interactive script:

echo -e "\n\n\n" | ssh-keygen -t rsa
Sign up to request clarification or add additional context in comments.

11 Comments

It is correct anwser, but i still would like to know how to press enter more then one time - in another script.
Sure thing - updated the answer to include how to send newlines to a script.
echo -e "\n\n\n" | sshkeygen -t rsa is not working for me, can you try it yourself? It pass only first enter. But on other, simple script it works.
I tested it before I posted it - it works fine, although it looks like the dash from ssh-keygen got dropped - did you add that back in? {edited} Also - you can't run the script more than once - it changes the questions to confirm you want to overwrite the existing _rsa keyfile (so a y or n needs to be supplied)
I'd recommend using yes "" instead of echo -e "\n\n\n" (yes outputs whatever argument is given [or "y" by default] in infinity – perfect for these situations where one just want to provide a "yes" answer to whatever a program might prompt for). yes is shorter, and should ssh-keygen ever add a question, that will automatically be answered in too. :)
|
24

a version with passphrase is:

$ ssh-keygen -t rsa -b 4096 -C "comment" -P "examplePassphrase" -f "desired pathAndName" -q 
  • the -q is for silent

Source is http://linux.die.net/man/1/ssh-keygen

2 Comments

Use -P for an existing passphrase, use -N for a new one
what is q for? what is the use of silent
5

Agree with Michel Marro except that it needs some more: If the file already exists, it will still be interactive asking if it has to overwrite it.

Use the answer of this question.

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

The redirection to null is necessary to silence the overwrite message.

Comments

4

It is recommended to use ed25519 for security and performance.

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

here

-o OpenSSH key format instead of older PEM (needs OpenSSH 6.5+)

-a Number of primality test while screening DH-GEX candidates

-t Type of key (ed25519, RSA, DSA etc.)

-f /mypath/bla The output file path and name

-N "" Use empty passphase

and yes "y" for no interaction.

It will generate two files

/mypath/bla
/mypath/bla.pub

where the bla file is private and bla.pub is public.

Comments

1
echo -e "\n"|ssh-keygen -t rsa -N ""

3 Comments

Eh? This actually has fewer newlines than one of the answers you claim don't work (and that's on the subset of platforms where echo -e emits something other than -e at all, which is not everywhere ssh-keygen is available).
...to be clear, I make production use of ssh-keygen -N '' as part of an automated install procedure, and it doesn't read stdin at all, so there's no need for the echo (any echo variant) piped into it. (Granted, I believe stdin is connected to /dev/null in my production use case; there could well be different behavior when it's attached to a TTY, but the better answer is </dev/null rather than echo ... |)
It prompts me for a filename: $ ssh-keygen -t rsa -N '' Generating public/private rsa key pair. Enter file in which to save the key (/home/dlyons/.ssh/id_rsa):

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.