SSHキーを保存する方法は?


67

パスワードの代わりにSSHキーを使用し始めたばかりです(もちろんGitHubに感謝します)。この概念全体はかなり新しいことを覚えておいてください。現在、私のキーは単に〜/ .sshの下にありますが、これが良いプラクティスかどうかはわかりません。たとえば、複数のマシンがある場合、秘密鍵を複製する必要がありますが、これは望ましくないと思います。または、HDDが使い果たされると、それらのキーが失われますが、これも(おそらく)望ましくありません。

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

スマートカードを使用することはオプションのようです(gpg / sshキーを保存するためのスマートカード(Linux)-何が必要ですか?)、これは最高のものですか?

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

これまでの回答を要約するには(ただし、それらを読んで、追加するものがある場合は-してください):この場合、秘密鍵を〜/ .sshのままにしておけば問題ありません他の人からそれらを保管してください。ただし、サービスにアクセスして、キーを紛失した場合に新しいキーをアップロードまたは生成する別の方法があることを確認してください(通常はそうです)。

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


そのリンクは壊れているようですhelp.github.com/multiple-ssh-keys
KJ価格

@KJ Priceは、インターネットアーカイブのWayback Machineのおかげで、元のリンクではありませんが、オンラインで引き続き利用できます。2011年9月2日にアーカイブされたページのコピーは、Multiple SSH keysにあります
ムーンポイント

回答:


41

たとえば、複数のマシンがある場合、秘密キーを複製する必要がありますが、これは望ましくないと思います。

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

また、HDDが故障すると、秘密キーが失われますが、これも(おそらく)望ましくありません。

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

価値のあることですが、秘密鍵を複製することは非常に望ましくありません。理想的には、秘密鍵は1つのファイル(~/.ssh/id_rsaたとえば)で生成され、そのファイルを残してはいけません。つまり、コピー、移動、特にネットワーク経由での転送は禁止されています。(たとえば、バックアップからそれらを除外します)非対称認証プロトコルの性質のため、秘密鍵を他人の手に渡さないように気にするだけです。少し船外に出て、自分で追跡できなくなったとしても、大したことではありません。(これは、おそらく保持したいGPGキーなどの非対称暗号化秘密鍵と混同しないでください。)


14
これは、その秘密キーがアクセスを提供するサーバーにアクセスする他の方法がある場合にのみ機能します。そのバックアップアクセスがある場合のみ、新しい公開キーをアップロードできます。
TREE

2
@TREE:正しいですが、私の経験では、代替のアクセス方法を提供しないサーバーを見つけることは非常にまれです(または、少なくともSSHを経由せずに追加の公開キーを追加する)。
デビッドZ

3
おかげで、物事は大いに解決されました。本当に、私が使用しているすべてのサービスで常に新しいサービスをアップロードするためにサービスにアクセスする別の方法があるように思えるので、プライベートSSHキーを失うことは問題のようには見えません。
アントンストロゴノフ

3
AWSは、プライベートキー以外のアクセス形式を提供しません。プライベートキーを紛失した場合は、ドライブを切断し、だましてアクセスする必要があります。
アサドSaeeduddin 16年

1
別のセキュリティレイヤーが必要な場合は、秘密鍵にパスワードを入力できることに注意してください。
須藤

8

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

それを試してみてください!ブラウザでホームディレクトリの秘密キーを指定します。楽しいです。

したがって、別のユーザーアカウントのホームディレクトリにsshキーを保存することをお勧めします。

鍵を保護するパスフレーズに関する言葉

  • 最近では、ランダム化されていないパスワードの解読は非常に高速です。ハッシュ猫をチェック
    • (ランダムで長い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>

17
明確にするために、ブラウザーが秘密キーを読み取ることができるからといって、ブラウザーで実行されているWebサイトができるわけではありません。
Ajedi32

6
ただし、ブラウザのプロセスにプロセスを挿入する場合。その後、同様にブラウザを制御できます。したがって、この議論は完全に有効です。
BigSack 14

ただし、ブラウザの処理ユニットのプロセスレジスタにプロセスを挿入するプロセスをハッキングする必要があります。
スキッドカダ

8

拡張子(http://lechnology.com/software/keeagent/)を持つKeePass2(http://keepass.info/)という名前の非常に便利なツールがあります

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

私は自分でそれを使用し、私はそれについてかなり満足しています。私は30以上のVPSと一定量の異なるSSHキーを備えたルートサーバーを持っています。私がしなければならないことはKeePassを開くことだけです(それは私のプライマリパスワードセーフではありません)。


3

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

  • オフライン(クラウドではない)
  • 複数の場所で
  • 暗号化されたデータのキーなど、関連するものは別として、データとは別の場所に保存します

最良の場所は次のとおりです。

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

さらに良いことに、それを印刷して、耐火金庫に入れてください。


4
セキュリティ/ベストプラクティスは実用性と密接に関連しています。セキュリティ戦略がシステムを使用する能力を妨げる場合、攻撃者ではなくユーザーによってバイパスされます。
zaTricky

1

安全な場所に保管するユーザーdirのセットアップ(.bashrc、.ssh /およびその他の構成ファイル)を含むtarファイルがあります。どこでも新しいシェルアカウントを取得したら、tarファイルを解凍します。

信頼できるサーバーにのみ秘密鍵を配置する必要があります。そうでない場合は、そのサーバー専用の新しい秘密鍵をサーバー上に作成し、アクセスしたいものへのアクセスを許可する必要があります。

個人的には、どこにでも.ssh /をコピーするだけで問題ありません(これは、既にauthorized_keysファイルにあるため、通常のsshキーがsshに即座にアクセスすることを意味します)。


〜/ .sshを暗号化してUSBスティックにぶら下げておけば、ハードウェアに障害が発生した場合に新しいキーを生成してアップロードする必要がなくなります。ただし、SSHキーを使用してアクセスするサーバーは非常に少ないため(接続するマシンも非常に少ないため)、新しいキーを生成してもオーバーヘッドはあまり発生しません。
アントンストロゴノフ

2
それはコースの馬であり、キーを使用する理由に依存します。すでに暗号化されたSSHリンクを介してssh秘密鍵をコピーする際に問題は発生しません。ただし、ターゲットマシンを信頼せず、誰がルートアクセス権を持っているかわからない場合は、失うことのできないサーバーに何も置かないでください。
-EightBitTony

秘密鍵を他の人のサーバーに置きたくありません。そのサーバー上でルートアクセス権を持つユーザーはだれでもプライベートキーを読み取ることができ、そのプライベートキーでアクセスするシステム上でユーザーになりすますことができます。サーバーにアクセスするためだけに公開鍵を置く必要があります。また、リモートマシンでパスフレーズを使用して秘密鍵を復号化する場合、パスフレーズはそれほど役立つとは思わないでください。
Codeguy007

sshを介してssh-agentを転送できます。そうすれば、サーバーに秘密鍵を保存したり、ネット経由でパスフレーズを送信したりする必要がありません。stackoverflow.com/questions/12257968/...
Codeguy007

1

暗号化されたパーティション内の別のディレクトリにsshキーを保存できます。次に、そのディレクトリを指すsshを次のように使用できます-i

ssh -i identity_file me@example.com

完全な説明(man ssh):

-i identity_file

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

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

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

-F configfile 

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

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

PPS私はまだこれをチェックしませんでした。他のプログラム(gitなど)がこれらのssh設定でどのように機能するかわかりません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.