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
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é).
your_virtual_host_name.pem
Vous trouverez la clé sous .vagrant \ machines \ default \ virtualbox \ private_key
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.
Obtenir la configuration de ssh pour la machine vagrante dans le dossier vagrant ssh-config
: vagrant ssh-config
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
Ssh au vagrant: ssh vagrant
. Le nom de famille est un alias de l’étape précédente.