authorized_keysファイルからSSH公開鍵をスクリプト化する

authorized_keysファイルからSSH公開鍵をスクリプト化する

ファイル~/.ssh/authorized_keys形式は、次のように簡単に要約できます。

  • キーごとに1行を含むテキストファイル。
  • 空行と#octothorpe()で始まる行は無視されます。
  • 4つのフィールドがあります。オプションボタンタイプそしてコメント;
  • フィールド 1 と 4 はオプションです。
  • 二重引用符を使用している場合は、フィールド1にスペースを含めることができます。
  • 4番目のフィールドには、引用符で囲むことなくスペースを含めることができます。

完全な説明はにありますman sshd

ファイルのキーbashを操作する安定したスクリプト可能な(例)方法はありますか?~/.ssh/authorized_keys

たとえば、スクリプトは次のようになります。

  • 特定のキーの抽出(例:ボタンタイプそしてコメントフィールド)、
  • 操作(追加、変更、削除)オプション大地、
  • 操作(追加、変更、削除)コメント大地、
  • すべてのキーを繰り返す
  • キーを削除します。

ssh-keygenファイル(例:ssh-add&c。)を変更するためのSSHツールがないようで、~/.ssh.authorized_keysファイルの特性オプションそしてコメントsedフィールドを使用すると、通常awkまたはメソッドを使用してperl -peこれを確実に達成することが困難になります。


コメントをフォロー、これは簡単な質問です。~/.ssh/authorized_keysファイルを読み、すべてのキーを出力するスクリプトを想像してみてください。キーのみ出力します。オプションもなく、スペースやコメント行もありません。

各行はスペースで区切られているため、これを行うのに問題がありますが、次のようになります。

  • オプションにはスペースを含めるか、完全に含めることができません。
  • 空白のため、コメントはゼロ個以上のフィールドになることがあります。

したがって、行に含まれるフィールドの数は不明であり、その行にフィールドがいくつあるかは簡単にはわかりません。オプション期間。

理解するには、過度に複雑な正規表現が必要です。オプションフィールドを使用すると、残りの行が出力される前に確実に削除できます。私はsedこれをやってみましたperl -pe

この種のスクリプトの人為的なユースケースは次のとおりです。すべてのキーの指紋のリスト

ベストアンサー1

説明を見ると、オプションとコメント行を削除したいようです。によるとman 8 sshd

公開キーは、スペースで区切られたオプション、キータイプ、base64エンコードキー、コメントフィールドで構成されています。オプションフィールドはオプションです。キーのタイプは、「ecdsa-sha2-nistp256」、「ecdsa-sha2-nistp384」、「ecdsa-sha2-nistp521」、「ssh-ed25519」、「ssh-dss」、または「ssh-rsa」です。未使用 どの目的にも使用されません (ただし、ユーザーはキーを簡単に識別できます)

だからあなたはこれを行うことができます:

sed '
    /^[ ]*$/d;
    /^#/d;
    s/^.* \(ecdsa-sha2-nistp256\|ecdsa-sha2-nistp384\|ecdsa-sha2-nistp521\|ssh-ed25519\|ssh-dss\|ssh-rsa\) /\1 /' \
        ~/.ssh/authorized_keys

これは、キーコメントに背中が含まれていないと仮定しますssh-dssssh-rsaまた、実装のsed(1)サポートを想定しています。OR\|

テキストエディタを使用する方が簡単で安全です。 :)

おすすめ記事