175 votes

Comment se connecter à vagrant sans exécuter "vagrant ssh" ?

Je voudrais reproduire la façon dont Vagrant se connecte à ma VM dans un script shell en utilisant un ssh Je crée donc un alias pour mon instance Vagrant.

Quelle est la syntaxe de la commande pour utiliser la commande régulière ssh pour y accéder ?

0 votes

Je vois trois questions différentes, peut-être pourriez-vous développer la question puis signaler la migration. Merci.

3 votes

Par défaut, le port ssh de la VM, qui est -22, sera redirigé vers 2222 sur la machine hôte. J'ai fait un putty sur 127.0.0.1 et le port 2222 avec SSH et ça a marché !

8 votes

Si vous utilisez plus d'une boîte, le numéro de port changera automatiquement. Vous pouvez obtenir le bon numéro en exécutant vagrant ssh-config .

192voto

Steven Soroka Points 8446

Il y a déjà beaucoup de réponses, mais elles semblent toutes trop compliquées ou résolvent des problèmes que le demandeur n'avait pas.

simplement :

# save the config to a file
vagrant ssh-config > vagrant-ssh

# run ssh with the file.
ssh -F vagrant-ssh default

2 votes

C'est incroyable. Pensez à ajouter vagrant-ssh dans .gitignore .

7 votes

Avec certains shells (par exemple zsh ), la phrase suivante fonctionne : ssh -F =(vagrant ssh-config) default

7 votes

Vous pourriez vouloir répercuter ce résultat dans votre ssh fichier de configuration : vagrant ssh-config >> ~/.ssh/config donc tu as juste à exécuter ssh default de n'importe où dans votre système, où default est le nom de la VM que vous pouvez spécifier comme aquí

114voto

Stefano Palazzo Points 1415

J'ai dû réimplémenter "vagrant ssh" parce que c'est -c n'a pas transmis les arguments correctement. Ceci est En gros, ce qu'il fait (il pourrait y en avoir plus, mais cela fonctionne bien de cette façon)

#!/bin/sh
PORT=$(vagrant ssh-config | grep Port | grep -o '[0-9]\+')
ssh -q \
    -o UserKnownHostsFile=/dev/null \
    -o StrictHostKeyChecking=no \
    -i ~/.vagrant.d/insecure_private_key \
    vagrant@localhost \
    -p $PORT \
    "$@"

En une phrase (avec les remerciements de kgadek) :

ssh $(vagrant ssh-config | awk 'NR>1 {print " -o "$1"="$2}') localhost

Pour tenir compte du fait que vous avez plus d'un hôte vagrant, ceci sélectionnera l'hôte désiré, ainsi que les lignes vides de la configuration (en utilisant sed) :

HOST=name-of-my-host
ssh $(vagrant ssh-config $HOST | sed '/^[[:space:]]*$/d' |  awk 'NR>1 {print " -o "$1"="$2}') localhost

5 votes

Cette réponse ne vous permet pas ssh à votre Vagrant depuis l'extérieur du Vagrantfile ("en utilisant l'habituel ssh commande"), ce qui est la façon dont j'ai interprété la question.

0 votes

Vous pouvez régler le port par vous-même. Ainsi le script sera exécutable depuis n'importe quel répertoire.

0 votes

Alors, qu'est-ce qui fait de ce port un moyen d'entrer dans la machine ? Où se trouve la configuration de ce port ?

64voto

Leksat Points 523

En phase terminale

vagrant ssh

Dans une autre fenêtre/onglet de terminal, exécutez

ps aux | grep ssh

Vous y verrez la commande réelle exécutée par Vagrant, quelque chose comme ceci :

ssh vagrant@127.0.0.1 -p 2222 -o Compression=yes -o DSAAuthentication=yes -o LogLevel=FATAL -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o IdentitiesOnly=yes -i ~/.vagrant.d/less_insecure_private_key -o ForwardAgent=yes

0 votes

Excellente astuce si vous avez besoin de l'hôte de votre vagrant pour ssh pour d'autres raisons, comme une connexion SQL GUI, comme Sequel Pro. Cette astuce m'a sauvé !

20voto

Joel Purra Points 7366

Il suffit de passer l'ensemble du vagrant ssh-config comme un fichier de configuration pour ssh avec le -F configfile paramètre. L'alias de l'hôte auquel il faut se connecter est défini sur la première ligne du fichier vagrant ssh-config ; Host default signifie que vous pouvez vous connecter avec ssh default .

Je n'ai pas trouvé d'option pour lire le fichier de configuration depuis l'entrée standard, j'ai donc choisi la voie du fichier temporaire. Voici une ligne simple qui nettoie également le fichier temporaire. $TMPDIR.vagrant-ssh-config par la suite. Il doit être exécuté dans le même répertoire que le fichier Vagrantfile en supposant que votre boîte vagrant est opérationnelle.

vagrant ssh-config > $TMPDIR.vagrant-ssh-config && ssh default -F $TMPDIR.vagrant-ssh-config ; rm $TMPDIR.vagrant-ssh-config

Note : sur mon système Mac OSX, $TMPDIR s'étend à /var/folders/46/yltlhtgx8m5cg68_w95wgvy41324gn/T/ (en ce moment). Utilisez un autre variable ou un autre dossier, s'il n'est pas défini sur votre système.

0 votes

@myshen : selon la réponse de @tyrion La substitution de processus ne fonctionne pas pour ssh -F en bash - la manière que vous mentionnez devrait fonctionner en zsh cependant.

7voto

tyrion Points 366

Si vous n'avez pas besoin d'utiliser stdin con ssh (par exemple vous voulez exécuter une commande et vous déconnecter) vous pouvez utiliser :

vagrant ssh-config --host default | ssh -F /dev/stdin default

Cette méthode a été suggérée en réponse à une question similaire sur Groupes Google .

Malheureusement substitution de processus bash ne fonctionne pas non plus (voir cette question sur unix.stackexchange pour plus de détails).

Les meilleures options que vous avez, si vous voulez un shell interactif, sont de créer un fichier temporaire et de l'utiliser avec ssh -F ou utiliser awk comme le suggèrent les autres réponses.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X