Comment passer de SSH à vagrant sans vraiment lancer "vagrant ssh"?
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
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
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
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.
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.
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
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
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.
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
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
.
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
il y a un moyen qui reproduit comment un utilisateur distant pourrait se connecter au système
- é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é
- redémarrez l'instance avec vagrant reload à partir de la ligne de commande
- 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
-
vous trouverez la clé sous .vagrant\machines\default\virtualbox\private_key
-
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
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
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.
vous pouvez ajouter la configuration ssh pour votre hôte vagabond à la configuration SSH.
-
Get config ssh pour vagrant machine dans vagrant dossier:
vagrant ssh-config
-
ouvrir
{UserDir}/.ssh/config
et y ajouter résultat de la commande précédente. Note : la première ligneHost default
signifie l'alias que vous utiliserez plus tard pour la commandessh
. Nommez-le comme votre machine vagabonde ou dir. Si vous avoir un seul Dirr Vagabond - vous pouvez l'appelerHost vagrant
-
SSH à vagrant:
ssh vagrant
. Le nom de famille est alias de l'étape précédente.