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

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

ringa_lee
ringa_lee

ringa_lee

répondre à tous(3)
淡淡烟草味

Tout d'abord, je dois dire que tous les mécanismes liés à ssh sont effectivement relativement compliqués, et il est facile de s'y perdre Si l'on veut maîtriser à fond ce système de connaissances, il faut systématiquement. acquérir les connaissances pertinentes. Alors tout d'abord, je vous conseille un livre, autant prendre le temps de le lire une fois pour toutes :

SSH, The Secure Shell, la première édition de ce livre est en chinois.

Parlons de votre question spécifique.

Vous devez d'abord comprendre une chose : ssh-add Cette commande ne sert pas à mémoriser en permanence la clé privée que vous utilisez. En fait, sa fonction est simplement d'ajouter la clé privée que vous spécifiez à une session gérée par ssh-agent. Et ssh-agent est un service de session temporaire utilisé pour stocker les clés privées, c'est-à-dire qu'après le redémarrage, le service ssh-agent sera réinitialisé. .

Si nous voulons mémoriser en permanence la clé privée correspondante, nous ne pouvons pas compter sur le service ssh-agent. Ce sur quoi vous pouvez compter dépend des options suivantes adaptées à votre cas d'utilisation.

Utilisez une sorte de mécanisme sécurisé de gestion des clés

Vous n'avez pas décrit le système d'exploitation que vous utilisez dans la question, j'utiliserai donc le Mac OS X que j'utilise quotidiennement comme exemple. Le système Mac dispose d'un service Keychain intégré et de son programme de gestion, qui peuvent facilement vous aider à gérer diverses clés secrètes, y compris les clés ssh. ssh-add ajoutera par défaut la clé secrète spécifiée au service ssh-agent en cours d'exécution, mais vous pouvez modifier ce comportement par défaut pour l'ajouter au porte-clés Dans le service, laissez votre Mac vous aider à mémoriser, gérer et conserver ces clés en sécurité.

Il vous suffit d'exécuter la commande suivante :

$ ssh-add -K [path/to/your/ssh-key]

Après cela, lorsque d'autres programmes demanderont la clé ssh, ils la demanderont via le service Trousseau. Dans la capture d'écran ci-dessous, vous pouvez voir les clés ssh gérées par le trousseau sur ma machine actuelle, dont quatre générées par moi-même et une utilisée par l'application client Github - les premières sont toutes destinées aux commandes liées à ssh, et la seconde précise qu'il s'agit de utilisé uniquement par l'application Github.app. De plus, ce sont tous des porte-clés de connexion, ce qui signifie qu'ils ne prendront effet qu'après la connexion de l'utilisateur actuel. Ils ne peuvent pas être utilisés si l'utilisateur est modifié ou si l'utilisateur n'est pas connecté. C'est ce que le Le service de trousseau fait pour vous.

Comment utiliser plusieurs clés ssh pour différentes applications ?

Ce problème est quelque chose que je n'ai pas encore complètement compris. Selon certaines informations, après avoir effectué le travail ci-dessus, l'application devrait être capable de faire correspondre automatiquement la clé ssh applicable. Cependant, au cours de mon étude, j'ai également rencontré des situations où je devais le spécifier manuellement (je ne comprenais pas le rôle du trousseau à ce moment-là, donc je toujours manuellement ssh-add), donc un autre mécanisme peut vous aider à résoudre ce problème, à savoir la configuration ssh.

En un mot, ssh config est un fichier de configuration qui décrit les paramètres correspondant aux différentes clés secrètes - y compris le nom d'hôte, le nom d'utilisateur, la politique d'accès, etc.

Ci-dessous, j'ai capturé deux extraits de la configuration locale :

Ces deux configurations correspondent aux clés secrètes utilisées respectivement par les services Github et Coding. Le Host dans la première ligne n'est qu'un nom, et le Hostname dans la troisième ligne est la véritable adresse correspondante, mais il est préférable de garder les deux cohérents afin de ne pas le faire. Je n’ai pas besoin de les convertir dans votre tête.

Avec cette configuration, lorsque je git clone https://github.com/user/repo, la clé secrète id_rsa sera utilisée, et lorsque je git clone https://coding.net/user/repo, évidemment la clé secrète nightire sera utilisée.

Bien entendu, cette configuration ne se limite pas à Git. Toutes les applications et commandes sous-jacentes qui utilisent SSH suivront les instructions du fichier de configuration pour trouver la clé privée correspondante.

Pour en revenir au sujet du début de cette section, je pense qu'avec le trousseau pour la gestion, ce fichier de configuration ne devrait pas être nécessaire, mais je n'ai pas encore eu l'occasion de le tester. Tout va bien dans l'environnement actuel. Je vais essayer lorsque je passerai à une nouvelle machine et reconfigurerai l'environnement.

Concernant la relation correspondante entre Host et Hostname, si Hostname est un nom de domaine, il est préférable de le garder cohérent. Mais voici deux conseils :
1. Que se passe-t-il s’il existe deux configurations différentes sous le même nom de domaine ?
En prenant Github comme exemple, si j'ai deux comptes, un personnel et un organisationnel, et que je souhaite utiliser des clés différentes, alors je peux écrire comme ceci :

Ici, Host correspond aux deux noms d'utilisateur de Github, à savoir github.com/nightire et github.com/very-geek
2. Si le nom de domaine est une IP numérique, peut-il être simplifié ?
L'hôte peut vous aider à transformer l'adresse IP correspondante en un nom facile à retenir. Par exemple, si je configure Git Server (basé sur gitolite ou Gitlab ou n'importe quel outil) au sein de l'entreprise, l'adresse d'accès normale est : git://xxx.xxx.xxx.xxx:repo.git La configuration suivante peut vous aider à la simplifier à : git.visionet:repo.git
Très utile.

Existe-t-il un moyen plus simple ?

Oui. Si ssh-add répond déjà à vos exigences (sauf devoir le refaire après le démarrage), alors vous pouvez complètement automatiser cela avec un script. Écrivez simplement le contenu de la commande ssh-add que vous avez entrée dans .bashrc ou .bash_profile (ou tout autre fichier de configuration d'environnement shell que vous utilisez), de sorte que tant que vous ouvrez le terminal, il sera be Cela a été fait automatiquement.

Mais comme je l'ai déjà dit, ce mécanisme s'appuie sur le service ssh-agent et n'est valable que sous le terminal. L'utilisation du mécanisme trousseau est valable dans tout le système (y compris les applications qui ne dépendent pas du terminal) et il n'est pas nécessaire d'ouvrir le service ssh-agent.

Enfin, le service Trousseau n'est pas seulement disponible sur Mac. Je viens de chercher et j'ai découvert que Windows et divers Linux ont des mécanismes correspondants, mais je ne les ai jamais utilisés, je ne peux donc utiliser Mac qu'à titre d'exemple. Une fois que vous aurez compris ces concepts, je pense que vous pourrez trouver vous-même les méthodes spécifiques.

巴扎黑

Petit ajout à la réponse acceptée

ssh-add Cette commande n'est pas utilisée pour mémoriser en permanence la clé privée que vous utilisez. En fait, sa fonction est simplement d'ajouter la clé privée que vous spécifiez à une
session gérée par ssh-agent. Et ssh-agent est un service de session temporaire utilisé pour stocker les clés privées, ce qui signifie que lorsque vous redémarrez, le service ssh-agent
sera réinitialisé.

Vous pouvez apprendre comment l'ajouter à la session en cours à partir de l'article github :
Générer une nouvelle clé SSH et l'ajouter à l'agent ssh

Vous pouvez découvrir comment ssh utilise les paires de clés publiques et de clés privées grâce à l'article suivant :
Erreur : autorisation refusée (clé publique)

De plus, le contenu de la configuration locale est placé dans le fichier :

/Users/you/.ssh/config
伊谢尔伦

J'utilise simplement le même compte et le même mot de passe github.com coding.net. Cela peut être utilisé.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal