パスフレーズなしの自動化されたssh-keygen、どのように?


86

ssh-keygen後で使用するいくつかのpub / privateキーペアを呼び出して作成する自動スクリプトを作成したいと思います。原則として、すべてが正常に機能します
ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q
。......キーを暗号化するパスフレーズを要求されることを除きます。これにより、現在の自動化が困難になります。

コマンドライン引数を介してパスフレーズを提供-N thepassphraseして、プロンプトが表示されないようにすることができます。それでも、暗号化によってさらにセキュリティで保護されたキーを持つことさえ望んでおらず、キーペアをプレーンテキストにしたいです。

この問題に対する(最良の)解決策は何ですか?

-qおそらく「/静かなサイレント」を意味オプションは、まだパスフレーズの相互作用を回避していません。また、私はこのようなものを見つけていません
ssh-keygen ...... -q --no-passphrase

「パスフレーズの欠落」の長所と短所について説教したり、教えたりしないでください。(スクリプトとしてではなく)インタラクティブフォームでは、ユーザーは[ENTER]を2回押すだけで、キーはプレーンテキストとして保存されます。これは、次のようなスクリプトで達成したいことです。

#!/ bin / bash

command1
command2
var = $(command3)

#これはスクリプトを停止してパスワードを要求するべきではありません
ssh-kegen -b 2048 -t rsa -f / tmp / sshkey -q

回答:


105

これにより、パスフレーズプロンプトが表示されなくなり、キーペアがプレーンテキストで保存されるように設定されます(もちろん、これにはすべての欠点とリスクが伴います)。

ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q -N ""

3
これは動作します。ただし、/tmp/sshkeyすでに存在する場合は、上書きプロンプトが表示されます。これは、stdinをリダイレクト/閉じることで防止できます0>&-
maxschlepzig

34

あなたが望むことをするために私が見つけた最も簡単な方法はこれです(デフォルトのファイル名を使用する例)

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

場合は~/.ssh/id_rsa、ファイルがすでに存在している、コマンドは何も変更せずに終了します。

そうでない場合は、そのファイル名で新しいキーを取得します。

いずれにせよ、あなたは何も上書きしておらず、最後に鍵を持っていることを知っています。


確認済み:lubuntu 14.04.2
user77115

あなたが本当にしたい場合、それは/ dev / nullに静か、パイプ出力:cat /dev/zero | ssh-keygen -q -N "" > /dev/null
クリスグレッグ

(明らかにアンティークの)SLES 11では、上記のコマンドはキーの生成に失敗します。yes "" | ssh-keygen -N "" >&- 2>&-ただし、正常に機能し、(キーファイルがすでに存在するかどうかにかかわらず)何も出力せず、以前に存在したキーファイルを上書きしません。
zrajm

Ubuntu trusty(14.04)で検証
Binita Bharati

2
なぜ/ dev / zeroをcatするのですか?
maxschlepzig


5

expectを使用して「enter」を送信できます

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

ただし、ファイル/ tmp / sshkeyが既に存在する場合、コマンドの出力が異なるため失敗することに注意してください。


1
貢献してくれてありがとう。同じ種類の問題の場合、期待はさらに汎用性が高いように思われます。スクリプト作成とユーザー操作が競合する場合も同様です。/ tmp / sshkeyがすでに存在している可能性があることを認識し、コマンドを使用する前に確認します。
humanityANDpeace

2

ssh-keygenの前に簡単なエコーを行いました。そうsu - <user> -c "echo |ssh-keygen -t rsa"

これはRedhat 6でテストされました


私はこれが周りの最良の答えだとは思わないが、私もみんなに投票する理由はないと思う。
cubuspl42

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.