GNU/Linux >> Linux の 問題 >  >> Linux

プロンプトなしで ssh-keygen を実行する方法

期待どおりの答えはありません。望ましい動作: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、およびこのスレッドの残りの人々。


    Linux
    1. 確認なしでcpコマンドを強制的に上書きする方法

    2. 履歴に保存せずにシェルでコマンドを実行するにはどうすればよいですか? [Linuxのヒント]

    3. パスワードプロンプトなしでルートとして特定のプログラムを実行する方法は?

    1. ssh-keygen - 特定のユーザー名で rsa キーを設定する方法

    2. シェルで .sh 拡張子のないファイルを実行する方法

    3. LinuxでPLファイルを実行するには?

    1. Linuxにインストールせずにパッケージをテストする方法

    2. LinuxでBashプロンプトを短縮する方法は?

    3. フォルダに触れずにファイルから実行権限を再帰的に削除するにはどうすればよいですか?