Saya ingin membuat skrip otomatis yang memanggil ssh-keygen
dan membuat beberapa pub / private keypairs yang akan saya gunakan nanti. Pada prinsipnya semuanya bekerja dengan baik ...
ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q
... kecuali bahwa ia meminta saya untuk frasa sandi yang akan mengenkripsi kunci. Ini membuat -pada saat ini- otomatisasi sulit.
Saya bisa memberikan frasa sandi melalui argumen baris perintah -N thepassphrase
, jadi untuk menjaga agar prompt tidak muncul. Tetap saya bahkan tidak ingin memiliki kunci - selain diamankan dengan enkripsi - dan ingin keypairs menjadi plaintext.
Apa solusi (terbaik) untuk masalah ini?
The -q
pilihan mana yang seharusnya berarti "tenang / diam" tidak masih belum menghindari interaksi passphrase. Saya juga belum menemukan yang seperti ini
ssh-keygen ...... -q --no-passphrase
Tolong jangan mulai berkhotbah tentang atau memberi kuliah kepada saya tentang pro dan kontra dari "frasa sandi yang hilang", saya tahu itu. Dalam bentuk interaktif (bukan sebagai skrip), pengguna cukup menekan [ENTER] dua kali dan kunci akan disimpan sebagai plaintext. Inilah yang ingin saya capai dalam skrip seperti ini:
#! / bin / bash command1 perintah2 var = $ (command3) # ini seharusnya tidak menghentikan skrip dan meminta kata sandi ssh-kegen -b 2048 -t rsa -f / tmp / sshkey -q
/tmp/sshkey
sudah ada satu mendapat prompt menimpa. Ini dapat dicegah melalui mengarahkan / menutup stdin - misalnya melalui penambahan0>&-
.Cara paling sederhana yang saya temukan untuk melakukan apa yang Anda inginkan adalah ini (contoh menggunakan nama file default)
Jika
~/.ssh/id_rsa
file sudah ada, perintah akan keluar tanpa mengubah apa pun.Jika tidak, Anda mendapatkan kunci baru, dalam nama file itu.
Either way, Anda belum menimpa apa pun, dan Anda tahu pada akhirnya Anda memiliki kunci.
sumber
cat /dev/zero | ssh-keygen -q -N "" > /dev/null
yes "" | ssh-keygen -N "" >&- 2>&-
berfungsi dengan baik namun dan tidak menghasilkan apa-apa (apakah keyfile sudah ada atau belum), dan tidak menimpa keyfile yang sudah ada sebelumnya.Ini bekerja untuk saya:
Ini
-P
adalah opsi frasa sandi, dan""
merupakan frasa sandi kosong.sumber
-P <passphrase>
pilihan adalah untuk menyediakan (tua) passphrase. linux.die.net/man/1/ssh-keygenAnda dapat menggunakan harapkan untuk mengirim "enter" untuk Anda
Namun perlu diperhatikan, bahwa jika file / tmp / sshkey sudah ada maka akan gagal karena output dari perintah akan berbeda.
sumber
Saya melakukan gema sederhana sebelum ssh-keygen. Begitu
su - <user> -c "echo |ssh-keygen -t rsa"
Ini diuji pada Redhat 6
sumber
Untuk pengguna lain, diuji pada Ubuntu 18.04:
sumber