期待どおりの答えはありません。望ましい動作:ssh-keygen を既定の設定で実行し (Enter をスパムした場合など)、入力を求められることはありません。
実行するコマンドは次のとおりです:
yes '' | ssh-keygen -N '' > /dev/null
出力を印刷したい場合は、>/dev/null を省略してください。
説明:
yes y
ssh-keygen が文字通り取り、 $PWD/y と $PWD/y.pub でキーを作成する 'y' をスパムします。 yes ''
空行 (Enter) をスパムします。 .ssh ディレクトリが存在しない場合、-f ~/.ssh/id_rsa でファイルを指定すると失敗します。 -t rsa オプションは、rsa がデフォルトのタイプである場合は必要ありません (とにかく入力をスパムしています)。パスフレーズは stdin (スパム行為を行っています) からではなく、キーボードから直接読み取られるため、何も傍受できません。このため、空のパスフレーズには -N '' を指定する必要があります。
私にとって、sshコマンドで使用する場合、@Lukaszの回答と@Juanの回答の両方を組み合わせて使用する必要がありました
ssh -p$SSH_PORT -q [email protected]$INSTANCE_IP 'yes y | ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa'
キーを保存するファイルをユーザーに要求したくない場合は、ファイル出力フラグ -f
を追加できます コマンドに。
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
この方法では、id_rsa を除き、ユーザーは入力を求められません。 ファイルは既に存在します。
2 つのステップを達成する必要があります 自動的に:
<オール>
パスフレーズを入力してください . -N
を使用 フラグ (この例では空文字列):
ssh-keygen -t rsa -N ''
鍵ファイルを上書き :
-f
を使用 パスを入力します (この例では id_rsa
) + ヒア文字列 はいと答える 次の質問へ:
ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y >/dev/null 2>&1
または、bash
の下 シェルのように、確かに前のものを上書きしたい場合 、here-string だけを使用します コマンドをフィードする すべての必要な入力 :
ssh-keygen -q -t rsa -N '' <<< $'\ny' >/dev/null 2>&1
ssh-keygen
から 男 ページ:
-N new_passphrase provides the new passphrase. -q silence ssh-keygen. -f filename specifies the filename of the key file.
段階的な説明
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/klashxx/.ssh/id_rsa):
1 ) キーの入力を避けるには -f
を使用します :
$ ssh-keygen -t rsa -f ~/.ssh/id_rsa
Generating public/private rsa key pair.
/home/klashxx/.ssh/id_rsa already exists.
Overwrite (y/n)?
注意 :RSA ファイル名を気にせず、以前のものを上書きしたい場合は、以下のポイント 4 の手順を確認してください。
2 ) "y" と答える必要があります。 " 自動的に上書き質問に (here-string を使用しましょう そのジョブ用):
$ ssh-keygen -t rsa -f ~/.ssh/id_rsa <<< y
Generating public/private rsa key pair.
/home/klashxx/.ssh/id_rsa already exists.
Overwrite (y/n)? Enter passphrase (empty for no passphrase):
3 ) 最後に -N
を使用します void パスに入るフラグ:
$ ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa <<< y
Generating public/private rsa key pair.
/home/klashxx/.ssh/id_rsa already exists.
Overwrite (y/n)? Your identification has been saved in /home/klashxx/.ssh/id_rsa.
Your public key has been saved in /home/klashxx/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Xo0t6caMB/8TSsigxfY28JIfqYjyqxRZrFrPncx5yiU [email protected]
The key's randomart image is:
+---[RSA 2048]----+
| |
| . |
| o . |
| + * = |
| +. + BSo= o |
|...o.+o+XO... |
|.. .o.E==+B. . |
|o . ...=.o... |
|.+o. o .. |
+----[SHA256]-----+
4 ) 追加のボール 、出力をクリーンアップし、リターン コードを確認してください:
$ ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y >/dev/null 2>&1
$ echo $?
0
以前の RSA ファイルを上書きする代替パス (-f フラグは不要)
注意 :bash
のみ 貝殻のように。
RSA 名を気にせず、単に上書きしたい場合は、次の 2 つの質問に自動的に答える必要があります:
<ブロック引用> <オール>キーを保存するファイルを入力してください:/example/path/.ssh/id_rsa は既に存在します。
上書きしますか (y/n)?
これを手動で行う場合、最初の質問で Enter を押すだけです。 、2番目に y
と入力します enter
を押します .
次の here-string を使用して、これらのアクションをシミュレートできます。 :
$'\ny'
bash
から マニュアルページ:
$'string' 形式の単語は特別に扱われます。単語は「string」に展開され、バックスラッシュでエスケープされた文字は ANSI C 標準の指定に従って置き換えられます。
\n改行
したがって、od
を使用すると 文字列を分析するには:
cat - <<< $'\ny' | od -c
0000000 \n y \n
質問に答えるために必要なものだけが得られていることがわかります。
ポイント 1 と 2 は次のように要約できます :
ssh-keygen -q -t rsa <<< $'\ny'
そして最後のコマンド になります:
$ ssh-keygen -q -t rsa -N '' <<< $'\ny' >/dev/null 2>&1
$ echo $?
0
称賛
@lukasz-dynowski、@redochka、@mellow-yellow、@yeti、およびこのスレッドの残りの人々。