1. ホーム
  2. linux

[解決済み] ssh-keygen をプロンプトなしで実行する方法

2023-04-26 01:23:02

質問

Centos7 でシェルスクリプトを使用して ssh 鍵のペアを自動生成したいのですが、以下のことを試してみました。

yes "y" | ssh-keygen -t rsa
echo "\n\n\n" | ssh-keygen...
echo | ssh-keygen..

これらのコマンドはすべて動作しません。1つの'enter'を入力するだけで、シェルスクリプトは"Enter passphrase (no passphraseの場合は空)"で停止します。 シェルで連続して複数の'enter'をシミュレートする方法を知りたいのです。

誰かが助けることができる場合、多くの感謝を!

どのように解決するのですか?

私たちは、以下のことを達成する必要があります。 2つのステップ を自動的に行う必要があります。

  1. パスフレーズを入力する . 使用する -N フラグを使用します (この例では void string)。

    ssh-keygen -t rsa -N ''

  2. キーファイルを上書きする :

使用方法 -f を使ってパスを入力します(この例では id_rsa ) に加えて ここに文字列 を答えとする はい と答えてください。

ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y >/dev/null 2>&1

あるいは bash のようなシェルの下で、もし 確かに前のものを上書きしたい を使用します。 ここで文字列 から コマンドを送る に、必要なすべての 入力 :

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 "に自動的に 上書き質問 (を使用しましょう)。 ここで文字列 を使用します)。

$ 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 pass を入力します。

$ 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 klashxx@server
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つの質問に自動的に答える必要があります。

  1. 鍵を保存するファイルを入力してください。/example/path/.ssh/id_rsaはすでに存在しています。

  2. 上書きしますか(y/n)?

手作業でこれを行う場合、最初の質問に対しては、ただ を入力します。 と入力し、2つ目の質問では y と入力し enter .

これらの動作をシミュレートするために、以下のように ここに文字列 :

$'\ny'

から bash のマニュアルページを参照してください。

string' 形式の単語は特別に扱われます。この単語は、次のように展開されます。 に展開され、バックスラッシュでエスケープされた文字が、ANSI C 標準規格で指定されたとおりに置き換えられます。 に展開され、バックスラッシュでエスケープされた文字がANSI C標準の指定に従って置き換えられます。

\改行する

ということで、もし 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さん、そしてこのスレッドにいる他の人たち。