web-dev-qa-db-ja.com

SSH鍵を保管する方法

つい最近、パスワードの代わりにSSHキーを使い始めました(もちろん、GitHubのおかげで)ので、この概念全体についてはかなり新しいことに注意してください。現在私の鍵は単に〜/ .sshの下にありますが、これが良い習慣かどうかはわかりません。例えば。もし私が複数のマシンを持っているなら、私は私の秘密鍵を複製する必要があるだろう、それは私が望ましくないと思う。あるいは、もし私のHDDがkaputになったら、私はそれらのキーを失うでしょう、そしてそれは(私が推測する)同様に望ましくないです。

では、SSH鍵を安全に、便利に、そして確実に保存するためのベストプラクティスは何でしょうか。

スマートカードを使うようなオプションがあるようです( gpg/sshキーを保存するためのスマートカード(Linux) - 何が必要ですか? )、これが一番良い方法ですか?

更新:問題の理由は、多くのサービス(GitHub、AWS EC2など)がサービスを使用するためのSSHキーの設定方法に関するガイドを提供しているが、バックグラウンドがほとんどない(すでにキーが生成されている場合など) ssh-keygen [1]によって、推奨されるセキュリティ対策は何ですか?)そして、その情報が実際には重要ではないのか、それとも「デフォルトで」知っていると思われるのかは不明です。

この時点までの答えをまとめると(ただし、それらを読んでください。追加するものがある場合は、どうしてください):この場合は、そのままにしても大丈夫です。あなたが他の人からそれらを守る限り、秘密鍵は〜/ .sshで。ただし、キーを紛失した場合は、サービスにアクセスして新しいキーをアップロードまたは生成する別の方法があることを確認してください(通常これが当てはまります)。

[1] GitHubはかつて複数のキーを管理する方法について ヘルプを提供していました

64
Tony

例えば。もし私が複数のマシンを持っているなら、私は秘密鍵を複製する必要があるだろう、それは私が望ましくないと思う。

いいえ、実際にはそうではありません。あなたが複数のマシンを持っているなら、あなたはただそれぞれに別々の秘密鍵を作成するだけです。秘密鍵ごとに、同じプロセスを使用して対応する公開鍵をGitHubにアップロードするだけです。

また、私のHDDが容量不足になると、私は私の秘密鍵を失うことになります。

あんまり;秘密鍵をなくした場合は、新しい秘密鍵を生成して対応する公開鍵をアップロードするだけです。

その価値があるために、秘密鍵を複製することは非常に望ましくないことは間違いありません。理想的には、秘密鍵は1つのファイル(たとえば~/.ssh/id_rsa)で生成され、そのファイルをneverのままにしないでください。ネットワーク経由で転送されません。 (たとえば、バックアップから除外します)非対称認証プロトコルの性質上、秘密鍵を他人の手に渡らないようにする必要があるだけです。あなたが少し船外へ出て行き、自分でそれを見失ったとしても、大したことはありません。 (これは非対称型のencryption秘密鍵、たとえばGPG鍵と混同しないようにしてください)。

41
David Z

両方を実行するために同じユーザーアカウントを使用している場合は、〜/ .ssh /がブラウザで読み取り可能であることを追加します。

それを試してみてください!ホームディレクトリのプライベートキーにブラウザを向けます。楽しいですよ。

だから私は他のユーザーアカウントのホームディレクトリにsshキーを保存することをお勧めします。

パスフレーズ保護キーのWord

  • 最近では、ランダム化されていないパスワードを解読するのは超高速です。 ハッシュ猫 を調べてください。
    • (ランダムで長い12文字以上のパスワードは、依然としてブルートフォースにはかなり長い時間がかかりますが)
    • そのため、AES暗号化されたsshキーは、長いパスフレーズを使用している限り、当面は使用できません。 githubのおすすめを参照してください。
  • そのため、一部のWebサイトでは、JavaScriptを使用せずにキーを推測することができます。そして、そのキーをオフラインでブルートフォースします。
  • そしてブラウザはあなたのクリップボードをJSで見ることもできます。そのため、非常に長いパスフレーズをコピーアンドペーストすると、より洗練されたJavaScript攻撃の危険にさらされます。

look_at_keys.html

 9 <HTML>
10 <HEAD>
11 <TITLE>look at keys</TITLE>
12 </HEAD>
13 <FRAMESET cols="20%, 80%">
14   <FRAMESET rows="100, 200">
15       <FRAME src="/Users/yourname/.ssh/stuff.pem">
16       <FRAME src="blah.html">
17   </FRAMESET>
18   <FRAME src="contents_of_frame3.html">
19 </FRAMESET>
20 </HTML>
8
HeyWatchThis

非常に素晴らしいKeePass2( http://keepass.info/ )という拡張子の付いたツールがあります( http://lechnology.com/software/keeagent/

あなたはそこにパスワード、SSHキー、そしてもっとたくさんの情報を保存することができます(公式のKeePassページにはもっともっと便利な拡張機能があります)
SSHキーを使って自動的にログインしたい場合は、KeeAgentを使ってPuTTY、Pageant、およびKeePassをインストールするだけです。正しく設定していれば、PuTTY、Pageant、またはFileZillaでキーを設定する必要はありません。

私はそれを自分で使います、そして、私はそれについてかなり幸せです。私は30以上のVPSとルートサーバーを持っていて、SSHキーをいくつか使っています。そして私がしなければならない唯一のことは、KeePassを開くことです。

7
CentrixDE

秘密鍵を保管することをお勧めします。

  • オフライン(クラウド以外)
  • 複数の場所で
  • それが関連するものは別として、例えば。暗号化されたデータの鍵、データとは別の場所に保存する

私は言うだろう、最高の場所は次のようになります。

  • 外付けハードドライブ
  • フラッシュキー
  • インターネットに接続されていないコンピュータ

さらに良いことには、それをプリントアウトして、それを耐火金庫に入れるだけです。

3
blah

あなたのsshキーは暗号化されたパーティション内の別のディレクトリに保存することができます。それから-iでそのディレクトリを指すsshを使うことができます:

ssh -i identity_file [email protected]

詳しい説明(man ssh):

-i identity_file

公開鍵認証用のID(秘密鍵)を読み取るファイルを選択します。デフォルトは、プロトコルバージョン1の場合は〜/ .ssh/identity、プロトコルバージョン2の場合は〜/ .ssh/id_dsa、〜/ .ssh/id_ecdsa、〜/ .ssh/id_ed25519、および〜/ .ssh/id_rsaです。設定ファイルにはホストごとに指定することもできます。
複数の-iオプション(および構成ファイルで指定された複数の識別情報)を持つことは可能です。 CertificateFileディレクティブで証明書が明示的に指定されていない場合、sshは-cert.pubをidentity filenamesに追加することによって取得されたファイル名から証明書情報をロードしようとします。

セキュリティに対する私のアプローチは、私が情報を個人用と一般用に分けることです。ホームパーティション全体を暗号化したくないので、秘密ファイル(~/.ssh内のファイルなど)を暗号化パーティションにコピーします。

マルウェアは〜/ .sshに何も見つけられず、おそらくその場所を見つけるためにシステム全体やシェルプロファイルをスキャンしないので、これはかなり効率的なセキュリティを与えると思います。

-F configfile 

設定ファイルへのパスを設定します。

P.S私はエイリアスalias ssh='ssh -i ... -F ...'を作成し、それをあなたのプロフィールに入れます。

P.P.S.私はまだこれをチェックしていません、そして私は他のプログラム(gitのような)がこれらのssh設定でどのように動作するかわかりません。

1

私は安全な場所に保管する私のユーザディレクトリ設定(.bashrc、.ssh /および他の設定ファイル)を持つtarファイルを持っています。どこかに新しいシェルアカウントを取得したら、そこにtarファイルを解凍します。

あなたは自分の秘密鍵をあなたが信頼するサーバに置くだけでいいでしょう。そうでなければそのサーバ専用に新しい秘密鍵をサーバ上に作成し、それにあなたがアクセスしたいものへのアクセスを許可するべきです。

個人的には、自分の.ssh /ものをいたるところにコピーするだけでいいのです(これは、通常のsshキーでsshにアクセスできることを意味します、なぜならそれはすでにauthorized_keysファイルにあるからです)。

1
EightBitTony