web-dev-qa-db-fra.com

Comment ssh vagabonder sans faire tourner "vagrant ssh"?

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?

126
Kevin Burke

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
101
Stefano Palazzo

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
120
Steven Soroka

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
45
Leksat

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.

17
Joel Purra

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
9
Samer Abu Gahgah

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.

7
tyrion

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
5
Tedward

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.

3
mpen

ssh vagrant@<Host> mot de passe: vagrant

Exemples: 

2
Yeke

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]

1
Nico Villanueva

Il existe un moyen qui réplique comment un utilisateur distant peut se connecter au système

  1. Editez le Vagrantfile pour votre instance en ajoutant

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

  1. Redémarrez l'instance avec rechargement de vagabond à partir de la ligne de commande
  2. Copiez le fichier vagrant private_key sur un équivalent Linux que vous devriez avoir en cours d’exécution (par exemple, Cygwin sous Windows, j'utilise Windows 10) dans votre répertoire personnel cygwin, en le renommant en cours de route en un élément décrivant l’hôte auquel la clé doit être utilisée. 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, 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

1
Jimbo

Vous pouvez ajouter une configuration d'hôte errant à votre configuration ssh locale.

  1. vagant ssh-config >> ~/.ssh/config

  2. ssh vagrant @ {Host}

ex. cat ~/.ssh/config

Host kmaster
  HostName 127.0.0.1
  User vagrant
  Port 2222..
  ....
  • ssh vagrant @ kmaster
1
Vinay Kumar Gupta

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.

1
Mulkave

Vous pouvez ajouter ssh config pour votre hôte vagrant à ssh config.

  1. Récupère ssh config pour vagrant machine dans le dossier vagrant: vagrant ssh-config

  2. 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

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

0
FreeLightman

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. 

0
onebraveman

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
0
Darin London