Je souhaite communiquer entre plusieurs ordinateurs de mon réseau (Ethernet statique), via SSH. Pour ce faire, je dois exécuter ssh-add chaque fois que je me connecte à une machine spécifique. Comment puis-je le faire pour qu'il soit configuré une fois et qu'il ne me demande pas la phrase secrète à chaque fois que je me connecte ou redémarre ma machine?
Je sais qu'il existe un moyen d'ajouter des lignes au bash_profile
fichier, mais je dois tout de même taper le mot de passe chaque fois que je redémarre / me connecte à une machine spécifique.
if [ -z "$SSH_AUTH_SOCK" ] ; then
eval `ssh-agent -s`
ssh-add
fi
Réponses:
Ceci est un exemple typique de compromis entre sécurité et commodité. Heureusement, il existe un certain nombre d'options. La solution la plus appropriée dépend du scénario d'utilisation et du niveau de sécurité souhaité.
clé ssh avec phrase secrète, non
ssh-agent
Maintenant, la phrase secrète doit être entrée chaque fois que la clé est utilisée pour l'authentification. Bien que ce soit la meilleure option du point de vue de la sécurité, elle offre la pire utilisabilité. Cela peut également conduire à choisir une phrase secrète faible dans l'ordre afin d'alléger le fardeau de la saisie répétée.
ssh-key avec mot de passe, avec
ssh-agent
Ajouter ce qui suit pour
~/.bash_profile
démarrer automatiquementssh-agent
et charger la / les clé (s) ssh lors de la connexion:Maintenant, la phrase secrète doit être entrée à chaque connexion. Bien que légèrement meilleur du point de vue de la convivialité, cela présente l'inconvénient de
ssh-agent
demander la phrase secrète, que la clé soit utilisée ou non au cours de la session de connexion. Chaque nouvelle connexion génère également unessh-agent
instance distincte qui reste en cours d'exécution avec les clés ajoutées en mémoire, même après la déconnexion, à moins d'être explicitement tué.Pour tuer
ssh_agent
à la déconnexion, ajoutez ce qui suit à~/.bash_logout
ou le suivant pour
~/.bash_profile
La création de plusieurs
ssh-agent
instances peut être évitée en créant un socket de communication persistante avec l'agent à un emplacement fixe dans le système de fichiers, comme dans la réponse de Collin Anderson . Il s'agit toutefois d'une amélioration par rapport à la création d'instances d'agents multiples, sauf si la clé déchiffrée est explicitement détruite, elle reste en mémoire après la déconnexion.Sur les ordinateurs de bureau, les agents ssh inclus dans l’environnement de bureau, tels que l’ agent SSH Gnome Keyring , peuvent constituer une meilleure approche, car ils peuvent généralement être invités à demander la phrase secrète lors de la première utilisation de la clé ssh au cours d’une session de connexion. stockez la clé privée déchiffrée en mémoire jusqu'à la fin de la session.
ssh-key avec mot de passe, avec
ssh-ident
ssh-ident
est un utilitaire qui peut gérerssh-agent
en votre nom et charger les identités si nécessaire. Il n’ajoute les clés qu’une fois selon les besoins, quel que soit le nombre de terminaux, de sessions SSH ou de sessions de connexion nécessitant l’accès à unssh-agent
. Il peut également ajouter et utiliser un agent différent et un ensemble de clés différent en fonction de l'hôte auquel vous êtes connecté ou du répertoire à partir duquel ssh est appelé. Cela permet d'isoler les clés lors de l'utilisation du transfert d'agent avec différents hôtes. Cela permet également d'utiliser plusieurs comptes sur des sites tels que GitHub.Pour l'activer
ssh-ident
, installez-le et ajoutez l'alias suivant à votre~/bash_profile
:ssh-key avec mot de passe, avec
keychain
keychain
est un petit utilitaire qui gèressh-agent
en votre nom et permetssh-agent
de rester actif à la fin de la session de connexion. Lors des connexions suivantes,keychain
se connectera à l'ssh-agent
instance existante . En pratique, cela signifie que le mot de passe doit être saisi uniquement lors de la première connexion après un redémarrage. Lors des connexions suivantes, la clé non chiffrée de l'ssh-agent
instance existante est utilisée. Cela peut également être utile pour permettre une authentification RSA / DSAcron
sans mot de passe dans des travaux sans clé ssh sans mot de passe.Pour l'activer
keychain
, installez-le et ajoutez quelque chose comme ce qui suit~/.bash_profile
:D'un point de vue de la sécurité,
ssh-ident
etkeychain
sont pires que desssh-agent
cas limités à la durée de vie d'une session particulière, mais ils offrent un haut niveau de confort. Pour améliorer la sécurité dekeychain
, certaines personnes ajoutent l'--clear
option à leur~/.bash_profile
invocation de trousseau. En procédant ainsi, vous devez saisir à nouveau les mots de passe lors de la connexion, comme indiqué ci-dessus, mais lescron
tâches auront toujours accès aux clés non chiffrées après la déconnexion de l'utilisateur. Lakeychain
page wiki contient plus d'informations et d'exemples.clé ssh sans phrase secrète
Du point de vue de la sécurité, il s’agit de la pire des solutions car la clé privée n’est totalement pas protégée au cas où elle serait exposée. C’est toutefois le seul moyen de s’assurer que la phrase secrète n’a pas besoin d’être saisie à nouveau après un redémarrage.
ssh-key avec phrase secrète, avec
ssh-agent
, en passant la phrase secrète àssh-add
partir du scriptBien que cela puisse sembler une idée simple de passer la phrase secrète à
ssh-add
partir d'un script, par exempleecho "passphrase\n" | ssh-add
, ce n'est pas aussi simple qu'il n'y paraît, carssh-add
cela ne lit pas la phrase secrètestdin
, mais s'ouvre/dev/tty
directement à la lecture .Ceci peut être contourné avec
expect
, un outil pour automatiser des applications interactives. Voici un exemple de script qui ajoute une clé ssh à l'aide d'une phrase secrète stockée dans le script:Notez que, comme la phrase secrète est stockée en texte brut dans le script, du point de vue de la sécurité, cela n’est guère mieux que d’avoir une clé ssh sans mot de passe. Si cette approche doit être utilisée, il est important de vous assurer que les
expect
autorisations appropriées sont attribuées au script contenant la phrase secrète, de manière à ce qu'il soit lisible, inscriptible et exécutable uniquement par le propriétaire de la clé.la source
ssh-agent
extrait~/.bash_profile
se comporte comme expliqué dans la réponse. Vous voudrez peut-être regarder l'keychain
utilitaire. Aveckeychain
vous devez entrer le mot de passe lors de la première connexion après le redémarrage, mais lors des connexions suivanteskeychain
, vous vous connecterez à unessh-agent
instance existante avec la clé déchiffrée en mémoire. En dehors de cela, il est possible de générer une clé ssh sans phrase secrète, mais cela n'est bien sûr pas recommandé.ssh-add
partir d'un script. La raisonecho "pass\n" | ssh-add
ne fonctionne pas, c'est quessh-add
ne lit pas le mot de passe destdin
, mais ouvre/dev/tty
directement à la lecture. Mise à jour de la réponse pour inclure une solution de contournement à cet effet, à l'aide d'un utilitaire appeléexpect
.gssapi-with-mic
. Ceci est généralement utilisé dans les grands réseaux, mais bien sûr, si cela vous intéresse, cela vaut la peine de regarder.Ajoutez ceci à votre
~/.bashrc
, puis déconnectez-vous et reconnectez-vous pour prendre effet.Cela ne devrait vous demander un mot de passe que la première fois que vous vous connectez après chaque redémarrage. Il continuera à réutiliser le même
ssh-agent
tant qu'il reste en marche.la source
ssh-add -l
renvoie un code de sortie de 0 lorsque l'agent a des identités et de 1 lorsqu'il ne le peut pas. Vous pouvez donc supprimer grep de la dernière commande et l'utiliser.ssh-add -l > '/dev/null' || ssh-add
Pas étroitement lié à la question du PO, mais cela pourrait être utile à d'autres: depuis la version 7.2.0, ssh (1) dispose d'une option permettant d'ajouter une clé à ssh-agent lors de la première authentification; l'option est
AddKeysToAgent
et peut être réglé suryes
,no
,ask
ouconfirm
, ou sur votre systemwide personnel.ssh/config
fichier.Référence: https://www.openssh.com/txt/release-7.2
la source
.ssh/config
fichier pour la première fois : cela s'applique àssh
tout ce qui est utilisé enssh
arrière-plan, par exemplescp
, et peut être fait pour chaque hôte.ssh-agent
met en cache différentes clés ssh déverrouillées, de sorte que vous pouvez protéger les clés ssh par un mot de passe, sans avoir à les saisir à chaque fois.Afin de mettre en cache les clés déverrouillées, il doit évidemment les déverrouiller. Pour déverrouiller des clés verrouillées avec une phrase secrète, il est évidemment nécessaire de connaître ces phrases secrètes.
Toute méthode qui ne nécessite pas l'autorisation d'un être humain (par exemple, "taper un mot de passe") ne rendra pas seulement votre système peu sûr; cela va également vider de son sens tout le but de ssh-agent.
Ceci dit, vous pouvez simplement utiliser des clés ssh qui ne sont pas protégées Enterpar un mot de passe (appuyez sur la touche lorsqu'un mot de passe est demandé lors de la génération de la clé). Comme il n'y a pas de mot de passe, il
ssh-agent
n'est pas nécessaire de vous en demander un pour le (ne pas) le mettre en cache.la source
Voici une solution de contournement pour automatiser votre phrase secrète SSH.
Créez un script à une ligne qui imprime votre phrase secrète sur la sortie standard, par exemple:
Important: Assurez-vous de copier le premier espace pour éviter de stocker votre mot de passe dans votre historique .
Et utilisez l'une des méthodes ci-dessous.
en utilisant une approche d'entrée standard:
ou approche de conduite nommée :
Créez un canal nommé (vous pouvez également essayer une substitution de processus ):
Exécuter
ssh-add
en spécifiant le programme utilisé pour l'authentification:Voir:
man ssh-add
pour en savoir plus surSSH_ASKPASS
.la source
echo my_passphrase
est un grand trou de sécurité. Après avoir saisi le mot de passe, le mot de passe apparaît en clair dans l'historique de tous les types de shell que vous utilisez. Et les deuxièmes arguments en ligne de commande sont lisibles par tout le monde sous Unix (ps -ef
). Ne mettez jamais de mots de passe dans les arguments en ligne de commande!ps
sortie. Le fichier d’historique est généralement uniquement lisible par l’utilisateur propriétaire, mais les lignes de commande sont lisibles par tous les utilisateurs d’un système.Je ne vous recommanderai pas ssh-add (qui doit ouvrir un agent ssh) à la connexion. En effet, vous ne pouvez pas contrôler le moment auquel la section ssh-agent se termine et créer un risque pour la sécurité lorsque vous n'avez pas besoin d'utiliser les fichiers de clés dans une section de connexion.
Je recommande plutôt d'écrire un script qui ouvre un sous-shell de section de ssh-agent, avec tous les fichiers de clés automatiquement ajouté, et d'être appelé en cas de besoin pour utiliser ssh. Si vous pouviez l’adopter, lisez la suite.
Vous auriez deux choix:
Supprimez toutes les phrases secrètes de vos clés, qui ont une sécurité faible cas de vol de vos fichiers de clés. (donc pas recommandé )
Utilisez le même mot de passe pour vos clés. Puis quand tu
ssh-add keyfile1 keyfile2 ...
aurez besoin de saisir la phrase secrète une seule fois, par section.Dans les deux cas, vous pouvez écrire le fichier de script "ssh_keys_section.sh" comme ci-dessous:
Remarques:
ssh-keygen -p -f keyfile
/path/to/yourterminal &
(dépend du système d'exploitation).la source
/path/to/yourterminal &
==>mintty &
la source
J'avais l'habitude d'utiliser le script mentionné par steampowered, j'ai créé celui ci-dessous maintenant, car il ne laisse pas traîner de fichiers.
Travailler sur la
zsh
coquille seulement.la source
Donner du crédit ici: https://www.cygwin.com/ml/cygwin/2001-06/msg00537.html
Cette solution est également approuvée ici: http://mah.everybody.org/docs/ssh
la source
La solution d'authentification unique pour SSH pourrait me mener à
pam_ssh
.Selon cet article , le concept est:
Je n'ai pas vérifié si cela fonctionnerait réellement.
la source
Ajoutez ceci à votre
~/.bashrc
fichier:la source
Afin d’ajouter une clé (éventuellement sans mot de passe) et s’assurer que
ssh-add
le mot de passe ne sera pas demandé, quoi qu’il en soit, même sous X :L'état de sortie indique le succès ou l'échec.
la source
Si vous utilisez seahorse comme gestionnaire de mot de passe ... ce que vous êtes probablement; D
Une autre solution permettant d’atteindre l’objectif que vous recherchez consiste simplement à ajouter les clés ssh à seahorse pour un déverrouillage automatique lors de la connexion. Le principal avantage est que vous ne devez jamais entrer de mot de passe pour les clés après vous être connecté via gdm, ou quelle que soit votre connexion, même si les clés ont un mot de passe. Cela nécessite la clé privée et la clé publique. Ils doivent également suivre une convention de nommage pour les hippocampes. La valeur par défaut est acceptable (id_rsa pour la clé privée et id_rsa.pub pour la clé publique ... vraiment tout ce qui est privatekeyname et privatekeyname.pub )
Pour ajouter votre clé ssh à seahorse pour le déverrouillage automatique lors de la connexion; (sur fedora25, je ne suis pas sûr de savoir où se trouve le chemin sur d'autres distributions, même s'il est très probablement très similaire)
Pour moi, c'était
(Seahorse supposera automatiquement que la clé publique dans mon cas était id_rsa.pub)
Après avoir exécuté la commande, Seahorse ouvrira un joli champ de mot de passe gtk dans lequel entrer le mot de passe de la clé privée. ou laissez simplement le champ vide si vous avez généré la clé sans mot de passe.
Seahorse ne vous demandera pas si tout va bien. Vous devrez essayer de ssh sur la machine cible. Seahorse vous demandera ensuite de déverrouiller graphiquement la clé avec un mot de passe (CECI NE SE PRODUIRA QU'UNE FOIS), mais cela devrait être un peu différent cette fois-ci; P (c'est aussi la partie où l'hippocampe fait des hippocampes pour ajouter de la magie, je crois ), et offre l' OPTION pour déverrouiller la clé lors de la connexion, vous devez cocher cette option pour atteindre votre objectif.
Juste parce que je n'ai pas lu toutes les réponses, je recommanderais d'annuler ce que tout le monde vous a dit de faire avec ssh-add avant de tenter cette réponse. Autrement, vos clés pourraient être endommagées, idk.
la source
Voici le script définitif.
Mettez à jour $ PASSW, puis copiez-le dans votre terminal
la source
Le meilleur moyen que je connaisse consiste à utiliser un script de connexion PAM que j'ai adapté à partir de travaux précédents, car je ne trouvais pas de réponse satisfaisante à cette question.
Votre phrase secrète est stockée cryptée avec votre mot de passe système et une fonction de dérivation lourde. Lors de la connexion, votre mot de passe système est utilisé pour déchiffrer votre phrase secrète et l'ajouter à l'agent.
https://github.com/capocasa/systemd-user-pam-ssh
L'avantage par rapport à toutes les autres solutions présentées est de combiner une sécurité équivalente à l'exécution de ssh-add manuellement au démarrage sans aucun effort. Il ne nécessite aucun outil supplémentaire et a une dépendance supplémentaire qui est déjà installée par défaut sur la plupart des systèmes (OpenSSL).
la source
Ma configuration sur macOS est la suivante (dans
.zshrc
, ou.bash_profile
pour les bash):La
|| [[ $SSH_AUTH_SOCK == *"/private/tmp/"* ]]
partie est nécessaire sur macOS car la valeur par défaut est/private/tmp/com.apple.launchd.SOMETHINGHERE/Listeners
. Sinon, la réponse globale de @Thomas Nyman échoue car elle$SSH_AUTH_SOCK
est toujours définie sur quelque chose.Puis dans
.zlogout
(ou.bash_logout
pour les bash):Testé sur macOS Mojave 10.14.5
la source