ご使用のオペレーティング システムについて説明がなかったので、例として私が毎日使用している Mac OS X を使用します。 Mac システムには、Keychain サービスとその管理プログラムが組み込まれており、ssh キーを含むさまざまなキーを簡単に管理できます。 ssh-add は、指定された秘密鍵を現在実行中の ssh-agent サービスにデフォルトで追加しますが、このデフォルトの動作を変更して、それを keychain サービスに追加し、Mac に記憶させて管理させることができます。そして、これらの秘密キーの安全性を確保します。
最後に、Keychain サービスは Mac だけで利用できるわけではありません。調べてみたところ、Windows やさまざまな Linux にも対応する仕組みがあることがわかりましたが、私はそれを使用したことがないため、Mac を例としてのみ説明します。これらの概念を理解すれば、具体的な方法を自分で見つけることができると思います。
まず最初に、ssh に関連するすべてのメカニズムは確かに比較的複雑であり、人々を簡単に混乱させる可能性があると言わなければなりません。この知識体系を完全にマスターしたい場合は、関連する知識を体系的に学ぶ必要があります。それで、まず最初に、私はあなたに本をお勧めします。一度時間をかけて読んでみてください:
SSH、セキュア シェル、この本の初版は中国語です。
具体的な質問について話しましょう。
最初に 1 つのことを理解する必要があります: ssh-add このコマンドは、使用する秘密鍵を永続的に記憶するために使用されるわけではありません。実際、その機能は、指定した秘密鍵を ssh-agent によって管理される セッション に追加することだけです。そして、ssh-agent は秘密鍵を保存するために使用される一時セッション サービスです。つまり、再起動すると、ssh-agent サービスはリセットされます。
対応する秘密鍵を永続的に記憶する必要がある場合、ssh-agent サービスに依存することはできません。何を信頼できるかは、次のオプションのどれがユースケースに適しているかによって異なります。
何らかの安全な鍵管理メカニズムを使用する
ご使用のオペレーティング システムについて説明がなかったので、例として私が毎日使用している Mac OS X を使用します。 Mac システムには、Keychain サービスとその管理プログラムが組み込まれており、ssh キーを含むさまざまなキーを簡単に管理できます。 ssh-add は、指定された秘密鍵を現在実行中の ssh-agent サービスにデフォルトで追加しますが、このデフォルトの動作を変更して、それを keychain サービスに追加し、Mac に記憶させて管理させることができます。そして、これらの秘密キーの安全性を確保します。
次のコマンドを実行するだけです:
リーリーその後、他のプログラムが ssh キーを要求すると、キーチェーン サービスを通じて要求されます。以下のスクリーンショットでは、現在のマシン上のキーチェーンによって管理されている ssh キーが表示されます。これには、私が生成した 4 つと Github クライアント アプリで使用した 1 つが含まれます。前者はすべて ssh 関連のコマンドで使用され、後者は、アプリケーション Github.app によってのみ使用されます。 さらに、これらはすべて ログイン キーチェーン です。つまり、現在のユーザーがログインした後でのみ有効になります。ユーザーが変更された場合、またはユーザーがログインしていない場合は使用できません。これがキーチェーン サービスの目的です。あなた。
さまざまなアプリケーションに複数の SSH キーを使用するにはどうすればよいですか?
この問題はまだ完全には理解できていませんが、いくつかの情報によると、上記の作業を行った後、アプリケーションは該当する SSH キーを自動的に照合できるようになるはずです。しかし、勉強していく過程で、手動で指定しなければならない状況にも遭遇したので(当時はKeychainの役割を理解していなかったので、いつも手動でssh-addをしていました)、別の仕組みが役に立ちます。この問題、つまり ssh config を解決します。
簡単に言うと、ssh config は、ホスト名、ユーザー名、アクセス ポリシーなど、さまざまなキーに対応する設定を記述する設定ファイルです。
以下に、ローカル構成の 2 つのスニペットをキャプチャしました。
これら 2 つの構成は、それぞれ Github サービスとコーディング サービスで使用される秘密鍵に対応します。最初の行の Host は単なる名前で、3 行目の Hostname は対応する実際のアドレスですが、頭の中で変換する必要がないように、この 2 つは一貫性を保つことをお勧めします。 。
この設定では、
git clone https://github.com/user/repo
のときにid_rsa
キーが使用されます。 https://coding.net/user/repo では、明らかにnightire
キーが使用されます。git clone https://github.com/user/repo
的时候,id_rsa
秘钥会被使用,当我git clone https://coding.net/user/repo
的时候,很显然nightire
秘钥会被使用。当然,此配置不局限于 Git,所有底层使用 SSH 的应用和命令都会遵照配置文件的指示来找到对应的私钥。
回到本节开始的话题,我相信有了 Keychain 做管理应该是不需要这个配置文件的,但是我还没有机会去做测试。目前的环境一切正常,等到我换新机器重新配置环境的时候我会试一试看。
もっと簡単な方法はありますか?
はい。 ssh-add がすでに要件を満たしている場合 (起動後に再度実行する必要がある場合を除く)、スクリプトを使用してこれを完全に自動化できます。 に入力した ssh-add
.bashrc
或.bash_profile
コマンド (または使用する他のシェル環境設定ファイル) の内容を書き込むだけで、ターミナルを開くたびにこれが自動的に実行されます。しかし、前に述べたように、このメカニズムは ssh-agent サービスに依存しており、ターミナルの下でのみ有効です。キーチェーンメカニズムが使用されている場合、システム全体 (端末に依存しないアプリケーションを含む) で有効であり、ssh-agent サービスを開く必要はありません。
最後に、Keychain サービスは Mac だけで利用できるわけではありません。調べてみたところ、Windows やさまざまな Linux にも対応する仕組みがあることがわかりましたが、私はそれを使用したことがないため、Mac を例としてのみ説明します。これらの概念を理解すれば、具体的な方法を自分で見つけることができると思います。
受け入れられた回答への小さな追加
現在のセッションに追加する方法については、github の記事から学ぶことができます:新しい SSH キーを生成して ssh-agent に追加する
次の記事で、ssh が公開鍵と秘密鍵のペアをどのように使用するかを学ぶことができます:エラー: 許可が拒否されました (publickey)
さらに、ローカル設定コンテンツがファイルに配置されます:リーリー
同じアカウントとパスワード github.comcoding.net を使用しているだけです。これは使えます。