SSH vers la boîte Vagrant dans Windows?


172

J'utilise Vagrant pour démarrer une VM VirtualBox dans Windows. Sur d'autres plateformes, je peux simplement

$ vagrant ssh

pour vous connecter à la VM.

Comment puis-je me connecter à cette boîte Vagrant dans Windows?

La manière suggérée dans la documentation de Vagrant d'utiliser PuTTy ne fonctionnait pas non plus:

http://docs-v1.vagrantup.com/v1/docs/getting-started/ssh.html


2
Grand tutoriel à ce sujet, montrant comment SSH dans une boîte Vagrant dans Windows 7/8
Sliq

11
Ce n'est plus un problème. Si vous avez ssh.exe dans votre chemin (par exemple c: \ Program Files \ git \ bin), alors 'vagrant ssh' fonctionne.
Omri Spector

1
FYI Vagrant n'inclut pas ssh due to licensing reasons. It seems possible but until a lawyer gives the go-ahead on this, we're not gong to do this. Ship ssh.exe par défaut dans le programme d'installation de Windows ... cela m'a intrigué
KCD

Réponses:


243

J'utilise PuTTY pour me connecter à mes boîtes Vagrant sous Windows7.

Assurez-vous

  • convertir le %USERPROFILE%\.vagrant.d\insecure_private_keyen .ppk en utilisant PuTTYGen
  • utilisez la clé .ppk dans votre session PuTTY - configurée dans Connexion> SSH> Auth> Fichier de clé privée
  • utiliser l'hôte 127.0.0.1
  • utilisez le port 2222 au lieu de 22
  • vous pouvez définir le nom d'utilisateur par défaut (vagrant) sous Connexion> SSH> Auth> Clé privée pour l'authentification

28
remarquez aussi: lorsque l'invite de connexion en tant que: apparaît, entrez «vagrant» comme nom d'utilisateur (sans guillemets).
snorkpete

5
Et puis faites cela pour chaque VM dans Vagrant. Vous savez, Vagrant fonctionne avec plusieurs VM. Alors, utilisez simplement la bonne solution, pas une solution de contournement: voici ma réponse ci-dessous. Petit patch dans Vagrant.
Michael Field

20
Vous pouvez définir le nom d'utilisateur par défaut sous Connection > Data > Auto-login usernameet le paramètre PPK est sousConnection > SSH > Auth > Private key for authentication
mpen

1
Si vous préférez comme moi sécuriser vos clés privées avec des mots de passe, il peut être plus facile à long terme d'utiliser l'application pageant.exe au démarrage, en y chargeant votre fichier ppk. Ensuite, vous entrez votre mot de passe pour pageant une fois, et vous pouvez vous connecter sans avoir à spécifier le mot de passe ppk dans le terminal putty à chaque fois.
Larry Silverman

8
Vous pouvez utiliser vagrant ssh-configpour savoir quelles options donner au mastic.
ibizaman

121

Vous devez patcher un code Vagrant en modifiant un seul fichier, ssh.rb.

Toutes les informations sont ici: https://gist.github.com/2843680

vagrant ssh fonctionnera désormais aussi sous Windows, tout comme sous Linux.


EDIT : Dans les nouvelles versions, cela est devenu inutile. Vous devez encore ajouter le chemin de votre ssh.exeà votre PATHvariable :

Recherchez ssh.exe sur votre ordinateur, copiez le chemin (c'est-à-dire C:\Program Files (x86)\Git\bin), ouvrez les préférences système, recherchez les paramètres de la variable d'environnement , cliquez sur la variable de chemin, ajoutez le chemin, en séparant les chemins existants en utilisant ;.


1
Veuillez commenter la demande d'extraction Github pour le problème si vous utilisez cette solution, il est temps qu'elle soit fusionnée. github.com/mitchellh/vagrant/pull/933
Cory Dolphin

4
Cela semble avoir été fusionné il y a environ trois mois. Il existe définitivement en version 1.2.2.
Johann

Est-ce encore nécessaire ou corrigé dans les dists récents de Vagrant?
Alex

2
@Alex Il est définitivement patché dans les versions récentes de Vagrant. Je l'ai testé et documenté ici: robertpate.net/blog/2013/…
robertpateii

1
Définissez rapidement le chemin vers votre git OpenSSH, ouvrez PowerShell et exécutez: [Environment]::SetEnvironmentVariable("Path", "$env:Path;c:\Program Files (x86)\Git\bin\", "User")
Janusz Skonieczny

96

Une autre option utilisant les binaires git:

  1. Installez git: http://git-scm.com/download/win
  2. Menu Démarrer> cmd (shift + enter pour aller en tant qu'administrateur)
  3. set PATH=%PATH%;C:\Program Files\Git\usr\bin
  4. vagrant ssh

J'espère que cela t'aides :)

Juste un bonus après des mois d'utilisation de cela sur Windows: utilisez la console au lieu du terminal Win, vous pouvez donc toujours ouvrir un nouvel onglet de terminal avec PATH défini (configurez-le sur les options)


Quelqu'un a voté pour cette réponse. J'essayais de comprendre comment cela fonctionnait, maintenant je sais! Merci
RadiantHex

CA marchait bien pour moi. Comme j'ai GIT, cela fonctionne beaucoup plus propre que de passer à Putty puisque vous pouvez simplement réutiliser la même fenêtre de console.
Bartvds

2
Merci, mais j'utilise maintenant conemu . C'est similaire mais plus flexible que Console. Je l'ai enveloppé de nombreuses consoles, comme cmd.exe, git bash et putty avec des allias et d'autres trucs fantaisistes.
Bartvds

4
pour Git 2.5.0 PATH doit être "C: \ Program Files \ Git \ usr \ bin".
vladimir

1
set PATH =% PATH%; C: \ Program Files \ Git \ usr \ bin Fonctionnement parfait! Merci!
v.babak

72

Télécharger Putty: http://www.chiark.greenend.org.uk/~sgtatham/putty/

En utilisant putty.exe:

Interface graphique de Putty:

HostName: 127.0.0.1
Port: 2222

Lorsque vous vous connectez (écran du terminal):

User: vagrant
Passwd: vagrant

Avant d'essayer de vous connecter, vérifiez votre machine virtuelle à l'aide de cmd.exe:

 vagrant status

S'il est en panne, utilisez:

vagrant up

1
Cela montre parfaitement comment ne pas se perdre dans les mots. Incroyable, merci!
appoll

31

La réponse acceptée est vraiment utile, mais il peut arriver qu'au lieu de la clé suivante:

%USERPROFILE%\.vagrant.d\insecure_private_key

une clé différente doit être convertie au format du Putty:

{vagrant_machine_root}/.vagrant/machines/default/virtualbox/private_key

Où se {vagrant_machine_root}trouve un dossier avec le Vagrantfilede la machine à laquelle nous voulons nous connecter à l'aide de Putty.

Comme @ibizaman l'a mentionné, utilisez vagrant ssh-configpour vérifier quelle clé est utilisée par vagrant:

$ vagrant ssh-config
Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile c:/dev/test/.vagrant/machines/default/virtualbox/private_key <-- HERE IS THE KEY YOU NEED TO CONVERT TO THE PUTTY FORMAT
  IdentitiesOnly yes
  LogLevel FATAL

4
Si vous souhaitez utiliser Putty, c'est la meilleure réponse. Vous devez convertir la clé privée correcte. Merci beaucoup!
johnzachary

1
Il convient de mentionner que vous devez vérifier la Uservaleur et vous assurer de la fournir à Putty in Connection-> Data-> Auto-login username. Sur ma machine virtuelle, le nom était ubuntuet j'avais essayé à plusieurs reprises, sans échouer, de me connecter en tant que vagrant.
perlyking


6

Soit

  1. Dans votre cmdconsole, tapez ce qui suit:

    set PATH=%PATH%;C:\Program Files (x86)\Git\bin
    

OU

  1. Définissez de manière permanente le chemin dans les variables d'environnement de votre système:

    C:\Program Files (x86)\Git\bin;
    


2

Maintenant, j'ai une bien meilleure solution qui permet une mise à niveau sans douleur de Vagrant. Il est basé sur un fichier patché.

La première ligne d'un vagrantfile devrait être:

load "vagrantfile_ssh" if Vagrant::Util::Platform.windows?

Et le fichier vagrantfile_ssh patché (initialement nommé ssh.rb ) devrait exister dans le même répertoire que vagrantfile . C'est à la fois élégant et fonctionnel.

Téléchargez le fichier vagrantfile_ssh patché .


2
  1. Installer Git Bash (Livré avec OpenSSH, ainsi que grep, find, perl, sed, etc .;)

    Si vous avez installé Vagrant, ouvrez appwiz.cpl(AKA Ajout / Suppression de programmes) et Repairl'installation de Vagrant. Cela fera que vagrant s'ajoutera à votre chemin git-bash.

  2. Ouvrez Git Bash (via le menu Démarrer)

  3. cd ~/vagrant/mybox dans le dossier de votre boîte de vagabonds et vagrant ssh

2

Je faisais comme suggéré ci-dessus mais en changeant la variable d'environnement sur la ligne de commande uniquement avec PATH =% PATH%; "C: \ Program files \ git \ usr \ bin"

Cela n'a pas fonctionné. Mais lorsque j'ai modifié la variable d'environnement via les paramètres Windows, puis j'ai démarré une nouvelle invite de commande, cela a fonctionné pour la première fois!


1

Personnellement, j'utilise juste Cygwin . Ce qui vous permet d'utiliser de nombreuses commandes * nix courantes dans Windows. SSH étant l'un d'entre eux.


Vous devrez modifier votre PATH pour inclure le répertoire bin Cygwin, quelque chose commeset PATH=%PATH%;c:\cygwin\bin
David Soroko

1

Windows 7 (non testé sur les autres versions)

  1. Faites un clic droit sur "Poste de travail" et cliquez sur Propriétés
  2. Cliquez sur Paramètres système avancés
  3. Cliquez sur Variables d'environnement
  4. Dans la deuxième case sous «Variables système», faites défiler vers le bas et cliquez sur la variable «Chemin» et cliquez sur MODIFIER
  5. Assurez-vous que le chemin est inclus dans la valeur de la variable en ajoutant (un point-virgule s'il n'y est pas et) C: \ Program Files (x86) \ Git \ bin; (ou quel que soit le chemin de votre ssh.exe)
  6. OK> OK> OK et REDÉMARRER WINDOWS
  7. Vous devrez courir vagabond mais après ce vagabond ssh devrait fonctionner en permanence

Plus d'informations qui pourraient aider avec d'autres versions ... http://www.computerhope.com/issues/ch000549.htm


1

très simple, une fois que vous avez installé le gestionnaire Vagrant et la boîte virtuelle, essayez d'installer cygwin sur Windows mais lors de l'installation de cygwin, assurez-vous de sélectionner le package SSH, le package VIM qui permettra à votre système de se connecter à votre VM depuis cygwin après avoir fait tourner votre machine via vagabond.


C'est la meilleure réponse ici. Cygwin vous donnera un bash comme un terminal avec lequel travailler. Impressionnant!
Neoraptor

1

vous pouvez utiliser le terminal émulateur cmder pour Windows.

Suivez ci-dessous les étapes d'installation:

  1. Accédez à cmder.net;
  2. Cliquez sur Download Full;
  3. Décompressez
  4. (facultatif) Placez vos propres fichiers exécutables dans le dossier bin pour être injectés dans votre PATH.
  5. Exécutez Cmder (Cmder.exe)

entrez la description de l'image ici

Terminal cmder sous Windows

Maintenant, exécutez la commande requise pour les paramètres VM vagrant, pour se connecter, exécutez uniquement la commande vagrant ssh; Watch cmder propose un client ssh intégré.

J'espère que ça aide.


0

remarquez aussi: lorsque l'invite de connexion en tant que: apparaît, entrez «vagrant» comme nom d'utilisateur (sans guillemets). - Snorkpete 28 juin 12 à 14:14

Ou vous pouvez aller dans Catégorie-> Connexion-> Rlogin et définir le champ «Nom d'utilisateur de connexion automatique» sur «Vagrant».

Enregistrez la session.


Il est vagrant ssh-configubuntu
préférable

0

J'utilise la vagrant sshcommande avec git sshWindows 7, 8.1 et Windows 10.

Pour installer, téléchargez uniquement msysgit depuis la page du projet msysgit .

Et pour exécuter, ssh.exeincluez uniquement les bin foltervariables d'environnement to windows ou installez git à partir de la page de téléchargement de Git et copiez le fichier msysgit bin folter vers C:\Program Files\Git\bin.


0

Ajoutez les lignes suivantes à votre Vagrantfile:

Vagrant.configure(2) do |config|

  # ...

  config.ssh.private_key_path = "vagrant_rsa"
  config.vm.provision "shell", path: "openssh.ps1"
  config.vm.provision "file", source: "./vagrant_rsa.pub", destination: "~/.ssh/authorized_keys"
end

vagrant_rsaet vagrant_rsa.pubsont les clés privées et publiques situées dans le dossier du projet vagrant actuel (et générées par exemple par ssh-keygen -t rsa -C "your@email.here") et openssh.ps1est:

$is_64bit = [IntPtr]::size -eq 8

# setup openssh
$ssh_download_url = "http://www.mls-software.com/files/setupssh-7.1p1-1.exe"

if (!(Test-Path "C:\Program Files\OpenSSH\bin\ssh.exe")) {
    Write-Output "Downloading $ssh_download_url"
    (New-Object System.Net.WebClient).DownloadFile($ssh_download_url, "C:\Windows\Temp\openssh.exe")

    Start-Process "C:\Windows\Temp\openssh.exe" "/S /privsep=1 /password=D@rj33l1ng" -NoNewWindow -Wait
}

Stop-Service "OpenSSHd" -Force

# ensure vagrant can log in
Write-Output "Setting vagrant user file permissions"
New-Item -ItemType Directory -Force -Path "C:\Users\vagrant\.ssh"
C:\Windows\System32\icacls.exe "C:\Users\vagrant" /grant "vagrant:(OI)(CI)F"
C:\Windows\System32\icacls.exe "C:\Program Files\OpenSSH\bin" /grant "vagrant:(OI)RX"
C:\Windows\System32\icacls.exe "C:\Program Files\OpenSSH\usr\sbin" /grant "vagrant:(OI)RX"

Write-Output "Setting SSH home directories"
    (Get-Content "C:\Program Files\OpenSSH\etc\passwd") |
    Foreach-Object { $_ -replace '/home/(\w+)', '/cygdrive/c/Users/$1' } |
    Set-Content 'C:\Program Files\OpenSSH\etc\passwd'

# Set shell to /bin/sh to return exit status
$passwd_file = Get-Content 'C:\Program Files\OpenSSH\etc\passwd'
$passwd_file = $passwd_file -replace '/bin/bash', '/bin/sh'
Set-Content 'C:\Program Files\OpenSSH\etc\passwd' $passwd_file

# fix opensshd to not be strict
Write-Output "Setting OpenSSH to be non-strict"
$sshd_config = Get-Content "C:\Program Files\OpenSSH\etc\sshd_config"
$sshd_config = $sshd_config -replace 'StrictModes yes', 'StrictModes no'
$sshd_config = $sshd_config -replace '#PubkeyAuthentication yes', 'PubkeyAuthentication yes'
$sshd_config = $sshd_config -replace '#PermitUserEnvironment no', 'PermitUserEnvironment yes'
# disable the use of DNS to speed up the time it takes to establish a connection
$sshd_config = $sshd_config -replace '#UseDNS yes', 'UseDNS no'
# disable the login banner
$sshd_config = $sshd_config -replace 'Banner /etc/banner.txt', '#Banner /etc/banner.txt'
# next time OpenSSH starts have it listen on th eproper port
Set-Content "C:\Program Files\OpenSSH\etc\sshd_config" $sshd_config

Write-Output "Removing ed25519 key as Vagrant net-ssh 2.9.1 does not support it"
Remove-Item -Force -ErrorAction SilentlyContinue "C:\Program Files\OpenSSH\etc\ssh_host_ed25519_key"
Remove-Item -Force -ErrorAction SilentlyContinue "C:\Program Files\OpenSSH\etc\ssh_host_ed25519_key.pub"

# use c:\Windows\Temp as /tmp location
Write-Output "Setting temp directory location"
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue "C:\Program Files\OpenSSH\tmp"
C:\Program` Files\OpenSSH\bin\junction.exe /accepteula "C:\Program Files\OpenSSH\tmp" "C:\Windows\Temp"
C:\Windows\System32\icacls.exe "C:\Windows\Temp" /grant "vagrant:(OI)(CI)F"

# add 64 bit environment variables missing from SSH
Write-Output "Setting SSH environment"
$sshenv = "TEMP=C:\Windows\Temp"
if ($is_64bit) {
    $env_vars = "ProgramFiles(x86)=C:\Program Files (x86)", `
        "ProgramW6432=C:\Program Files", `
        "CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files", `
        "CommonProgramW6432=C:\Program Files\Common Files"
    $sshenv = $sshenv + "`r`n" + ($env_vars -join "`r`n")
}
Set-Content C:\Users\vagrant\.ssh\environment $sshenv

# record the path for provisioners (without the newline)
Write-Output "Recording PATH for provisioners"
Set-Content C:\Windows\Temp\PATH ([byte[]][char[]] $env:PATH) -Encoding Byte

# configure firewall
Write-Output "Configuring firewall"
netsh advfirewall firewall add rule name="SSHD" dir=in action=allow service=OpenSSHd enable=yes
netsh advfirewall firewall add rule name="SSHD" dir=in action=allow program="C:\Program Files\OpenSSH\usr\sbin\sshd.exe" enable=yes
netsh advfirewall firewall add rule name="ssh" dir=in action=allow protocol=TCP localport=22

Start-Service "OpenSSHd"

qui est une version simplifiée du script d' installation de joefitzgerald / packer-windows openssh .

Maintenant, vous pouvez vagrant sshdans la boîte Windows.

Pour ceux qui utilisent vagrant-libvirt, vous voudrez peut-être transférer certains ports comme RDP d'hôte à invité. vagrant-libvirt utilise ssh pour la redirection de port , vous devez donc configurer ssh sur Windows comme dans les instructions ci-dessus et vous pourrez ensuite transférer des ports comme:

config.vm.network :forwarded_port, host: 3389, guest: 3389, id: "rdp", gateway_ports: true, host_ip: '*'

Ne travaille pas pour moi. Ai-je besoin d'un mot de passe lors de l'exécution de ssh-keygen?
Jared Beach le

@JaredBeach Non, n'entrez pas de phrase de passe lors de la génération de la clé.
mixel

0

J'ai également rencontré le même problème avant.

  1. Dans le dossier homestead, utilisez bash init.sh.

  2. Si vous ne possédez pas le dossier .ssh dans D:/Users/your username/, vous devez obtenir une paire de clés ssh, ssh-keygen -t rsa -C "you@homestead".

  3. Modifier Homestead.yaml (propriété /) authoriza: ~/.ssh/id_rsa.pub.

  4. keys: - ~/.ssh/id_rsa

5.

folders:
    - map: (share directory path in the host computer) 
      to: /home/vagrant/Code

sites:
    - map: homestead.app
      to: /home/vagrant/Code
  1. Vous devez utiliser l'application de bureau git bash .

  2. Ouvrez l'application de bureau git bash. vagrant up

  3. vagrant ssh


0

Une autre solution ici mais uniquement pour la boîte virtuelle de Windows 10 pour tester l'explorateur. Utilisateur ssh: IEUser ssh pass: Passw0rd!


0

Le dossier d'installation vagrant contient un ssh.exe qui se comporte comme ssh (1) sous Linux (prend les mêmes indicateurs / arguments).

Pour voir tous les arguments utilisés, vous pouvez exécuter vagrant ssh-configou vagrant ssh --debugpour une sortie plus détaillée.

de Powershell:

C:\\HashiCorp\\Vagrant\\embedded\\usr\\bin/ssh.EXE ubuntu@127.0.0.1 -p 2222 -o LogLevel=FATAL -o DSAAuthentication=yes -o Strict
HostKeyChecking=no -i "C:/Users/path/to/project/.vagrant/machines/default/virtualbox/private_key"

Ceci est utile est des situations où vagrant statusdit votre vm est poweroffoususpended mode lorsque vous êtes sûr qu'il est en cours d'exécution, pour forcer la connexion ssh.

Si vous ne voulez pas vous souvenir / taper la commande ci-dessus, écrivez-la simplement dans un vagrant.ps1fichier pour pouvoir l'exécuter depuis votre PowerShell en utilisant .\vagrant_ssh.ps1


0

Une bonne alternative à PuTTY est l' émulateur de terminal Mintty . Il a plus d'options configurables que PuTTY.


-1

Je pense qu'une meilleure réponse à cette question serait la suivante:

https://eamann.com/tech/linux-flavored-windows/

Eric a écrit un bel article sur la façon de transformer votre ordinateur Windows en un environnement Linux. Même avec des hacks pour faire fonctionner Vim de manière native dans cmd.

Si vous parcourez ce guide, qui vous permet en gros d'installer git cli, et avec quelques hacks, vous pouvez afficher une invite de commande et taper vagrant ssh dans le dossier de votre boîte vagrant et il fera correctement les bonnes choses, non besoin de configurer les clés ssh, etc. Tout ce qui vient avec ssh et git cli / bin.

Le pouvoir de ceci est que vous pouvez alors exécuter Powershell et toujours obtenir tous les avantages * nix. Cela simplifie vraiment votre environnement et aide à exécuter Vagrant et d'autres choses.

TL; DR Téléchargez Git cli et ajoutez git / bin à PATH. Hack vim.bat dans / bin pour travailler pour Windows. Utilisez ssh nativement dans cmd.


Pourquoi cela a-t-il été voté maintenant? C'est une solution raisonnable et si vous voulez faire du développement sous Windows, c'est une excellente option, bien meilleure que de pirater votre mastic, de pirater vos autres commandes.
Mark Liu
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.