Comment passer de SSH à vagrant sans vraiment lancer "vagrant ssh"?

j'aimerais reproduire la façon dont Vagrant se connecte à ma VM dans un script shell en utilisant la commande ssh , donc je crée un alias pour mon instance Vagrant.

Quelle est la syntaxe de la commande pour y accéder?

119
demandé sur kenorb 2012-06-02 21:16:14

15 réponses

j'ai dû ré-implémenter" vagrant ssh "parce que l'option -c ne transmettait pas correctement les arguments. C'est fondamentalement ce qu'il fait (il pourrait y avoir plus, mais il fonctionne très 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 \
    "$@"

comme une doublure (grâce à kgadek):

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

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

HOST=name-of-my-host
ssh $(vagrant ssh-config $HOST | sed '/^[[:space:]]*$/d' |  awk 'NR>1 {print " -o ""="}') localhost
95
répondu Stefano Palazzo 2016-12-16 17:26:31

il y a déjà beaucoup de réponses, mais elles semblent toutes trop compliquées ou résoudre des problèmes que l'asker 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
107
répondu Steven Soroka 2014-05-15 17:58:37

Dans le terminal, exécutez

vagrant ssh

dans une autre fenêtre de terminal/onglet exécuter

ps aux | grep ssh

là vous verrez la commande actuelle 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
39
répondu Leksat 2014-09-14 09:42:10

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

Je ne voyais pas d'option pour lire le fichier de configuration à partir de l'entrée standard, donc j'ai suivi la route du fichier temp. Voici une doublure qui nettoie également le fichier temporaire $TMPDIR.vagrant-ssh-config après. Il doit être exécuté dans le même répertoire que votre Vagrantfile , en supposant que votre boite vagabonde 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 devient /var/folders/46/yltlhtgx8m5cg68_w95wgvy41324gn/T/ (maintenant). Utilisez un autre variable , ou un autre dossier, s'il n'est pas défini sur votre système.

17
répondu Joel Purra 2017-05-23 11:54:36

si vous n'avez pas besoin d'utiliser stdin avec ssh (par exemple vous voulez exécuter juste une commande et déconnexion) vous pouvez utiliser:

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

cette méthode a été proposée en réponse à une question similaire sur google groups .

malheureusement Bash process substitution ne fonctionne pas non plus (voir cette question sur unix.stackexchange pour plus de détails).

les meilleures options que vous ayez, si vous voulez un shell interactif, sont de créer un fichier temp et de l'utiliser avec ssh -F ou utiliser awk comme suggéré par les autres réponses.

7
répondu tyrion 2017-04-13 12:36:30

si vous voulez simplement le configurer pour que vous puissiez utiliser la ligne de commande normale SSH, ainsi que scp et autres, vous pouvez lancer vagrant ssh-config et ajouter la sortie à votre configuration SSH par défaut. Si vous remplacez la ligne "Host default" par un nom d'hôte plus descriptif, vous devriez être prêt à partir.

vagrant ssh-config |sed -e "s/Host default/Host my_cool_dev_box/" >> ~/.ssh/config
ssh my_cool_dev_box
5
répondu Tedward 2014-07-17 21:58:45

j'ai résolu cela d'une manière très simple: quand vous démarrez la boîte vagrant il montre l'adresse ssh comme ceci

SSH address: 127.0.0.1:2222

alors vous pouvez vous connecter à la boîte en utilisant l'utilisateur Vagabond, l'hôte et le port que vous obtenez

ssh vagrant@127.0.0.1 -p 2222
5
répondu Samer Abu Gahgah 2017-08-04 18:00:55

beaucoup d'autres réponses supposent que vous avez Vagrant installé.

J'ai Vagrant installé sur Windows 10, mais je ne peux pas vagrant ssh parce que J'utilise PuTTy comme mon client SSH, ce que vagrant n'acceptera pas.

l'exécutable ssh trouvé dans le chemin est un client PuTTY Link ssh. Vagrant n'est compatible qu'avec les clients OpenSSH SSH.

cependant, dans Windows 10 nous avons aussi Bash sur Ubuntu sur Windows. Donc, je l'utilise avec la commande suivante:

ssh vagrant@127.0.0.1 -p2222 -i .vagrant/machines/default/virtualbox/private_key -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=Fatal

il est assez facile d'installer Vagrant sur Win10-Ubuntu mais il veut aussi que vous installiez Virtualbox pour une raison quelconque, ce que je ne préfère pas faire.

N.B. j'ai essayé avec la méthode ssh default -F vagrant-ssh-config , mais je viens d'obtenir

Permission refusée (publickey,mot de passe).

je suppose que c'est parce que le IdentityFile chemin est un chemin Windows, alors qu'à Bash, il devrait commencer par /mnt/c/ . Je suppose que vous pouvez simplement écrire le fichier et de le modifier si cela fonctionne mieux pour vous.

2
répondu mpen 2017-02-24 04:19:27

ssh vagrant@<host> mot de passe: vagrant

exemples:

  • ssh vagrant@vagrant.local

  • ou après vérification de L'IP (de l'intérieur, en utilisant vagrant ssh ) ssh vagrant@172.28.128.3

2
répondu Yeke 2017-11-10 11:22:40

Vagrant stocke la clé privée dans ~/.vagrant.d/insecure_private_key et l'utilise pour se connecter à chaque machine à travers ssh , considérant qu'il est configuré pour se connecter sur le port 2200 (par défaut) il serait quelque chose comme:

ssh vagrant@localhost -p 2200 -i ~/.vagrant.d/insecure_private_key

Note: assurez-vous que la clé privée appartient à l'utilisateur qui exécute Vagrant .

Mais si votre but est d'avoir un multi-environnement de la machine , vous pouvez le faire en utilisant config.vm.define .

Voici un exemple illustrant un environnement avec 2 machines, l'une appelée web et l'autre databases :

config.vm.define 'web', primary: true do |web|
        web.vm.box = 'CentOS64'
        web.vm.hostname = 'vic-develop'
        web.vm.network 'private_network', ip: '192.168.50.10', virtualbox__intnet: true
        web.vm.synced_folder '../code', '/var/www/project', :mount_options => ["dmode=777,fmode=777"]

        web.vm.provision 'ansible' do |ansible|
            ansible.playbook = 'development-web.yml'
            ansible.sudo = true
        end
end

config.vm.define 'databases' do |db|
    db.vm.box = 'CentOS64'

    db.vm.network 'private_network', ip: '192.168.50.20', virtualbox__intnet: true
    db.vm.network :forwarded_port, guest: 3306, host: 8206

    db.vm.provision 'ansible' do |ansible|
        ansible.playbook = 'development-db.yml'
        ansible.sudo = true
    end
end

alors vous aurez toutes les commandes vagabondes disponibles par machine, i.e. vagrant ssh web et vagrant provision databases .

1
répondu Mulkave 2014-03-30 18:57:43

si vous voulez juste que la commande bare minimum se connecte à votre boîte, vous devez savoir le port qu'il utilise (imprimé en faisant vagrant up , ou visible en faisant vagrant ssh-config ) et où est votre clé privée SSH (également visible en faisant vagrant ssh-config )

alors il ne s'agit que de fournir la clé et le port:

ssh -p 2222 -i $HOME/vagrantenv/.vagrant/machines/default/virtualbox/private_key vagrant@127.0.0.1

1
répondu Nico Villanueva 2016-06-25 23:45:04

il y a un moyen qui reproduit comment un utilisateur distant pourrait se connecter au système

  1. éditez le fichier Vagrant pour votre instance en ajoutant

config.vm.network "private_network", ip: "192.168.33.10"

cela ajoute une adresse IP privée pour l'hôte (faites-en ce que vous voulez dans la gamme 192.168 tant que ce n'est pas déjà utilisé

  1. redémarrez l'instance avec vagrant reload à partir de la ligne de commande
  2. Copiez le fichier vagrant private_key vers quelque équivalent Linux que vous devriez avoir en cours d'exécution sur votre machine (par exemple Cygwin si sous windows, j'utilise windows 10) dans votre répertoire cygwin home, renommez-le en cours de route vers quelque chose décrivant l'hôte pour lequel la clé doit être utilisée, par exemple

your_virtual_host_name.pem

  1. vous trouverez la clé sous .vagrant\machines\default\virtualbox\private_key

  2. allez dans votre répertoire personnel et faites votre usual Unix ssh, donc

ssh -i your_virtual_hostname.pem username@192.168.33.10

où nom d'utilisateur, peut très bien être vagrant si vous avez une boîte standard, regardez la sortie de vagrant SSH-config pour SSH détails standard pour la boîte.

Que c'est

1
répondu Jimbo 2017-06-09 14:01:52

vous pouvez prendre n'importe lequel des arguments ssh-config , et les passer à ssh sur la ligne de commande comme -o Key=value . Ainsi, pour une configuration errante sur un seul hôte (vous pourriez avoir à faire un peu plus de travail avec grep ou perl pour une configuration multi-hôtes), vous pouvez faire quelque chose comme ceci (ou remplacer perl par sed si vous voulez):

ssh `vagrant ssh-config | tail -8 | perl -pe 's/^\s+/-o@/; s/\s/\=/;s/@/ /;s/\n/ /'` vagrant@localhost
0
répondu Darin London 2013-09-09 02:35:11

My Env. C'est Win7 + Centos. La réponse avec le plus d'accord ne fonctionne pas pour moi. Après avoir échoué après avoir essayé ssh -p [port] [usrname]@127.0.01 , J'ai juste utilisé XShell pour ajouter une nouvelle session avec le port errant et le nom d'utilisateur.

ça marche.

peut-être que Xshell est candinate.

0
répondu onebraveman 2016-11-12 07:38:14

vous pouvez ajouter la configuration ssh pour votre hôte vagabond à la configuration SSH.

  1. Get config ssh pour vagrant machine dans vagrant dossier: vagrant ssh-config

  2. ouvrir {UserDir}/.ssh/config et y ajouter résultat de la commande précédente. Note : la première ligne Host default signifie l'alias que vous utiliserez plus tard pour la commande ssh . Nommez-le comme votre machine vagabonde ou dir. Si vous avoir un seul Dirr Vagabond - vous pouvez l'appeler Host vagrant

  3. SSH à vagrant: ssh vagrant . Le nom de famille est alias de l'étape précédente.

0
répondu FreeLightman 2018-03-23 18:05:14