git - 是否必须每次添加ssh-add
ringa_lee
ringa_lee 2017-04-28 09:04:12
0
3
2628

我的repo 分别推送到github,gitcafe。 正确添加了两个公钥私钥之后,并命名为id_github和id_gitcafe,发现每次push 代码 都必须重新ssh-add 上私钥。将id_github 名改回默认的id_rsa,就可以直接push了。但是gitcafe 被拒绝。有没有办法可以一次都设置上,不需要每次 ssh-add 私钥的。

ringa_lee
ringa_lee

ringa_lee

全員に返信(3)
淡淡烟草味

まず最初に、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 做管理应该是不需要这个配置文件的,但是我还没有机会去做测试。目前的环境一切正常,等到我换新机器重新配置环境的时候我会试一试看。

关于 Host 和 Hostname 的对应关系,如果 Hostname 是域名则最好保持一致。但是这里有两个诀窍:
1. 如果同一域名下有两个不同的配置怎么办?
以 Github 为例,如果我有两个账户,一个个人的,一个组织的,并且要使用不同的秘钥,那么我可以这么写:

这里 Host 后面对应的是 Github 的两个用户名,也就是 github.com/nightiregithub.com/very-geek
2. 如果域名是数字 IP,是否可以简化呢?
Host 可以帮助你把对应的 IP 变成好记的名字。比如说我在公司内部配置了 Git Server(基于 gitolite 或 Gitlab 或任何工具),正常的访问地址是:git://xxx.xxx.xxx.xxx:repo.git,如下的配置则可以帮你把它简化成:git.visionet:repo.git
もちろん、この構成は Git に限定されません。SSH を使用するすべての基盤となるアプリケーションとコマンドは、構成ファイルの指示に従って、対応する秘密キーを見つけます。 このセクションの冒頭のトピックに戻りますが、管理用のキーチェーンではこの設定ファイルは必要ないと思いますが、まだテストする機会がありません。現在の環境では問題ありません。新しいマシンに変更して環境を再構成したときに試してみます。
Host と Hostname の対応関係については、Hostname がドメイン名の場合、一貫性を保つことが最善です。ただし、ここに 2 つのヒントがあります:

1. 同じドメイン名の下に 2 つの異なる構成がある場合はどうなりますか? 🎜 Github を例に取ると、個人アカウントと組織アカウントの 2 つのアカウントがあり、異なるキーを使用したい場合は、次のように記述できます: 🎜🎜🎜🎜 ここでのホストは、Github の 2 つのユーザー名、つまり 🎜github.com/nightire🎜 と 🎜github.com/very-geek🎜🎜 に対応します。 2. ドメイン名がデジタル IP の場合、簡略化できますか? 🎜 ホストは、対応する IP を覚えやすい名前に変えるのに役立ちます。たとえば、社内で Git サーバー (gitolite、Gitlab、またはその他のツールに基づく) を構成した場合、通常のアクセス アドレスは次のようになります: git://xxx.xxx.xxx.xxx:repo.git 、次のように構成を簡略化するのに役立ちます: git.visionet:repo.git🎜🎜🎜🎜🎜 とても便利です。 🎜

もっと簡単な方法はありますか?

はい。 ssh-add がすでに要件を満たしている場合 (起動後に再度実行する必要がある場合を除く)、スクリプトを使用してこれを完全に自動化できます。 に入力した ssh-add.bashrc.bash_profile コマンド (または使用する他のシェル環境設定ファイル) の内容を書き込むだけで、ターミナルを開くたびにこれが自動的に実行されます。

しかし、前に述べたように、このメカニズムは ssh-agent サービスに依存しており、ターミナルの下でのみ有効です。キーチェーンメカ​​ニズムが使用されている場合、システム全体 (端末に依存しないアプリケーションを含む) で有効であり、ssh-agent サービスを開く必要はありません。

最後に、Keychain サービスは Mac だけで利用できるわけではありません。調べてみたところ、Windows やさまざまな Linux にも対応する仕組みがあることがわかりましたが、私はそれを使用したことがないため、Mac を例としてのみ説明します。これらの概念を理解すれば、具体的な方法を自分で見つけることができると思います。

いいねを押す +0
巴扎黑

受け入れられた回答への小さな追加

ssh-add このコマンドは、使用する秘密鍵を永続的に記憶するために使用されるものではありません。実際、その機能は、指定した秘密鍵を ssh-agent によって管理される
セッションに追加することだけです。また、ssh-agent は秘密キーを保存するために使用される一時的なセッション サービスです。つまり、再起動すると ssh-agent サービスはリセットされます。

現在のセッションに追加する方法については、github の記事から学ぶことができます:

新しい SSH キーを生成して ssh-agent に追加する

次の記事で、ssh が公開鍵と秘密鍵のペアをどのように使用するかを学ぶことができます:

エラー: 許可が拒否されました (publickey)

さらに、ローカル設定コンテンツがファイルに配置されます:

リーリー

いいねを押す +0
伊谢尔伦

同じアカウントとパスワード github.comcoding.net を使用しているだけです。これは使えます。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート