Comment configurer SSH pour ne pas avoir à taper mon mot de passe lors de la connexion à un hôte?
~/.ssh/config
qui est maintenant requis PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss*
Comment configurer SSH pour ne pas avoir à taper mon mot de passe lors de la connexion à un hôte?
~/.ssh/config
qui est maintenant requis PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss*
Réponses:
Si vous utilisez GNOME, l’ application Seahorse ("Mots de passe et clés de cryptage") peut le faire pour vous: Fichier -> Nouveau -> Clé de shell sécurisée .
Si vous préférez le terminal, lancez pour générer une paire de clés. Les types de paire de clés valides sont:ssh-keygen -t <type>
Le programme vous demandera une phrase secrète et un emplacement pour enregistrer la nouvelle clé. Il est recommandé d'utiliser le chemin par défaut suggéré, car tous les autres outils le rechercheront.
Encore une fois, Seahorse peut souvent le faire pour vous - dans Mes clés personnelles , cliquez avec le bouton droit sur votre clé SSH et choisissez Configurer la clé pour un shell sécurisé .
Ou, ssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-host
dans le terminal.
Ou, complètement manuellement, étape par étape:
.ssh
dans le répertoire de base de l'utilisateur distant sur l'hôte distant.authorized_keys
(s'il n'existe pas déjà).umask
est plus libéral que d' habitude, rendre le fichier non-groupe inscriptibles: chmod go-w ~/.ssh ~/.ssh/authorized_keys
.~/.ssh/id_rsa.pub
) dans le ~/.ssh/authorized_keys
fichier distant .Si vous chargez votre clé privée dans un agent ssh , la clé déchiffrée sera conservée en mémoire. Nous voulons que cela évite de ressaisir le mot de passe chaque fois que nous envoyons un shell sur un serveur.
Tout d'abord, l'agent doit être démarré ou le chemin d'un socket de communication lancé doit être chargé dans une variable. L'exécution de ssh-agent sur un terminal générera des commandes pour affecter et définir les variables de l'agent. Ces commandes peuvent être enregistrées dans un fichier pour être utilisées dans un autre terminal. Sinon, vous pouvez exécuter ces commandes et oublier de réutiliser le même agent dans un autre terminal. par exemple: eval $(ssh-agent)
.
Le chargement de la clé consiste simplement à exécuter ssh-add
et à donner la phrase secrète.
Si vous utilisez GNOME, gnome-keyring-daemon fournit généralement les mêmes fonctionnalités d'agent SSH que ssh-agent. Vous n'avez donc pas besoin de démarrer quoi que ce soit. GNOME chargera et déverrouillera automatiquement la clé lors de la connexion.
Si tout a été fait correctement, using ne vous demandera pas de mot de passe. Si quelque chose ne va pas avec l'agent et non avec la clé, il vous sera demandé de saisir la phrase secrète de la clé et non le mot de passe du compte d'utilisateur.ssh user@server
Tout ce qui utilise ssh pour la communication fonctionnera sans entrer le mot de passe du compte utilisateur lorsque la clé correcte est chargée dans l'agent. Des programmes tels que scp , sftp et rsync l' utilisent.
id_dsa
place de id_rsa
, et ECDSA en aura id_ecdsa
.authorized_keys2
- mais il est très peu probable que vous utilisiez une version antérieure à la version 5.0.lsh
, ssh.com
et d’autres serveurs SSH (Unix et non) ne sont pas inclus dans ce tutoriel.Copier la clé publique sur un hôte distant:
ssh-copy-id -i ~ / .ssh / id_rsa.pub myaccount @ remotehost # this cat ~ / .ssh / id_rsa.pub | ssh myaccount @ remotehost \ 'mkdir -p ~ / .ssh; cat >> ~ / .ssh / registered_keys '# ou this
ssh-agent> ~ / .ssh / cross-terminal-agent . ~ / .ssh / cross-terminal-agent
ssh-copy-id
copie la clé publique sur l'hôte cible et définit automatiquement les autorisations.
ssh-keygen -f ~/.ssh/id_rsa -N "";ssh-copy-id -i ~/.ssh/id_rsa username@server-ip-or-address
(il suffit de remplacer username@server-ip-or-address
).
Vous n'avez pas précisé sur quel Unix vous êtes, à quel UNIX vous vous connectez, quel shell que vous utilisez, quelle variante SSH vous utilisez, etc. Il faudra donc peut-être ajuster légèrement certains éléments; Ceci est basé sur des versions raisonnablement récentes de OpenSSH, qui sont utilisées sur beaucoup de variantes Unix.
Tout cela provient de votre système de bureau local.
ssh-keygen
Assurez-vous d'utiliser la valeur par défaut pour le nom de clé. Je vous suggère de faire définir un mot de passe sur cette touche, sinon il est un problème de sécurité. "-trsa" ne serait pas une mauvaise idée, mais n'est probablement pas nécessaire.
ssh-copy-id username@server
Cela vous demandera le mot de passe que vous utiliseriez pour vous connecter, et configurera le matériel allowed_keys pour vous. (pas besoin de le faire à la main)
Ensuite ceci:
`ssh-agent`
ou peut-être ceci:
exec ssh-agent sh
ou:
exec ssh-agent bash
Cela démarrera un agent SSH pouvant contenir votre clé. Sur beaucoup de variantes Unix modernes, si vous êtes connecté graphiquement, cela aura déjà eu lieu. La première variante (avec les backticks) place un agent ssh en arrière-plan et configure les variables d'environnement pour qu'il puisse communiquer avec lui. Les deux autres font que l'agent exécute un shell pour vous. Ainsi, lorsque vous quittez le shell, l'agent se ferme.
De nombreuses variantes Unix modernes auront déjà un agent en cours d'exécution pour vous, surtout si vous vous êtes connecté graphiquement. Vous pouvez essayer " ps aux | grep ssh-agent
" ou " ps -ef | grep ssh-agent
"; si quelque chose fonctionne déjà, utilisez-le.
Finalement:
ssh-add
Il vous demandera un mot de passe. donnez-lui celui que vous avez donné à ssh-keygen. Il y a aussi des façons de le faire demander graphiquement. Et vous pouvez insérer les éléments ssh-agent et ssh-add dans vos scripts de connexion (la configuration varie en fonction du shell utilisé) pour automatiser cette opération, mais certaines variantes d'Unix (Ubuntu Linux actuel, par exemple) effectuent la plupart de ces tâches automatiquement. que tout ce que vous avez à faire est de créer une clé et d’utiliser ssh-copy-id pour la configurer sur l’hôte distant.
Maintenant, " ssh username@server
" devrait fonctionner sans demander d'authentification. En coulisse, il utilise une clé détenue par l'agent ssh et demande à l'agent de faire les tours de signature magiques.
Il est également possible de faire cela dans PuTTY sous Windows.
Une fois que vous avez la paire de clés publique / privée configurée (comme le montrent d’autres réponses ici), exécutez PuttyGen. Là, chargez la clé privée existante que vous avez déjà configurée, puis enregistrez-la en tant que clé privée PuTTY (ppk).
Ensuite, dans PuTTY, cliquez simplement sur la session enregistrée à laquelle vous souhaitez vous connecter automatiquement et cliquez sur Charger. À partir de là, allez dans Connexion -> Données dans le volet de gauche, et dans "Nom d'utilisateur avec connexion automatique", entrez le nom d'utilisateur de ce serveur distant:
Après cela, allez dans Connection -> SSH -> Auth, et recherchez le ppk que vous avez créé dans PuttyGen:
Revenez ensuite à la page de session et sauvegardez la session que vous avez précédemment chargée.
À partir d'une question très similaire sur ServerFault , je vous recommanderais d'utiliser ssh-copy-id , qui effectue toutes les étapes nécessaires à la configuration des clés d'authentification:
ssh-copy-id est un script qui utilise ssh pour se connecter à une machine distante (vraisemblablement en utilisant un mot de passe de connexion, l'authentification par mot de passe doit donc être activée, à moins que vous n'ayez utilisé intelligemment plusieurs identités).
Il modifie également les autorisations du domicile de l'utilisateur distant, ~ / .ssh et ~ / .ssh / allowed_keys pour supprimer l'aptitude du groupe à l'écriture (ce qui vous empêcherait de vous connecter si le sshd distant a StrictModes défini dans sa configuration).
Si l'option -i est donnée, le fichier d'identité (par défaut, ~ / .ssh / identity.pub) est utilisé, qu'il y ait ou non des clés dans votre agent ssh.
Tout ce que vous avez à faire est simplement ceci:
ssh-copy-id user@host
Tapez votre mot de passe une fois, et vous êtes prêt à partir!
En plus de tout ce qui a déjà été expliqué sur la façon de définir les clés ssh, je recommande Keychain comme interface frontale de la console ssh-agent, qui vous permet de gérer un seul processus système par processus au lieu de chaque connexion.
Je sais qu'il existe déjà des outils GNOME et KDE qui font la même chose, mais si vous êtes du type junkie sur console, c'est génial (et peut être utilisé sur la plupart des systèmes Unix).
Pour l'utiliser, ajoutez simplement ce qui suit à votre ~/.bashrc
(similaire pour les autres coquilles):
if type keychain >/dev/null 2>/dev/null; then
keychain --nogui -q <all your SSH/PGP keys>
[ -f ~/.keychain/${HOSTNAME}-sh ] && . ~/.keychain/${HOSTNAME}-sh
[ -f ~/.keychain/${HOSTNAME}-sh-gpg ] && . ~/.keychain/${HOSTNAME}-sh-gpg
fi
http://linuxproblem.org/art_9.html
Ton objectif
Vous souhaitez utiliser Linux et OpenSSH pour automatiser vos tâches. Par conséquent, vous avez besoin d'une connexion automatique de l'hôte A / utilisateur a à l'hôte B / utilisateur b. Vous ne voulez entrer aucun mot de passe, car vous voulez appeler ssh depuis un script shell.
J'ai écrit ce tutoriel très très court après avoir été VRAIMENT VRAIMENT frustré par des tutoriels VRAIMENT VRAIMENT longs parce que c'est vraiment si simple :)
test -f ~/.ssh/id_rsa.pub || ssh-keygen -t rsa #press enter twice if given prompts, then "ssh-add"
scp ~/.ssh/id_rsa.pub destID@destMachine:/tmp/ #type password
ssh destID@destMachine #type password
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
rm /tmp/id_rsa.pub
ssh-keygen
. (S'il vous indique que vous devez spécifier un type, faites-le ssh-keygen -t rsa
.) Lorsqu'il vous demande un emplacement de fichier, prenez le paramètre par défaut. Lorsqu'il vous demande une phrase secrète, appuyez sur Entrée pour ne pas utiliser de phrase secrète.cat ~/.ssh/id_rsa.pub
(ou quel que soit l'emplacement du fichier par défaut ssh-keygen
, bien que vous ayez besoin d'une très ancienne ssh
installation pour que ce soit différent); copiez la sortie dans votre presse-papier.~/.ssh/authorized_keys
(s'il ~/.ssh
n'existe pas, slogin
quelque part; c'est un moyen simple et facile de le créer avec les bonnes autorisations). Collez votre presse-papiers (contenant le id_rsa.pub
de l’autre hôte) dans ce fichier.Si vous voulez tout faire dans le terminal sous Linux:
Sur l'hôte
cd ~ / .ssh /
ssh-keygen -t {rsa | dsa} -b {1024 | 2048 | 4096} -C "du texte de commentaire si vous voulez" -f id_ArbitraryName
Les éléments dans {} sont des options, utilisez rsa ou dsa et choisissez la taille de bit (plus gros est sécurisé)
Ensuite, vous devez ajouter les autorisations aux fichiers allowed_keys et allowed_keys2.
cat id_ArbitraryName.pub >>keke_autorisées
cat id_AribtraryName.pub >> registered_keys2
Ensuite, téléchargez le fichier id_AribtraryName dans la boîte à partir de laquelle vous voulez ssh. Si la boîte de connexion est basée sur Unix, un fichier de configuration peut être nécessaire (dans le mastic, quelqu'un ci-dessus l'a couvert).
Sur la boite de connexion
Dans votre fichier de configuration - vim ~ / .ssh / config
Hôte example.host.com # ou le nom de votre ordinateur
Nom d'utilisateur
IdentityFile ~ / .ssh / id_ArbitraryName
Le fichier de configuration nécessite des autorisations de 600. Le dossier SSh en a besoin de 700.
J'espère que cela vous aidera si vous rencontrez un problème de configuration qui est souvent omis.