J'utilise Mac OS X Lion et je me connecte à des hôtes distants via SSH tous les jours. Malgré le fait que j'utilise une paire de clés SSH pour l'authentification à distance et que je n'ai pas besoin de motoriser la phrase de connexion de chaque hôte, il est toujours très ennuyeux que le terminal demande la phrase secrète pour accéder à ma clé privée SSH.
Pour des raisons de sécurité, je pense qu'une phrase secrète pour accéder à la clé privée SSH est indispensable. Existe-t-il un moyen qui permet au terminal de demander la phrase exactement une seule fois au démarrage, puis de la mémoriser et d'utiliser automatiquement ma clé privée dans les sessions SSH ultérieures?
Il existe un script appelé keychain
qui fonctionne très bien sur Gentoo Linux. Mais je ne l'ai jamais compris sur Mac OS X Lion. De plus, il y a tellement de termes intimidants, comme ssh-agent
, ssh-add
. Après avoir lu divers documents sur ces boîtes à outils SSH et fait des expériences frustrées, je suis devenu plus confus.
Par conséquent, je suis venu à StackExchange, à la recherche de conseils sur les questions suivantes.
- Quels sont
ssh-agent
,ssh-add
,keychain
,Keychain Access.app
et comment ils interagissent les uns avec les autres? - Comment puis-je saisir la phrase secrète de ma clé privée SSH une fois à la connexion et l'utiliser librement lors de la création de session SSH ultérieure?
- Euh ... Qu'est-ce qui ne va pas
Keychain Access.app
? Il ne stocke pas la phrase SSH comme auparavant.
Je liste ce que j'ai fait ici. J'espère qu'il y a des indices sur les étapes que j'ai manquées.
Étape 1. Créez une paire de clés SSH sur mon Mac.
$ ssh-keygen -t rsa -C "[email protected]"
# Set a passphrase for accessing the private key.
Étape 2. Copiez ma clé publique SSH sur l'hôte distant. Pour prendre un exemple, je copie la clé sur localhost, Mac.
$ ssh-copy-id USER@localhost
# Enter the login password for USER at localhost, not my SSH passphrase
Étape 3. Ensuite, essayez de vous connecter à l'hôte distant (localhost ici), via l'authentification par paire de clés SSH.
$ ssh USER@locahost
Enter passphrase for key '/Users/YOUR_ACCOUNT/.ssh/id_rsa':
# Enter my SSH passphrase, not the login password.
Étape 4. Déconnectez-vous de l'hôte distant et essayez de vous y connecter à nouveau. Merde, le terminal demande à nouveau la phrase SSH.
Une question fréquemment posée est: "Est-ce que ssh-agent fonctionne bien sur votre Mac?". Franchement, je n'ai aucune idée de ce qui se passe. Voici quelques résultats en cours d'exécution.
$ echo $SSH_AUTH_SOCK
/tmp/launch-M48niA/Listeners
$ echo $SSH_AUTH_PID
(EMPTY)
$ ssh-add -l
Could not open a connection to your authentication agent.
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-Z54zXukQiP/agent.26769; export SSH_AUTH_SOCK;
SSH_AGENT_PID=26770; export SSH_AGENT_PID;
echo Agent pid 26770;
$ ssh-add -l
Could not open a connection to your authentication agent.
$ echo $SSH_AUTH_SOCK
/tmp/launch-M48niA/Listeners
$ echo $SSH_AUTH_PID
(STILL EMPTY)
$ ssh-agent # Oh no, anther ssh-agent with different PID
SSH_AUTH_SOCK=/tmp/ssh-cx0B4FUX8B/agent.26898; export SSH_AUTH_SOCK;
SSH_AGENT_PID=26899; export SSH_AGENT_PID;
echo Agent pid 26899;
$ ps -e | grep -i ssh
26769 ?? 0:00.03 ssh-agent
26899 ?? 0:00.02 ssh-agent
Toute rétroaction est la bienvenue. Merci!
Réponses:
ssh-agent
est la pièce que vous voulez faire travailler, car elle fait exactement ce que vous demandez. L'agent s'exécute en tant que démon et lorsque vous lui "ajoutez" une clé privée, il se souvient de cette clé et la fournit automatiquement à la télécommandesshd
lors de la connexion initiale. (ssh-add
est simplement la commande à laquelle vous exécutez pour ajouter manuellement une clé privéessh-agent
).Sous OS X, à partir de Leopard, vous ne devriez jamais avoir à exécuter
ssh-agent
oussh-add
manuellement. Cela devrait "se produire" lorsque vous essayez de vous connecter à un serveur. Une fois par clé, il vous invitera avec une boîte de dialogue de mot de passe de l'interface utilisateur, qui (entre autres choses) vous permettra d'ajouter automatiquement la clé à lassh-agent
afin que vous ne soyez plus jamais invité.Ceci est géré en ayant une
launchd
configuration qui écoute les connexions sur le$SSH_AUTH_SOCK
socket, et se lance automatiquementssh-agent
quand il en a besoin; après cela,ssh-agent
vous invite à saisir vos informations d'identification uniquement lorsqu'il doit ouvrir une nouvelle clé.Si cela ne fonctionne pas, assurez-vous que le bon
launchd
fichier de configuration est présent:Si cela ne fonctionne toujours pas pour vous pour une raison quelconque, voici la "vieille" façon de faire fonctionner les choses à la main:
http://timesinker.blogspot.com/2007/08/getting-ssh-agent-going-on-mac-osx.html
Il y a aussi cette application, que j'ai cessé d'utiliser depuis la sortie de Leopard mais qui a essentiellement fait la même chose dans les versions précédentes de Mac OS X:
http://www.sshkeychain.org/
la source
~/tmp
pointant vers/tmp/
et exécutant une tâche cron pour nettoyer~/tmp
toutes les 2 heures, ce qui a également supprimé le socket ssh-agent. Oh mec, je me déteste.Au cours du processus de résolution du « problème », j'ai googlé des sujets connexes et d' écrire quelques notes sur la façon dont
ssh-agent
,ssh-add
,keychain
,KeyChain Access.app
travail. Il s'avère finalement que ce problème n'est pas du tout un problème, mais plutôt de moi, et ce que l'on appelle ssh-login-without-ask-passphrase-every-time fonctionne parfaitement sur Mac prêt à l'emploi.Cependant, ce processus m'a fait gagner quelques expériences. J'écris mes notes ici dans l'espoir qu'elles aident quelqu'un à confondre ces termes.
Deux termes de mot de passe:
passphrase
fait référence à la phrase requise lors de l'accès à votre clé privée SSH.password
fait référence à l'expression requise pour se connecter à votre Mac.Maintenant , je peux comprendre ce que ces boîtes à outils font, qui est,
ssh-agent
,ssh-add
,keychain
,Keychain Access.app
sur Mac.ssh-agent
est le service essentiel pour permettre l'utilisation de la clé privée SSH sans saisir de phrase secrète SSH.ssh-agent
fonctionne de cette façon. Tout d'abord, il stocke ou met en cache votre clé privée SSH dans la mémoire principale. Ensuite, plus tard dans cette session, lorsque votre clé SSH privée SSH sera nécessaire pour l'authentification à distance,ssh-agent
elle trouvera votre clé privée dans la mémoire principale et la remettra au processus distant. La seule chance que l'on vous demande de saisir votre phrase secrète SSH est lorsque votre clé privée est ajoutéessh-agent
initialement.ssh-add
fait partie de lassh-agent
collection, ce qui permet de gérer vos clés SSH dansssh-agent
. Nous utilisons lassh-add
commande pour lister, ajouter, supprimer des clés privées dans le trousseau de clés de ssh-agent.ssh-add
Communique ensuite avec lessh-agent
service pour accomplir les tâches.keychain
est un script pour trouver unssh-agent
service (s'il n'existe pas, en démarrer un nouveau) et appelerssh-add
pour ajouter des clés privées SSH.keychain
a une idée simple et directe, fonctionne très bien sur Linux où ssh-agent ne démarre généralement pas automatiquement.Keychain Access.app
semble être le composant le plus compliqué. Il s'agit du service de stockage de jetons universel de Mac OS X. Il stocke divers jetons, tels que les mots de passe, les certificats et autres, et sert d' agent de jeton pour les applications qui demandent les jetons. Dans notre cas de clé privée SSH, il saisit d'abord la demande d'accès à la clé privée SSH et ouvre une fenêtre pour vous demander de stocker la phrase secrète SSH, qui est une sorte de jeton, dansKeychain Access.app
le trousseau de clés. Ensuite, la prochaine fois que vous utiliserez des clés privées pour l'authentification,Keychain Access.app
une nouvelle fenêtre apparaîtra, vous demandant si vous accordez le privilège. Après avoir obtenu un grand oui,keychain Access.app
ajoute votre clé privée dansssh-agent
le stockage de.Deux choses méritent votre attention:
ssh-agent
service au démarrage, en écoutant sur un socket situé sous/tmp
.Keychain Access.app
stocke votre phrase secrète SSH, afin qu'il puisse ajouter votre clé privéessh-agent
sans vous interrompre. Oui, pas besoin de taper votre phrase SSH, mais vous devez taper le mot de passe de connexion de votre compte Mac pour accorder le privilège lors de la création de cette entrée pour la première fois.Donc, en résumé, SSH-login-without-ask-passphrase devrait fonctionner sur Mac OS X prêt à l'emploi.
la source
Dans le cas où d'autres solutions ici ne fonctionnent pas pour les gens, ce qui suit a fonctionné pour moi.
Pour chaque clé privée de votre répertoire ~ / .ssh, assurez-vous que la clé publique correspondante est également présente. Assurez-vous que la clé publique est nommée exactement de la même manière que la clé privée, mais
.pub
à la fin. Si vous disposiez déjà d'une clé publique appropriée, essayez de la régénérer.Si vous avez besoin de recréer les clés publiques, vous pouvez le faire facilement: -
le remplacer
my_key
par le nom de votre clé.Après cela, MacOS se souvient comme il se doit de la phrase secrète de clé dans le trousseau.
Remarque - entrer la phrase secrète et l'enregistrer le trousseau est désormais une action unique (pas une fois par session de connexion comme OP le souhaite), mais en supposant que la connexion au mac en question est protégée par mot de passe, votre phrase secrète est protégée par ce mot de passe de connexion. De plus, cette solution n'a aucun sens pour moi ... une clé publique ne devrait pas être requise en plus de la clé privée, mais pour une raison quelconque, MacOSX l'exige.
(à l'origine de la réponse à une question similaire sur Apple Stack Exchange)
la source
La seule chose que je trouve rarement mentionnée concernant la configuration du
~/.ssh
dossier est de restreindre les autorisations de répertoire.Pour permettre à ssh d'éviter de demander le mot de passe, j'ai toujours dû définir les autorisations du répertoire personnel de l'utilisateur sur
700
, ainsi que les~/.ssh
autorisations sur les dossiers700
.Sinon, il continue de me demander un mot de passe même si toutes les clés sont générées et copiées correctement. Un message d'erreur est généré dans les journaux d'authentification, mais il est invisible pour la plupart des utilisateurs finaux.
la source
Une autre chose que vous auriez pu essayer aurait été de remplacer
ssh-copy-id
par quelque chose commek="$(cat ~/.ssh/id_rsa.pub)"; ssh [email protected] "umask 0077; mkdir -p ~/.ssh; echo "$k" >> ~/.ssh/authorized_keys2"
.la source
Cette réponse n'est pas la solution à cette question; cependant c'est très proche (je me suis retrouvé sur cette question en cherchant une solution à mon problème).
Je fais également beaucoup de SSH sur des serveurs distants sur mon Mac, comme décrit dans cette question, mais l'
Keychain Access.app
application a stocké la phrase clé et je n'ai pas besoin de la saisir chaque fois que j'ai besoin de la clé pour m'authentifier sur un serveur SSH.Cependant, j'ai activé le serveur SSH sur mon Mac, afin de pouvoir me connecter à distance. Lorsque je me connectais à distance sur mon Mac, la phrase clé était toujours demandée quand je voulais SSH encore un autre hôte.
J'ai trouvé une solution qui permet de stocker la phrase clé pour la session en cours. J'ai pensé que cela pourrait être utile à quelqu'un, d'où ce post / réponse.
la source
J'ai été perplexe sur ce problème. ssh fonctionne sur toutes les machines de notre département SAUF pour les pommes (MacBooks ou iMacs n'a pas d'importance). Je me suis finalement lassé de taper les mots de passe et j'ai décidé de déboguer cela.
Je suis allé sur mon iMac et j'ai désactivé sshd dans le panneau des préférences de partage. J'ai ensuite poursuivi en root et tapé "/ usr / sbin / sshd -d" pour lancer sshd en mode débogage. J'ai ensuite essayé de ssh sur cette machine et il a rapidement essayé d'utiliser le protocole 2, que tout semble utiliser très bien, mais sshd a rapidement signalé qu'il ne pouvait pas trouver "authorized_keys". J'avais un fichier authorized_keys2 que toutes mes boîtes unix linux, solaris, you-name-it acceptent très bien. J'ai simplement copié authorized_keys2 vers authorized_keys et BOOM. Fonctionne parfaitement maintenant.
Pourquoi * touches plutôt que * touches2 est inconnue. Surtout quand os x est assez satisfait de known_hosts2.
Dans tous les cas, maintenant toutes nos boîtes Apple peuvent être connectées à, ou avoir des commandes à distance exécutées sur elles sans ce mot de passe falsifié: invite ...
la source