J'aimerais reproduire la manière dont Vagrant enregistre dans mon VM dans un script Shell à l'aide de la commande ssh
. Je crée donc un alias pour mon instance Vagrant.
Quelle est la syntaxe de commande pour utiliser la commande régulière ssh
pour y accéder?
J'ai dû réimplémenter "vagrant ssh" car son option -c
ne transmettait pas les arguments correctement. C'est en gros ce que ça fait (il y en a peut-être 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 StrictHostKeyChecking=no \
-i ~/.vagrant.d/insecure_private_key \
vagrant@localhost \
-p $PORT \
"$@"
En une ligne (avec merci à kgadek):
ssh $(vagrant ssh-config | awk 'NR>1 {print " -o "$1"="$2}') localhost
Pour prendre en compte le fait que vous avez plus d'un hôte vagabond, sélectionnez l'hôte souhaité et supprimez les lignes vides de la configuration (à l'aide de 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 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
En terminal
vagrant ssh
Dans une autre fenêtre de terminal/onglet exécuté
ps aux | grep ssh
Là, vous verrez la commande réelle exécutée par Vagrant, quelque chose comme ceci:
ssh [email protected] -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 le vagrant ssh-config
entier en 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 dans 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, alors je suis allé à la route du fichier temporaire. Voici une ligne 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 votre Vagrantfile
, en supposant que votre boîte vagabonde 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
se développe en /var/folders/46/yltlhtgx8m5cg68_w95wgvy41324gn/T/
(maintenant). Utilisez une autrevariable ou un autre dossier, s'il n'est pas défini sur votre système.
J'ai résolu ceci de manière très simple:
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 [email protected] -p 2222
Si vous n'avez pas besoin d'utiliser stdin avec ssh
(par exemple, vous ne souhaitez exécuter qu'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 de Google .
Malheureusement, substitution de processus bash ne fonctionne pas non plus (voir cette question sur unix.stackexchange pour plus de détails).
Si vous voulez un shell interactif, les meilleures options 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 la ligne de commande ssh normale, ainsi que scp et autres, vous pouvez exécuter vagrant ssh-config
et ajouter le résultat à votre configuration ssh par défaut. Si vous remplacez la ligne "Host default" par un nom d’hôte plus descriptif, vous devriez pouvoir continuer.
vagrant ssh-config |sed -e "s/Host default/Host my_cool_dev_box/" >> ~/.ssh/config
ssh my_cool_dev_box
Beaucoup d'autres réponses supposent que vous avez installé Vagrant.
Vagrant est installé sur Windows 10, mais je ne peux pas vagrant ssh
car j'utilise PuTTY en tant que client SSH, ce que vagrant n'acceptera pas.
L'exécutable
ssh
trouvé dans le PATH est un client SSH de 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 [email protected] -p2222 -i .vagrant/machines/default/virtualbox/private_key -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=Fatal
C'est assez facile d'installer Vagrant sur Win10-Ubuntu, mais il souhaite également que vous installiez Virtualbox pour une raison quelconque, ce que je préférerais ne pas faire.
N.B. J'ai essayé avec la méthode ssh default -F vagrant-ssh-config
, mais je viens de recevoir
Autorisation refusée (publickey, mot de passe).
J'imagine 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, puis le modifier si cela vous convient mieux.
ssh vagrant@<Host>
mot de passe: vagrant
Exemples:
ou après avoir vérifié l'adresse IP (de l'intérieur, en utilisant vagrant ssh
) ssh [email protected]
Si vous voulez juste que la commande nue minimum se connecte à votre boîte, vous devez connaître le port qu'il utilise (imprimé en vagrant up
ou visible en vagrant ssh-config
) et où se trouve votre clé SSH privée (également visible en 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 [email protected]
Il existe un moyen qui réplique comment un utilisateur distant peut se connecter au système
config.vm.network "private_network", ip: "192.168.33.10"
Ceci ajoute une adresse IP privée pour l'hôte (faites-en ce que vous voulez dans la plage 192.168 tant qu'elle n'est pas déjà utilisée
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, alors
ssh -i your_virtual_hostname.pem [email protected]
où nom d'utilisateur peut très bien être errant si vous avez une boîte standard, regardez la sortie de vagrant ssh-config pour plus de détails sur la norme ssh pour la boîte.
C'est tout
Vous pouvez ajouter une configuration d'hôte errant à votre configuration ssh locale.
vagant ssh-config >> ~/.ssh/config
ssh vagrant @ {Host}
ex. cat ~/.ssh/config
Host kmaster
HostName 127.0.0.1
User vagrant
Port 2222..
....
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'elle est configurée pour se connecter sur le port 2200 (valeur par défaut), ce serait quelque chose comme
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
.
Toutefois, si votre objectif est de disposer d'un environnement multi-machine , vous pouvez le faire avec config.vm.define
.
Voici un exemple illustrant un environnement avec 2 machines, l’une nommé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
Ensuite, vous aurez toutes les commandes Vagrant disponibles par machine, c'est-à-dire vagrant ssh web
et vagrant provision databases
.
Vous pouvez ajouter ssh config pour votre hôte vagrant à ssh config.
Récupère ssh config pour vagrant machine dans le dossier vagrant: vagrant ssh-config
Ouvrez {UserDir}/.ssh/config
et ajoutez-y le résultat de la commande précédente. Remarque : la première ligne Host default
signifie l'alias que vous utiliserez plus tard pour la commande ssh
. Nommez-le comme votre machine ou dir. Si vous n'avez qu'un seul répertoire vagrant, vous pouvez le nommer Host vagrant
Ssh au vagabond: ssh vagrant
. Le nom de famille est un alias de l'étape précédente.
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
, je viens d'utiliser XShell pour ajouter une nouvelle session avec le port vagrant et le nom d'utilisateur.
Ça marche.
Peut-être que Xshell est un candidat.
Vous pouvez utiliser n'importe quel argument ssh-config
et le transmettre à ssh sur la ligne de commande sous la forme -o Key=value
. Ainsi, pour une configuration simple à un hôte (vous devrez peut-être un peu plus de travail avec grep
ou Perl
pour une configuration multihôtes), vous pouvez procéder comme suit (ou remplacer Perl
par sed
si vous le souhaitez):
ssh `vagrant ssh-config | tail -8 | Perl -pe 's/^\s+/-o@/; s/\s/\=/;s/@/ /;s/\n/ /'` vagrant@localhost