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

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

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.


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


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.


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


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.