Comment faire ssh pour vagranter sans réellement exécuter “ssh vagrant”?

Je voudrais reproduire la manière dont Vagrant se connecte à ma machine virtuelle dans un script shell en utilisant la commande ssh . Je crée donc un alias pour mon instance de Vagrant.

Quelle est la syntaxe de commande à utiliser avec la commande ssh normale pour y accéder?

J’ai dû réimplémenter “vagal ssh” parce que l’option -c ne transmettait pas correctement les arguments. C’est fondamentalement ce qu’il fait (il pourrait y en avoir plus, mais ça marche bien de cette façon)

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

En one-liner (avec merci à kgadek):

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

Pour prendre en compte le fait que vous avez plusieurs hôtes vagrants, cela sélectionnera l’hôte souhaité, 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 

Il y a déjà beaucoup de réponses, mais elles semblent toutes trop compliquées ou résolvent les problèmes du demandeur.

simplement:

 # save the config to a file vagrant ssh-config > vagrant-ssh # run ssh with the file. ssh -F vagrant-ssh default 

En terminal

 vagrant ssh 

Dans une autre fenêtre de terminal / onglet

 ps aux | grep ssh 

Là, vous verrez la commande 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 SsortingctHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o IdentitiesOnly=yes -i ~/.vagrant.d/less_insecure_private_key -o ForwardAgent=yes 

Il suffit de passer l’intégralité du vagrant ssh-config tant que fichier de configuration à ssh avec le paramètre -F configfile . L’alias de l’hôte auquel se connecter est défini sur la première ligne de vagrant ssh-config ; Host default signifie que vous pouvez vous connecter avec ssh default .

Je ne pouvais pas voir une option pour lire le fichier de configuration à partir de l’entrée standard, donc je suis allé avec la route du fichier temporaire. Voici un one-liner qui nettoie également le $TMPDIR.vagrant-ssh-config temporaire $TMPDIR.vagrant-ssh-config la suite. Il doit être exécuté dans le même répertoire que votre Vagrantfile , en supposant que votre Vagrantfile soit opérationnelle.

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

Remarque: sur mon système Mac OSX, $TMPDIR développe dans /var/folders/46/yltlhtgx8m5cg68_w95wgvy41324gn/T/ (maintenant). Utilisez une autre variable ou un autre dossier s’il n’est pas défini sur votre système.

Si vous n’avez pas besoin d’utiliser stdin avec ssh (par exemple, vous voulez simplement 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 Google Groupes .

Malheureusement , la substitution du 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 d’utiliser awk comme suggéré par les autres réponses.

Si vous voulez juste le configurer pour pouvoir utiliser normalement la ligne de commande ssh normale, ainsi que scp et autres, vous pouvez exécuter vagrant ssh-config et append 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.

 vagrant ssh-config |sed -e "s/Host default/Host my_cool_dev_box/" >> ~/.ssh/config ssh my_cool_dev_box 

J’ai résolu ce problème de manière très simple: lorsque vous démarrez la boîte vagrante, elle affiche l’adresse ssh comme ceci

 SSH address: 127.0.0.1:2222 

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

 ssh vagrant@127.0.0.1 -p 2222 

Beaucoup d’autres réponses supposent que Vagrant est installé.

J’ai installé Vagrant sur Windows 10, mais je ne peux pas vagrant ssh car j’utilise PuTTy comme client SSH, ce que le vagrant n’accepte pas.

L’exécutable ssh trouvé dans le PATH est un client SSH PuTTY Link. Vagrant est uniquement compatible avec les clients OpenSSH SSH.

Cependant, dans Windows 10, nous avons également Bash sur Ubuntu sous Windows. Donc, je viens de l’utiliser avec la commande suivante:

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

Il est assez facile d’installer Vagrant sur Win10-Ubuntu, mais il vous faut également installer Virtualbox pour une raison quelconque, ce que je préfère ne pas faire.

NB J’ai essayé avec la méthode ssh default -F vagrant-ssh-config , mais je viens

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

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

ssh vagrant@ mot de passe: vagrant

Exemples:

  • ssh vagrant@vagrant.local

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

Vagrant stocke la clé privée dans ~/.vagrant.d/insecure_private_key et l’utilise pour se connecter à chaque machine via ssh , étant donné qu’il est configuré pour se connecter au port 2200 (par défaut).

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

Remarque: assurez-vous que la clé privée appartient à l’utilisateur exécutant Vagrant .

Bien que votre objective soit d’avoir un environnement multi-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, les 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 

Ensuite, vous aurez toutes les commandes Vagrant disponibles par machine, c.-à-d. Les vagrant provision databases vagrant ssh web et vagrant provision databases .

Si vous voulez juste que la commande minimum soit connectée à votre boîte, vous devez connaître le port qu’elle utilise (imprimé lorsque vous faites du vagrant up ou que vous vous vagrant ssh-config ) et où se trouve votre clé SSH privée. vagrant ssh-config )

Ensuite, il suffit de fournir la clé et le port:

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

Il existe un moyen de reproduire comment un utilisateur distant peut se connecter au système

  1. Modifier 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 souhaitez dans la plage 192.168, à condition que ce ne soit pas déjà utilisé).

  1. Redémarrez l’instance avec un rechargement vaginal à partir de la ligne de commande.
  2. Copiez le fichier vagual private_key sur un équivalent Linux que vous devriez avoir dans votre boîte (par exemple Cygwin si sous Windows, j’utilise Windows 10) dans votre répertoire de base cygwin, en le renommant en cours de route en décrivant l’hôte de la clé. pour, 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 ssh Unix habituel, donc

ssh -i your_virtual_hostname.pem username@192.168.33.10

où nom d’utilisateur, peut être vagrant si vous avez une boîte standard, regardez la sortie de vagrant ssh-config pour les détails standard ssh pour la boîte.

C’est tout

Vous pouvez prendre n’importe lequel des arguments ssh-config et les transmettre à ssh sur la ligne de commande en tant que -o Key=value . Donc, pour une configuration simple avec un hôte unique (vous devrez peut-être faire un peu plus de travail avec grep ou perl pour une installation multi-hôte), vous pouvez faire quelque chose comme ceci (ou remplacer perl avec sed si vous le souhaitez):

 ssh `vagrant ssh-config | tail -8 | perl -pe 's/^\s+/-o@/; s/\s/\=/;s/@/ /;s/\n/ /'` vagrant@localhost 

Mon Env. 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’utilise simplement XShell pour append une nouvelle session avec le nom de port et d’utilisateur le plus vague.

Ça marche.

Peut-être que Xshell est un candinate.

Vous pouvez append la configuration ssh pour votre hôte vagrant à la configuration ssh.

  1. Obtenir la configuration de ssh pour la machine vagrante dans le dossier vagrant ssh-config : vagrant ssh-config

  2. Ouvrez {UserDir}/.ssh/config et ajoutez les résultats de la commande précédente. Remarque : la première ligne Host default signifie l’alias que vous utiliserez ultérieurement pour la commande ssh . Nommez-le comme votre machine vaginale ou dir. Si vous n’avez qu’un seul dir vagrant – vous pouvez le nommer Host vagrant

  3. Ssh au vagrant: ssh vagrant . Le nom de famille est un alias de l’étape précédente.