Comment puis-je me connecter à un autre ordinateur via SSH sur une seule ligne? Si je devais le faire ssh host@IP
, il me faudrait saisir le mot de passe sur la deuxième ligne. Je pensais que je pouvais faire quelque chose comme ça:, ssh host@IP | echo password
mais cela met le mot de passe avant de demander le mot de passe.
26
ssh
lirait le mot de passe depuis stdin,echo password | ssh host@IP
cela fonctionnerait, mais généralement SSH essaie de lire directement depuis le terminal.Réponses:
Vous devez utiliser des clés SSH pour vous authentifier plutôt que de mettre votre mot de passe sur la ligne de commande car il est extrêmement peu sûr.
La façon dont cela fonctionne est une fois que vous avez configuré vos clés SSH, tout ce que vous avez à faire est d'émettre la commande:
et sans taper autre chose, vous serez automatiquement connecté.
Copier la clé publique SSH sur Mac / FreeBSD / Linux à partir de macOS
Cela suppose que vous avez accès au serveur distant via une authentification par mot de passe (en tapant un mot de passe) et que vous avez déjà généré votre paire de clés privée / publique (sinon, voir ci-dessous). Dans l'exemple suivant, nous utilisons RSA. Pour commencer, copions la clé (sachez que le répertoire "home" diffère entre macOS, Linux, BSD, etc.):
Utilisation de SCP:
Ou simplement attraper le fichier
authorized_keys
(je préfère cette méthode):(Votre nom de clé peut différer) Si le répertoire .ssh n'existe pas sur le serveur distant, vous devrez vous connecter et le créer.
Maintenant, la clé a été copiée du mac vers le serveur distant . Définissez les autorisations correctes pour la clé publique SSH sur le serveur distant:
Ajoutez ensuite la clé au fichier SSH authorized_keys, si le fichier n'existe pas, créez-le.
Si le fichier
authorized_keys
existe déjà dans~/.ssh
la, utilisez la commande suivante:Si le fichier n'existe pas, entrez les commandes suivantes:
Générer une clé publique / privée SSH sur macOS
Ouvrez le terminal en allant dans Applications -> Utilitaires -> Terminal
Dans le terminal, utilisez la commande suivante pour démarrer la génération de clés
Ensuite, vous serez invité à fournir l'emplacement où vous souhaitez créer le fichier de clé privée:
Entrez le fichier dans lequel enregistrer la clé (
/Users/username/.ssh/id_rsa
):Laissez ce champ vide pour créer la clé à l'emplacement par défaut, qui est
/Users/username/.ssh/id_rsa
. Le fichier de clé publique sera créé au même emplacement et avec le même nom, mais avec l'extension .PUB.Après, vous serez invité à choisir une phrase secrète. Il s'agit du mot de passe facultatif pour utiliser la clé privée.
Votre clé SSH est générée.
Maintenant, gardez à l'esprit que si vous entrez une phrase secrète, vous devrez la saisir à chaque connexion. L'utilitaire
ssh-agent
gardera la phrase secrète en mémoire, ce qui vous évitera de la saisir manuellement à chaque fois que vous vous connectez pendant que vous êtes dans la même session. Pour plus de détails, voirman ssh-agent
la source
ssh-copy-id
c'est un bel outil pour automatiser certains des éléments ci-dessus.Il existe plusieurs possibilités. Votre exemple ne fonctionnera évidemment pas, mais vous pouvez réaliser quelque chose de similaire en utilisant l'
sshpass
utilitaire:Notez que cela n'est pas recommandé car
password
il sera visible pour d'autres processus ou dans l'historique du shell.Une bien meilleure façon de faire de même consiste à configurer l'authentification sans mot de passe à l'aide des clés SSH. En bref:
la source
sshpass
comme vous l'avez recommandé, mais il a dit que la commande était introuvable.ps auxw | grep sshpass
qui dira aux autres utilisateurs le mot de passe ssh.pi@sshbox:~ $ ps auxw | grep sshpass pi 4891 0.0 0.3 2256 1560 pts/0 S+ 06:29 0:00 sshpass -p zzzzzzzz ssh [email protected]
. Lezzzzzzzz
est littéral; sshpass masque le contenu du mot de passe. Peut-être que les versions précédentes étaient moins sensibles à la confidentialité.J'ai aussi passé beaucoup de temps à chercher la réponse à cela. Bien qu'il ne soit pas sûr et que toutes ces personnes vous disent d'utiliser des clés RSA ( ce qui est une idée plus sûre et fiable ), c'est tout à fait possible.
Utilisez un programme appelé
expect
pour cela. Expect surveillera stdout (et je pense que stderr s'il est configuré correctement) pour vous, en attendant certains messages et en y répondant avec une sortie. S'attendre à lui-même est en fait un langage de script, et quand je faisais la même chose, j'ai eu beaucoup de mal à faire fonctionner correctement mon propre script à cause du timing. Cependant, attendez également inclut un utilitaire pratique appeléautoexpect
.Avec autoexpect, il vous surveillera et générera un script d'attente pour vous. Exécutez simplement autoexpect et la commande souhaitée:
et faites ce que vous feriez normalement. Lorsque vous quittez le programme (en tapant
exit
dans le shell ssh'd), il génère le script. Dans le cas où vous ne voulez pas que tout le script que vous écrivez soit dans un script attendu, vous pouvez modifier le script depuis autoexpect (appeléscript.exp
) pour quitter avant de taper laexit
commande dans le shell. La ligne que vous souhaitez déplacer pour modifier la fin du script est:ce qui signifie attendre la fin du fichier. J'espère que cela t'aides!
la source
Il
expect
est tout simplement faux de se connecter à une connexion ssh pour autre chose que dans une suite de tests.Ce que @ ben-a recherche est déjà implémenté dans ssh. L'astuce consiste à savoir comment l'utiliser. Alors voilà:
ssh-keygen
. Utilisez ECDSA ou RSA comme-t
(ou type) et pour RSA utilisez 2048 ou 4096 comme-b
(ou longueur BITS). Cela devrait suffire au moment de la rédaction. Utilisez TOUJOURS un MOT DE PASSE!ssh-copy-id
ou la méthodologie mentionnée ci-dessus pour créer sur la machine à laquelle vous vous connectez (aka le serveur) le~/.ssh/authorized_keys
fichier. Il contient une copie de la clé publique que vous venez de générer.~/.ssh/config
. S'il n'existe pas, vous pouvez le créer.Dans ce fichier, vous ajoutez ce qui suit à vos besoins
Vous pouvez maintenant utiliser simplement
ssh <name>
pour configurer la connexion, mais il aura toujours besoin du mot de passe pour votre clé. Pour résoudre ce problème, utilisez l'agent ssh développé et inclus à cet effet. Pour ajouter votre clé à l'agent, utilisez simplementssh-add <path to keyfile>
. Le mot de passe vous sera demandé et il conservera la clé pour vous en toute sécurité pour cette session. S'il renvoie l'erreur "impossible de trouver l'agent ssh" (ou similaire), cela signifie que l'agent n'a probablement pas été démarré. Vous pouvez le démarrer pour cette session en utilisantssh-agent bash
. Cela lancera un nouveau shell avec l'agent actif dedans.Lorsque vous utilisez ces étapes, non seulement il est plus difficile pour quelqu'un de vous usurper votre identité en détournant vos informations d'identification, mais vous gardez également la convivialité en ordre (c'est plus facile à utiliser que les mots de passe simples).
la source