SSH zu Vagrant Box in Windows?


172

Ich verwende Vagrant, um eine VirtualBox-VM in Windows zu starten. Auf anderen Plattformen kann ich nur

$ vagrant ssh

um eine Verbindung zur VM herzustellen.

Wie verbinde ich mich mit dieser Vagrant-Box in Windows?

Die in der Vagrant-Dokumentation vorgeschlagene Methode zur Verwendung von PuTTy funktionierte ebenfalls nicht:

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



11
Dies ist kein Problem mehr. Wenn Sie ssh.exe in Ihrem Pfad haben (z. B. c: \ Programme \ git \ bin), funktioniert 'vagrant ssh'.
Omri Spector

1
Zu due to licensing reasons. It seems possible but until a lawyer gives the go-ahead on this, we're not gong to do this. Ihrer Information Vagrant enthält ssh Ship ssh.exe standardmäßig nicht im Windows-Installationsprogramm ... es hat mich verwirrt
KCD

Antworten:


243

Ich verwende PuTTY, um eine Verbindung zu meinen Vagrant-Boxen unter Windows 7 herzustellen.

Stell sicher, dass du

  • Konvertieren Sie die %USERPROFILE%\.vagrant.d\insecure_private_keymit PuTTYGen in .ppk
  • Verwenden Sie den PPK-Schlüssel in Ihrer PuTTY-Sitzung - konfiguriert unter Verbindung> SSH> Authentifizierung> Private Schlüsseldatei
  • Verwenden Sie den Host 127.0.0.1
  • Verwenden Sie Port 2222 anstelle von 22
  • Sie können den Standardbenutzernamen (Vagrant) unter Verbindung> SSH> Authentifizierung> Privater Schlüssel für die Authentifizierung festlegen

28
Hinweis auch: Wenn die Eingabeaufforderung zum Anmelden als: angezeigt wird, geben Sie als Benutzernamen 'vagrant' ein (ohne Anführungszeichen).
Schnorchel

5
Und dann machen Sie das für jede VM in Vagrant. Sie wissen, Vagrant arbeitet mit mehreren VMs. Verwenden Sie also einfach die richtige Lösung und keine Problemumgehung: Hier ist meine Antwort. Kleiner Fleck in Vagrant.
Michael Field

20
Sie können den Standardbenutzernamen unter Connection > Data > Auto-login usernameConnection > SSH > Auth > Private key for authentication
festlegen

1
Wenn Sie es vorziehen, Ihre privaten Schlüssel wie ich mit Passwörtern zu sichern, ist es auf lange Sicht möglicherweise einfacher, die App pageant.exe beim Start zu verwenden und Ihre ppk-Datei darin zu laden. Dann geben Sie Ihr Passwort für pageant einmal ein und können sich anmelden, ohne jedes Mal das ppk-Passwort im Putty-Terminal angeben zu müssen.
Larry Silverman

8
Sie können verwenden, um vagrant ssh-configzu wissen, welche Optionen Sie Kitt geben können.
Ibizaman

121

Sie müssen Vagrant-Code patchen , indem Sie nur eine Datei ändern ssh.rb.

Alle Informationen finden Sie hier: https://gist.github.com/2843680

vagrant ssh funktioniert jetzt auch unter Windows, genau wie unter Linux.


EDIT : In neueren Versionen wurde dies unnötig. Sie müssen noch den Pfad ssh.exezu Ihrer PATHVariablen hinzufügen :

Suchen Sie auf Ihrem Computer nach ssh.exe , kopieren Sie den Pfad (dh C:\Program Files (x86)\Git\bin), öffnen Sie die Systemeinstellungen, suchen Sie die Einstellungen für die Umgebungsvariable , klicken Sie auf die Pfadvariable, fügen Sie den Pfad hinzu und trennen Sie die vorhandenen Pfade mithilfe von ;.


1
Bitte kommentieren Sie die Github-Pull-Anfrage für das Problem, wenn Sie diese Problemumgehung verwenden. Es ist an der Zeit, dass sie zusammengeführt wird. github.com/mitchellh/vagrant/pull/933
Cory Dolphin

4
Dies scheint vor etwa drei Monaten zusammengeführt worden zu sein. Es existiert definitiv in Version 1.2.2.
Johann

Wird dies in den letzten Vagrant-Dists noch benötigt oder gepatcht?
Alex

2
@Alex Es ist definitiv in die neuesten Vagrant-Versionen gepatcht. Ich habe es getestet und hier dokumentiert: robertpate.net/blog/2013/…
robertpateii

1
Stellen Sie schnell den Pfad zu Ihrem Git OpenSSH ein, öffnen Sie PowerShell und führen Sie [Environment]::SetEnvironmentVariable("Path", "$env:Path;c:\Program Files (x86)\Git\bin\", "User")
Folgendes aus

96

Eine weitere Option mit Git-Binärdateien:

  1. Installieren Sie git: http://git-scm.com/download/win
  2. Startmenü> cmd (Umschalt + Eingabetaste, um als Administrator zu wechseln)
  3. set PATH=%PATH%;C:\Program Files\Git\usr\bin
  4. vagrant ssh

Hoffe das hilft :)

Nur ein Bonus nach Monaten unter Windows: Verwenden Sie die Konsole anstelle des Win-Terminals, damit Sie jederzeit eine neue Terminal-Registerkarte mit festgelegtem PATH öffnen können (konfigurieren Sie sie unter Optionen).


Jemand hat diese Antwort positiv bewertet. Ich habe versucht herauszufinden, wie ich das zum Laufen gebracht habe, jetzt weiß ich es! Vielen Dank
RadiantHex

Das hat bei mir gut funktioniert. Da ich GIT habe, funktioniert es viel sauberer als der Wechsel zu Putty, da Sie einfach dasselbe Konsolenfenster wiederverwenden können.
Bartvds

2
Danke, aber ich benutze jetzt conemu . Es ist ähnlich, aber flexibler als Console. Ich habe es viele Konsolen, wie cmd.exe, Git Bash und Putty mit Alliasen und anderen ausgefallenen Sachen zu wickeln.
Bartvds

4
für Git 2.5.0 sollte PATH "C: \ Programme \ Git \ usr \ bin" sein.
Vladimir

1
setze PATH =% PATH%; C: \ Programme \ Git \ usr \ bin Funktioniert perfekt! Vielen Dank!
v.babak

72

Laden Sie Putty herunter: http://www.chiark.greenend.org.uk/~sgtatham/putty/

Mit putty.exe:

Putty GUI:

HostName: 127.0.0.1
Port: 2222

Wenn Sie eine Verbindung herstellen (Terminalbildschirm):

User: vagrant
Passwd: vagrant

Überprüfen Sie Ihre VM mit cmd.exe, bevor Sie versuchen, eine Verbindung herzustellen:

 vagrant status

Wenn es nicht funktioniert, verwenden Sie:

vagrant up

1
Dies zeigt perfekt, wie man sich nicht in Worten verliert. Erstaunlich, danke!
Appoll

31

Die akzeptierte Antwort ist wirklich hilfreich, es kann jedoch vorkommen, dass anstelle des folgenden Schlüssels:

%USERPROFILE%\.vagrant.d\insecure_private_key

Ein anderer Schlüssel muss in das Putty-Format konvertiert werden:

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

Wo {vagrant_machine_root}befindet sich ein Ordner mit dem VagrantfileComputer, mit dem wir mithilfe von Putty eine Verbindung herstellen möchten?

Wie @ibizaman erwähnte, verwenden Sie diese Option, um vagrant ssh-configzu überprüfen, welcher Schlüssel von Vagrant verwendet wird:

$ 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
Wenn Sie Putty verwenden möchten, ist dies die beste Antwort. Sie müssen den richtigen privaten Schlüssel konvertieren. Danke vielmals!
Johnzachary

1
Erwähnenswert ist, dass Sie den UserWert überprüfen und sicherstellen sollten , dass Sie ihn Putty in Connection-> Data-> Auto-Login-Benutzername mitteilen. Auf meiner VM lautete der Name, ubuntuund ich hatte wiederholt versucht, mich als anzumelden vagrant.
Perlyking


6

Entweder

  1. Geben Sie in Ihre cmdKonsole Folgendes ein:

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

ODER

  1. Legen Sie den Pfad in den Umgebungsvariablen Ihres Systems dauerhaft fest:

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


2

Jetzt habe ich eine viel bessere Lösung, die ein schmerzloses Vagrant-Upgrade ermöglicht. Es basiert auf einer gepatchten Datei.

Die erste Zeile einer Vagrantdatei sollte lauten:

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

Die gepatchte Datei vagrantfile_ssh (ursprünglich ssh.rb ) sollte sich im selben Verzeichnis wie vagrantfile befinden . Dies ist sowohl elegant als auch funktional.

Laden Sie das gepatchte vagrantfile_ssh herunter .


2
  1. Installieren Git Bash (Komm mit OpenSSH, sowie grep, find, perl, sed, etc .;)

    Wenn Sie Vagrant installiert haben, öffnen Sie appwiz.cpl(AKA Add / Remove Programs) und Repairdie Vagrant-Installation. Dies wird dazu führen, dass sich Vagabunden zu Ihrem Git-Bash-Pfad hinzufügen.

  2. Öffnen Sie Git Bash (über das Startmenü)

  3. cd ~/vagrant/mybox in den Ordner Ihrer Vagabundbox und vagrant ssh

2

Ich habe wie oben vorgeschlagen vorgegangen, aber die Umgebungsvariable in der Befehlszeile nur mit PATH =% PATH% geändert; "C: \ Programme \ git \ usr \ bin"

Das hat nicht funktioniert. Aber als ich die Umgebungsvariable über die Windows-Einstellungen geändert und dann eine neue Eingabeaufforderung gestartet habe, hat es beim ersten Mal funktioniert!


1

Ich persönlich benutze nur Cygwin . Damit können Sie viele gängige * nix-Befehle in Windows verwenden. SSH ist einer von ihnen.


Sie müssen Ihren set PATH=%PATH%;c:\cygwin\bin
PFAD öffnen

1

Windows 7 (nicht auf anderen Versionen getestet)

  1. Klicken Sie mit der rechten Maustaste auf "Arbeitsplatz" und klicken Sie auf Eigenschaften
  2. Klicken Sie auf Erweiterte Systemeinstellungen
  3. Klicken Sie auf Umgebungsvariablen
  4. Scrollen Sie im zweiten Feld unter "Systemvariablen" nach unten und klicken Sie auf die Variable "Pfad" und klicken Sie auf BEARBEITEN
  5. Stellen Sie sicher, dass der Pfad im Variablenwert enthalten ist, indem Sie ein Semikolon anhängen (falls nicht vorhanden und) C: \ Programme (x86) \ Git \ bin; (oder was auch immer der Pfad zu Ihrer ssh.exe ist)
  6. OK> OK> OK und FENSTER NEU STARTEN
  7. Sie müssen Vagrant hochlaufen lassen, aber danach sollte Vagrant SSH dauerhaft funktionieren

Weitere Informationen, die bei anderen Versionen hilfreich sein könnten ... http://www.computerhope.com/issues/ch000549.htm


1

Sehr einfach: Wenn Sie Vagrant Manager und Virtual Box installiert haben, versuchen Sie, Cygwin unter Windows zu installieren. Wählen Sie jedoch während der Installation von Cygwin das SSH-Paket VIM-Paket aus, mit dem sich Ihr System nach dem Hochfahren Ihres Computers von Cygwin aus bei Ihrer VM anmelden kann Landstreicher.


Dies ist die beste Antwort hier. Cygwin gibt Ihnen ein Bash-ähnliches Terminal, mit dem Sie arbeiten können. Genial!
Neoraptor

1

Sie können Emulator Terminal Cmder für Windows verwenden.

Befolgen Sie die folgenden Schritte zur Installation:

  1. Zugriff auf cmder.net;
  2. Klicken Sie auf Download Full;
  3. Entpacken
  4. (optional) Legen Sie Ihre eigenen ausführbaren Dateien in den Ordner bin ab, um sie in Ihren PATH einzufügen.
  5. Führen Sie Cmder (Cmder.exe) aus.

Geben Sie hier die Bildbeschreibung ein

Terminal cmder unter Windows

Führen Sie nun den für die Einstellungen von VM Vagrant erforderlichen Befehl aus. Führen Sie für Connect nur den Befehl Vagrant SSH aus. Watch cmder bietet ssh client embedded an.

Ich hoffe das hilft.


0

Hinweis auch: Wenn die Eingabeaufforderung zum Anmelden als: angezeigt wird, geben Sie als Benutzernamen 'vagrant' ein (ohne Anführungszeichen). - Schnorchel 28. Juni 12 um 14:14

Oder Sie gehen zu Kategorie-> Verbindung-> Anmelden und setzen das Feld 'Benutzername für automatische Anmeldung' auf 'Vagrant'.

Speichern Sie die Sitzung.


Beste die Ausgabe zu überprüfen , vagrant ssh-configum sicherzustellen , dass dies ist der richtige Benutzername: auf meiner VM, ubuntu / xenial64, wurdeubuntu
perlyking

0

Ich benutze vagrant sshBefehl mit git sshunter Windows 7, 8.1 und Windows 10.

Um nur zu installieren, laden Sie msysgit von der msysgit-Projektseite herunter .

Und laufen ssh.exenur umfassen die bin folterzu Windows - Umgebungsvariablen oder installieren git von Git herunterladen Seite und kopieren Sie die msysgit bin folter auf C:\Program Files\Git\bin.


0

Fügen Sie Ihrem Folgendes die folgenden Zeilen hinzu 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

wo vagrant_rsaund vagrant_rsa.pubist der private und öffentliche Schlüssel im aktuellen vagabundierenden Projektordner (und zB von generiert ssh-keygen -t rsa -C "your@email.here") und openssh.ps1ist:

$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"

Das ist eine vereinfachte Version von Joefitzgerald / Packer-Windows OpenSSh Setup-Skript .

Jetzt können Sie vagrant sshin die Windows-Box.

Für diejenigen, die vagrant-libvirt verwenden , möchten Sie möglicherweise einige Ports wie RDP vom Host zum Gast weiterleiten. vagrant-libvirt verwendet ssh für die Portweiterleitung, sodass Sie ssh unter Windows wie in den obigen Anweisungen eingerichtet einrichten müssen. Anschließend können Sie Ports wie folgt weiterleiten:

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

Ich arbeite nicht für mich. Benötige ich ein Passwort, wenn ich ssh-keygen ausführe?
Jared Beach

@JaredBeach Nein, geben Sie beim Generieren des Schlüssels keine Passphrase ein.
Mixel

0

Ich habe das gleiche Problem auch schon einmal getroffen.

  1. Verwenden Sie im Homestead-Ordner bash init.sh.

  2. Wenn Sie keinen .ssh-Ordner haben D:/Users/your username/, benötigen Sie ein Paar SSH-Schlüssel ssh-keygen -t rsa -C "you@homestead".

  3. Edit Homestead.yaml (homestead /) , 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. Sie müssen die Git Bash Desktop App verwenden .

  2. Öffnen Sie die Git Bash Desktop App. vagrant up

  3. vagrant ssh


0

Eine andere Lösung hier, aber nur für die virtuelle Box von Windows 10, um den Explorer zu testen. SSH-Benutzer: IEUser SSH-Pass: Passw0rd!


0

Der vagabundierende Installationsordner enthält eine ssh.exe, die sich unter Linux wie ssh (1) verhält (verwendet dieselben Flags / Argumente).

Um alle Argumente gebraucht, können Sie laufen vagrant ssh-configoder vagrant ssh --debugfür eine ausführliche Ausgabe.

von 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"

Dies ist nützlich in Situationen, in denen sich vagrant statusIhre VM in poweroffoder befindetsuspended Modus befindet, wenn Sie sind, dass sie tatsächlich ausgeführt wird, um die SSH-Verbindung zu erzwingen.

Wenn Sie sich den obigen Befehl nicht merken / vagrant.ps1eingeben möchten, schreiben Sie ihn in eine Datei, damit Sie ihn von Ihrer Powershell aus ausführen können .\vagrant_ssh.ps1


0

Eine gute Alternative zu PuTTY ist der Mintty- Terminalemulator. Es hat mehr konfigurierbare Optionen als PuTTY.


-1

Ich denke, eine bessere Antwort auf diese Frage wäre die folgende:

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

Eric hat einen schönen Artikel darüber geschrieben, wie Sie Ihren Windows-Computer in eine Linux-Umgebung verwandeln können. Sogar mit Hacks, um Vim dazu zu bringen, nativ in cmd zu arbeiten.

Wenn Sie diese Anleitung durchgehen, die Sie im Grunde dazu bringt, git cli zu installieren, und mit einigen Hacks, können Sie eine Eingabeaufforderung aufrufen und vagrant ssh eingeben, während Sie sich im Ordner Ihrer vagrant-Box befinden, und es wird die richtigen Dinge richtig machen, nein müssen ssh-Schlüssel usw. konfigurieren. Alles, was mit ssh und dem git cli / bin geliefert wird.

Die Stärke davon ist, dass Sie dann tatsächlich Powershell ausführen und trotzdem die ganze * nix-Güte erhalten können. Dies vereinfacht Ihre Umgebung wirklich und hilft beim Ausführen von Vagrant und anderen Dingen.

TL; DR Laden Sie Git cli herunter und fügen Sie git / bin zu PATH hinzu. Hacke vim.bat in / bin, um für Windows zu arbeiten. Verwenden Sie ssh nativ in cmd.


Warum wurde das jetzt gewählt? Es ist eine vernünftige Lösung, und wenn Sie in Windows entwickeln möchten, ist dies eine großartige Option, viel besser als das Hacken Ihres Kitts und das Hacken Ihrer anderen Befehle.
Mark Liu
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.