web-dev-qa-db-ja.com

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

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 
 
103

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

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

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

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

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

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

どちらの方法でも、何も上書きされておらず、最後にキーを持っていることがわかります。

38
JoaoCC

これは私のために働きました:

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

-Pはパスフレーズオプションであり、""は空のパスフレーズです。

11
gowrish

「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がすでに存在する場合、コマンドの出力が異なるため、失敗することに注意してください。

6
BitsOfNix

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

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

2
koopsj

Ubuntu 18.04でテストされた別のユーザーの場合:

Sudo -u username bash -c "ssh-keygen -f /tmp/sshkey -N ''"