Ssh-keygen otomatis tanpa frasa sandi, bagaimana?

86

Saya ingin membuat skrip otomatis yang memanggil ssh-keygendan 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 -qpilihan 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

humanityANDpeace
sumber

Jawaban:

105

Ini akan mencegah muncul frasa sandi dan mengatur pasangan kunci untuk disimpan dalam plaintext (yang tentu saja membawa semua kerugian dan risiko itu):

ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q -N ""
humanityANDpeace
sumber
3
Ini bekerja. Dalam kasus /tmp/sshkeysudah ada satu mendapat prompt menimpa. Ini dapat dicegah melalui mengarahkan / menutup stdin - misalnya melalui penambahan 0>&-.
maxschlepzig
34

Cara paling sederhana yang saya temukan untuk melakukan apa yang Anda inginkan adalah ini (contoh menggunakan nama file default)

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

Jika ~/.ssh/id_rsafile 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.

JoaoCC
sumber
dikonfirmasi: di lubuntu 14.04.2
user77115
Jika Anda benar-benar menginginkannya tenang, kirimkan output ke / dev / null:cat /dev/zero | ssh-keygen -q -N "" > /dev/null
Chris Gregg
Pada (diakui antik) SLES 11 perintah di atas gagal menghasilkan kunci. 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.
zrajm
Diverifikasi pada Ubuntu
trusty
2
Kenapa kamu kucing / dev / nol?
maxschlepzig
9

Ini bekerja untuk saya:

ssh-keygen -t rsa -f /home/oracle/.ssh/id_rsa -q -P ""

Ini -Padalah opsi frasa sandi, dan ""merupakan frasa sandi kosong.

gowrish
sumber
key_save_private: Tidak ada file atau direktori seperti itu
Dimitri Kopriwa
5
The -P <passphrase>pilihan adalah untuk menyediakan (tua) passphrase. linux.die.net/man/1/ssh-keygen
Gianfranco P.
5

Anda dapat menggunakan harapkan untuk mengirim "enter" untuk Anda

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\"
")

Namun perlu diperhatikan, bahwa jika file / tmp / sshkey sudah ada maka akan gagal karena output dari perintah akan berbeda.

BitsOfNix
sumber
1
terima kasih atas kontribusinya. harapan tampaknya bahkan lebih fleksibel untuk masalah dalam jenis yang sama .... baik yang mana skrip dan interaksi pengguna akan konflik. Saya akan mengetahui potensi conflicht bahwa / tmp / sshkey sudah ada dan periksa sebelum menggunakan perintah Anda.
humanityANDpeace
2

Saya melakukan gema sederhana sebelum ssh-keygen. Begitusu - <user> -c "echo |ssh-keygen -t rsa"

Ini diuji pada Redhat 6

koopsj
sumber
Saya tidak berpikir ini adalah jawaban terbaik, tapi saya pikir tidak ada alasan untuk menurunkan suara juga, kawan.
cubuspl42
0

Untuk pengguna lain, diuji pada Ubuntu 18.04:

sudo -u username bash -c "ssh-keygen -f /tmp/sshkey -N ''"
Jeroen Vermeulen - MageHost
sumber