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
これにより、パスフレーズプロンプトが表示されなくなり、キーペアがプレーンテキストで保存されるように設定されます(もちろん、これにはすべての欠点とリスクがあります)。
ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q -N ""
あなたが望むことをするために私が見つけた最も簡単な方法はこれです(デフォルトのファイル名を使用した例)
cat /dev/zero | ssh-keygen -q -N ""
~/.ssh/id_rsa
ファイルはすでに存在しています。コマンドは何も変更せずに終了します。
そうでない場合は、そのファイル名で新しいキーを取得します。
どちらの方法でも、何も上書きされておらず、最後にキーを持っていることがわかります。
これは私のために働きました:
ssh-keygen -t rsa -f /home/Oracle/.ssh/id_rsa -q -P ""
-P
はパスフレーズオプションであり、""
は空のパスフレーズです。
「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がすでに存在する場合、コマンドの出力が異なるため、失敗することに注意してください。
Ssh-keygenの前に簡単なエコーを行いました。そう su - <user> -c "echo |ssh-keygen -t rsa"
これはRedhat 6でテストされました
Ubuntu 18.04でテストされた別のユーザーの場合:
Sudo -u username bash -c "ssh-keygen -f /tmp/sshkey -N ''"