Tidak ada jawaban yang melakukan persis seperti yang diharapkan. Perilaku yang diinginkan:jalankan ssh-keygen dengan pengaturan default (seperti jika kita baru saja mengirim spam Enter) tanpa pernah meminta input.
Perintah untuk menjalankan adalah:
yes '' | ssh-keygen -N '' > /dev/null
tinggalkan>/dev/null jika Anda ingin mencetak keluaran.
Penjelasan:
yes y
spam 'y', yang dipahami ssh-keygen secara harfiah dan membuat kunci dalam $PWD/y dan $PWD/y.pub . yes ''
spam baris kosong (Enter) yang kita inginkan. Menentukan file dengan -f ~/.ssh/id_rsa gagal jika direktori .ssh tidak ada. Opsi -t rsa tidak diperlukan jika rsa adalah tipe default (tetap saja kami memasukkan spam). Frasa sandi tidak dibaca dari stdin (tempat kami melakukan spamming) tetapi dari keyboard secara langsung sehingga tidak ada yang dapat mencegatnya. Untuk alasan ini, Anda perlu menentukan -N '' untuk frasa sandi kosong.
Bagi saya, saya harus menggunakan kombinasi jawaban @Lukasz dan @Juan one, saat menggunakan perintah ssh
ssh -p$SSH_PORT -q [email protected]$INSTANCE_IP 'yes y | ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa'
Jika Anda tidak ingin meminta pengguna untuk file tempat menyimpan kunci, Anda dapat menambahkan flag output file -f
ke perintah.
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
Dengan cara ini pengguna tidak akan dimintai masukan apa pun - kecuali id_rsa file sudah ada.
Kita harus menyelesaikan dua langkah otomatis:
-
Masukkan frasa sandi . Gunakan
-N
flag (batalkan string untuk contoh ini):ssh-keygen -t rsa -N ''
-
Timpa file kunci :
Gunakan -f
untuk memasukkan jalur (dalam contoh ini id_rsa
) ditambah string di sini untuk menjawab ya ke pertanyaan berikut:
ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y >/dev/null 2>&1
Atau, di bawah bash
seperti shell, Jika Anda pasti ingin menimpa yang sebelumnya , gunakan hanya string di sini untuk memberi makan perintah dengan segala kebutuhan masukan :
ssh-keygen -q -t rsa -N '' <<< $'\ny' >/dev/null 2>&1
Dari ssh-keygen
pria halaman:
-N new_passphrase provides the new passphrase. -q silence ssh-keygen. -f filename specifies the filename of the key file.
Penjelasan langkah demi langkah
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/klashxx/.ssh/id_rsa):
1 ) Untuk menghindari memasukkan kunci, gunakan -f
:
$ ssh-keygen -t rsa -f ~/.ssh/id_rsa
Generating public/private rsa key pair.
/home/klashxx/.ssh/id_rsa already exists.
Overwrite (y/n)?
PERHATIAN :Jika Anda tidak peduli dengan nama file RSA dan tentunya ingin menimpa yang sebelumnya, periksa petunjuk di bawah poin empat.
2 ) Sekarang kita perlu menjawab "y " secara otomatis ke timpa pertanyaan (mari gunakan here-string untuk pekerjaan itu):
$ ssh-keygen -t rsa -f ~/.ssh/id_rsa <<< y
Generating public/private rsa key pair.
/home/klashxx/.ssh/id_rsa already exists.
Overwrite (y/n)? Enter passphrase (empty for no passphrase):
3 ) Terakhir kita akan menggunakan -N
tandai untuk memasukkan kartu kosong:
$ ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa <<< y
Generating public/private rsa key pair.
/home/klashxx/.ssh/id_rsa already exists.
Overwrite (y/n)? Your identification has been saved in /home/klashxx/.ssh/id_rsa.
Your public key has been saved in /home/klashxx/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Xo0t6caMB/8TSsigxfY28JIfqYjyqxRZrFrPncx5yiU [email protected]
The key's randomart image is:
+---[RSA 2048]----+
| |
| . |
| o . |
| + * = |
| +. + BSo= o |
|...o.+o+XO... |
|.. .o.E==+B. . |
|o . ...=.o... |
|.+o. o .. |
+----[SHA256]-----+
4 ) Bola ekstra , bersihkan hasilnya, cukup periksa kembali kode:
$ ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y >/dev/null 2>&1
$ echo $?
0
Jalur alternatif untuk menimpa file RSA sebelumnya (tidak perlu tanda -f)
CATATAN :Hanya bash
seperti kerang.
Jika Anda tidak peduli dengan nama RSA dan hanya ingin menimpanya, kami perlu menjawab dua pertanyaan ini secara otomatis:
Masukkan file untuk menyimpan kunci:/example/path/.ssh/id_rsa sudah ada.
Timpa (y/t)?
Jika kita melakukannya dengan tangan, untuk pertanyaan pertama kita hanya perlu menekan enter , dan untuk yang kedua, ketik y
dan tekan enter
.
Kita dapat menyimulasikan tindakan ini dengan menggunakan here-string berikut :
$'\ny'
Dari bash
halaman manual:
Kata-kata dalam bentuk $'string' diperlakukan secara khusus. Kata diperluas menjadi "string", dengan karakter yang di-escape garis miring terbalik diganti seperti yang ditentukan oleh standar ANSI C.
\n baris baru
Jadi, jika kita menggunakan od
untuk menganalisis string kami:
cat - <<< $'\ny' | od -c
0000000 \n y \n
Kami melihat bahwa kami mendapatkan apa yang kami butuhkan untuk menjawab pertanyaan.
Poin 1 dan 2 dapat diringkas menjadi :
ssh-keygen -q -t rsa <<< $'\ny'
Dan perintah terakhir akan menjadi:
$ ssh-keygen -q -t rsa -N '' <<< $'\ny' >/dev/null 2>&1
$ echo $?
0
Kudos
@lukasz-dynowski, @redochka, @mellow-yellow, @yeti, dan orang-orang lainnya di utas ini.