J'ai mis en place une configuration sans mot de passe pour ssh qui utilise l'authentification par clé publique pour se connecter au serveur distant souhaité, tout fonctionne assez bien.
J'utilise une phrase secrète pour déverrouiller la clé privée, en utilisant cette solution - le problème est qu'il demande un mot de passe chaque fois que je démarre mon système.
J'ai trouvé que c'était gênant, je veux y entrer une fois pour toutes donc la prochaine fois que je démarrerai la session, je n'aurai pas à saisissez-le à nouveau, y a-t-il quelque chose comme une clé en cache qui contient ma phrase secrète et fonctionne pendant toute la session (survit également à un redémarrage)?
Serait-il possible de réaliser tout cela tout en conservant ma phrase secrète ssh?
Courir ssh-keygen -p
. Cela vous permettra de supprimer le mot de passe défini sur la clé. Si aucune phrase de passe n'est définie, elle est stockée en texte clair et vous pouvez l'utiliser sans la déverrouiller:
$ ssh-keygen -p
Enter file in which the key is (/home/user/.ssh/id_rsa):
Enter old passphrase:
Key has comment ''
Enter new passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved with the new passphrase.
Appuyez simplement sur Entrée lorsque vous êtes invité à saisir un mot de passe pour ne définir aucun mot de passe. Après cela, vous pouvez utiliser votre clé librement.
Vous souhaitez utiliser keychain
.
Le programme keychain
gère une instance du programme de cache de clés ssh-agent
. Quand ssh-agent
est démarré, deux variables d'environnement sont créées pour être évaluées. Normalement, lorsque le shell est fermé où ssh-agent
a été démarré, ces variables d'environnement sont perdues. Le programme keychain
assure le suivi de ces variables dans les connexions et fournit des scripts Shell dans le ~\.keychain
répertoire.
Il existe plusieurs façons d'exécuter keychain
, une méthode est manuellement à partir de la ligne de commande. Chaque fois que vous démarrez le Shell, utilisez:
eval `keychain --eval`
Cela trouvera ssh-agent
s'il fonctionne, et démarrez-le s'il ne l'est pas. Dans les deux cas, utiliser eval sur keychain
définira les variables d'environnement nécessaires où vous pourrez ajouter des clés en utilisant:
ssh-add <private-keyfile>
Si private-keyfile
possède un mot de passe, vous serez invité à saisir ce mot de passe lors de l'exécution de ssh-add
, mais tant que ssh-agent
est en cours d'exécution. Ce sera la dernière fois que vous devrez saisir le mot de passe de la clé privée.
Parce que l’évaluation de keychain
définit le SSH_AUTH_SOCK
variable d'environnement, toute exécution de ssh
utilisera le ssh-agent
pour effectuer l'authentification.
Une autre suggestion consiste à ajouter l'exécution keychain
à votre .bashrc
fichier, comme suggéré dans cette réponse StackExchange .
Pour terminer keychain
entrez simplement la commande:
keychain --stop mine
ou si vous souhaitez supprimer toutes les instances de ssh-agent
, entrez la commande:
keychain --stop all
Juste une note, en utilisant des services tels que ssh-agent
déjouer la sécurité des fichiers de clés privées avec mot de passe en stockant ces clés authentifiées en mémoire. Ce n'est pas sûr, surtout avec les attaques par canal latéral de mémoire. Si vous n'êtes pas intéressé par la sécurité des clés, la solution la plus simple consiste à supprimer le mot de passe sur la clé privée comme suggéré par @vidarlo.
La réponse simple est non.
Cela va à l'encontre de l'objectif (c'est-à-dire la protection) s'il est maintenu à travers les redémarrages.
Vous pouvez cependant le maintenir sur plusieurs sessions de connexion et même sur plusieurs terminaux.
Si vous souhaitez conserver les sessions de connexion mais que vous êtes autorisé à saisir le mot de passe une fois par terminal, ajoutez eval $(ssh-add)
à .bash_profile
Si vous souhaitez le faire une fois par redémarrage du système, installez le trousseau, modifiez votre ~/.ssh/config
fichier pour ajouter des clés au trousseau (AddKeysToAgent yes
) et effectuez également l'étape ci-dessus.