SSH to Vagrant box w systemie Windows?


172

Używam Vagrant do uruchamiania maszyny wirtualnej VirtualBox w systemie Windows. Na innych platformach mogę po prostu

$ vagrant ssh

aby połączyć się z maszyną wirtualną.

Jak połączyć się z tym pudełkiem Vagrant w systemie Windows?

Sposób sugerowany w dokumentacji Vagranta do używania PuTTy również nie działał:

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


2
Duży samouczek na ten temat, przedstawiający sposób SSH do pudełka Vagrant w systemie Windows 7/8
Sliq

11
To już nie jest problem. Jeśli masz ssh.exe w swojej ścieżce (np. C: \ Program Files \ git \ bin), to działa 'vagrant ssh'.
Omri Spector

1
FYI Vagrant due to licensing reasons. It seems possible but until a lawyer gives the go-ahead on this, we're not gong to do this. domyślnie nie zawiera ssh Ship ssh.exe w instalatorze systemu Windows ... zdziwiło mnie to
KCD

Odpowiedzi:


243

Używam PuTTY do łączenia się z moimi skrzynkami Vagrant w systemie Windows7.

Upewnij się, że

  • przekonwertować na %USERPROFILE%\.vagrant.d\insecure_private_key.ppk za pomocą PuTTYGen
  • użyj klucza .ppk w sesji PuTTY - skonfigurowanej w Połączenie> SSH> Auth> Private key file
  • użyj hosta 127.0.0.1
  • użyj portu 2222 zamiast 22
  • możesz ustawić domyślną nazwę użytkownika (vagrant) w Connection> SSH> Auth> Private key do uwierzytelniania

28
uwaga również: kiedy pojawi się zachęta login as:, wprowadź „vagrant” jako nazwę użytkownika (bez cudzysłowów).
Snorkpete

5
A potem zrób to dla każdej maszyny wirtualnej w Vagrant. Wiesz, Vagrant współpracuje z wieloma maszynami wirtualnymi. Po prostu użyj właściwego rozwiązania, a nie obejścia: poniżej jest moja odpowiedź. Mała naszywka w Vagrant.
Michael Field

20
Możesz ustawić domyślną nazwę użytkownika poniżej, Connection > Data > Auto-login usernamea ustawienie PPK jest poniżejConnection > SSH > Auth > Private key for authentication
mpen

1
Jeśli wolisz, tak jak ja, zabezpieczyć twoje klucze prywatne hasłami, na dłuższą metę łatwiej będzie użyć aplikacji pageant.exe podczas uruchamiania, ładując do niej plik ppk. Następnie raz wpisujesz hasło do konkursu i możesz się zalogować bez konieczności każdorazowego podawania hasła ppk w terminalu putty.
Larry Silverman

8
Możesz użyć, vagrant ssh-configaby wiedzieć, jakie opcje dać kitowi.
ibizaman,

121

Musisz załatać kodu Vagrant modyfikując tylko jeden plik ssh.rb.

Wszystkie informacje są tutaj: https://gist.github.com/2843680

vagrant ssh będzie teraz działać również w systemie Windows, podobnie jak w Linuksie.


EDYCJA : W nowszych wersjach stało się to niepotrzebne. Nadal musisz dodać ścieżkę ssh.exedo swojej PATHzmiennej :

Wyszukaj ssh.exe na swoim komputerze, skopiuj ścieżkę (tj. C:\Program Files (x86)\Git\bin), Otwórz Preferencje systemowe, znajdź Ustawienia zmiennej środowiskowej , kliknij Zmienna ścieżki, dodaj ścieżkę, oddzielając istniejące ścieżki za pomocą ;.


1
Proszę skomentować żądanie ściągnięcia Github dotyczące problemu, jeśli użyjesz tego obejścia, nadszedł czas, aby zostało scalone. github.com/mitchellh/vagrant/pull/933
Cory Dolphin

4
Wygląda na to, że zostało połączone około trzy miesiące temu. Na pewno istnieje w wersji 1.2.2.
Johann

Czy jest to nadal potrzebne lub poprawione w ostatnich dystrybucjach Vagrant?
Alex,

2
@Alex To zdecydowanie załatane w ostatnich wersjach Vagrant. Przetestowałem to i udokumentowałem tutaj: robertpate.net/blog/2013/…
robertpateii

1
Szybko wyznacz ścieżkę do swojego git OpenSSH, otwórz PowerShell i uruchom: [Environment]::SetEnvironmentVariable("Path", "$env:Path;c:\Program Files (x86)\Git\bin\", "User")
Janusz Skonieczny

96

Inna opcja korzystania z plików binarnych git:

  1. Zainstaluj git: http://git-scm.com/download/win
  2. Menu Start> cmd (shift + enter, aby przejść jako administrator)
  3. set PATH=%PATH%;C:\Program Files\Git\usr\bin
  4. vagrant ssh

Mam nadzieję że to pomoże :)

Tylko bonus po miesiącach używania tego w systemie Windows: użyj konsoli zamiast terminala Win, więc zawsze możesz otworzyć nową kartę terminala z ustawioną PATH (skonfiguruj ją w opcjach)


Ktoś zagłosował za tą odpowiedzią. Próbowałem dowiedzieć się, jak to działa, teraz wiem! Dzięki
RadiantHex,

To działało dobrze dla mnie. Ponieważ mam GIT, działa o wiele czyściej niż przejście na Putty, ponieważ możesz po prostu ponownie użyć tego samego okna konsoli.
Bartvds

2
Dzięki, ale teraz używam conemu . Jest podobny, ale bardziej elastyczny niż Console. Mam go do pakowania wielu konsol, takich jak cmd.exe, git bash i putty z aliasami i innymi fantazyjnymi rzeczami.
Bartvds

4
dla Git 2.5.0 ŚCIEŻKA powinna mieć wartość „C: \ Program Files \ Git \ usr \ bin”.
vladimir

1
set PATH =% PATH%; C: \ Program Files \ Git \ usr \ bin Działa idealnie! Dzięki!
v.babak,

72

Pobierz Putty: http://www.chiark.greenend.org.uk/~sgtatham/putty/

Korzystanie z putty.exe:

GUI Putty:

HostName: 127.0.0.1
Port: 2222

Po podłączeniu (ekran terminala):

User: vagrant
Passwd: vagrant

Zanim spróbujesz się połączyć, zweryfikuj maszynę wirtualną przy użyciu cmd.exe:

 vagrant status

Jeśli nie działa, użyj:

vagrant up

1
To doskonale pokazuje, jak nie zgubić się w słowach. Niesamowite, dzięki!
appoll

31

Odpowiedź akceptowana jest bardzo pomocni, jednak może się zdarzyć, że zamiast następującego klucza:

%USERPROFILE%\.vagrant.d\insecure_private_key

inny klucz musi zostać przekonwertowany na format Putty:

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

Gdzie {vagrant_machine_root}jest folder z Vagrantfilemaszyną, z którą chcemy się połączyć za pomocą Putty.

Jak wspomniał @ibizaman, użyj, vagrant ssh-configaby sprawdzić, jakiego klucza używa włóczęga:

$ 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
Jeśli chcesz użyć Putty, to jest najlepsza odpowiedź. Musisz przekonwertować poprawny klucz prywatny. Wielkie dzięki!
johnzachary

1
Warto wspomnieć, że powinieneś sprawdzić Userwartość i upewnić się, że podałeś ją Putty w Połączenie-> Dane-> Nazwa użytkownika automatycznego logowania. Na mojej maszynie wirtualnej nazwa brzmiała ubuntui wielokrotnie próbowałem zalogować się jako vagrant.
perlyking


6

Zarówno

  1. W cmdkonsoli wpisz:

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

LUB

  1. Trwale ustaw ścieżkę w zmiennych środowiskowych systemu:

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


2

Teraz mam znacznie lepsze rozwiązanie, które umożliwia bezbolesną aktualizację Vagranta. Jest oparty na załatanym pliku.

Pierwsza linia pliku włóczęgi powinna wyglądać następująco:

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

I poprawionych vagrantfile_ssh plik (oryginalnie nazwany ssh.rb ) powinna istnieć w tym samym katalogu co vagrantfile . Jest to jednocześnie eleganckie i funkcjonalne.

Pobierz poprawiony plik vagrantfile_ssh .


2
  1. Zainstalować Git Bash (Pochodzi z OpenSSH, jak również grep, find, perl,sed itp .;)

    Jeśli masz zainstalowany Vagrant, otwórz appwiz.cpl(AKA Dodaj / Usuń programy) i Repairzainstaluj Vagrant. To sprawi, że włóczęga doda się do twojej ścieżki git-bash.

  2. Otwórz Git Bash (z menu startowego)

  3. cd ~/vagrant/mybox do folderu twojego włóczęgi i vagrant ssh

2

Robiłem tak, jak sugerowano powyżej, ale zmieniłem zmienną środowiskową w wierszu poleceń tylko z PATH =% PATH%; "C: \ Program files \ git \ usr \ bin"

To nie zadziałało. Ale kiedy zmieniłem zmienną środowiskową w Ustawieniach systemu Windows, a następnie uruchomiłem nowy wiersz polecenia, zadziałało za pierwszym razem!


1

Osobiście po prostu używam Cygwin . Co pozwala na użycie wielu popularnych poleceń * nix w systemie Windows. SSH jest jednym z nich.


Będziesz musiał zmienić swoją ścieżkę PATH, aby uwzględnić katalog bin Cygwin, na przykładset PATH=%PATH%;c:\cygwin\bin
David Soroko

1

Windows 7 (nie testowano na innych wersjach)

  1. Kliknij prawym przyciskiem myszy „Mój komputer” i kliknij właściwości
  2. Kliknij opcję Zaawansowane ustawienia systemu
  3. Kliknij opcję Zmienne środowiskowe
  4. W drugim polu pod „Zmienne systemowe” przewiń w dół i kliknij zmienną „Ścieżka” i kliknij EDYTUJ
  5. Upewnij się, że ścieżka jest zawarta w wartości zmiennej, dodając (średnik, jeśli go tam nie ma i) C: \ Program Files (x86) \ Git \ bin; (lub cokolwiek jest ścieżką do twojego ssh.exe)
  6. OK> OK> OK i RESTART WINDOWS
  7. Będziesz musiał podbiec włóczęgę, ale po tym włóczęga ssh powinien działać na stałe

Więcej informacji, które mogą pomóc w przypadku innych wersji ... http://www.computerhope.com/issues/ch000549.htm


1

bardzo proste, po zainstalowaniu menedżera Vagrant i wirtualnego pudełka spróbuj zainstalować cygwin w systemie Windows, ale podczas instalacji cygwin upewnij się, że wybrałeś pakiet SSH, pakiet VIM, który umożliwi systemowi zalogowanie się do maszyny wirtualnej z cygwin po uruchomieniu maszyny włóczęga.


To najlepsza odpowiedź. Cygwin da ci bash podobny do terminala do pracy. Niesamowite!
Neoraptor

1

możesz użyć emulatora terminala cmder dla Windows.

Wykonaj poniższe czynności, aby zainstalować:

  1. Uzyskaj dostęp do cmder.net;
  2. Kliknij Pobierz pełne;
  3. Rozsunąć suwak
  4. (opcjonalnie) Umieść własne pliki wykonywalne w folderze bin, aby umieścić je w swojej PATH.
  5. Uruchom Cmder (Cmder.exe)

wprowadź opis obrazu tutaj

Terminal cmder w systemie Windows

Teraz wykonaj polecenie wymagane do ustawień VM vagrant, tylko dla połączenia wykonaj polecenie vagrant ssh; Zobacz, jak cmder oferuje wbudowanego klienta ssh.

Mam nadzieję, że to pomoże.


0

uwaga również: kiedy pojawi się zachęta login as:, wprowadź „vagrant” jako nazwę użytkownika (bez cudzysłowów). - Snorkpete 28 czerwca '12 o 14:14

Możesz też przejść do Category-> Connection-> Rlogin i ustawić pole „Auto-login username” na „Vagrant”.

Zapisz sesję.


Najlepiej sprawdzić dane wyjściowe, vagrant ssh-configaby upewnić się, że jest to poprawna nazwa użytkownika: na mojej maszynie wirtualnej, ubuntu / xenial64, tak byłoubuntu
perlyking


0

Dodaj następujące wiersze do swojego 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

gdzie vagrant_rsai vagrant_rsa.pubjest kluczem prywatnym i publicznym znajdującym się w bieżącym folderze projektu vagrant (i wygenerowanym np. przez ssh-keygen -t rsa -C "your@email.here") i openssh.ps1jest:

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

który jest uproszczoną wersją skryptu instalacyjnego joefitzgerald / packer-windows openssh .

Teraz możesz przejść vagrant sshdo okna Windows.

Dla tych, którzy używają vagrant-libvirt , prawdopodobnie chcesz przekazać niektóre porty, takie jak RDP, z hosta do gościa. vagrant-libvirt używa ssh do przekierowania portów, więc musisz skonfigurować ssh w systemie Windows, jak w powyższej instrukcji, a następnie będziesz mógł przekazywać porty takie jak:

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

Nie działa dla mnie. Czy potrzebuję hasła podczas uruchamiania ssh-keygen?
Jared Beach

@JaredBeach Nie, nie wpisuj hasła podczas generowania klucza.
mixel

0

Z tym samym problemem spotkałem się już wcześniej.

  1. W folderze homestead użyj bash init.sh.

  2. Jeśli nie masz .ssh folder D:/Users/your username/, trzeba dostać parę kluczy SSH ssh-keygen -t rsa -C "you@homestead".

  3. Edycja Homestead.yaml (zagroda /) 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. Musisz użyć aplikacji komputerowej git bash .

  2. Otwórz aplikację komputerową git bash. vagrant up

  3. vagrant ssh


0

Kolejne rozwiązanie tutaj, ale tylko dla wirtualnego pudełka Windows 10 do testowania eksploratora. ssh użytkownik: IEUser ssh pass: Passw0rd!


0

Folder instalacyjny vagrant zawiera ssh.exe, który zachowuje się jak ssh (1) w systemie Linux (przyjmuje te same flagi / argumenty).

Aby zobaczyć wszystkie użyte argumenty, możesz uruchomić vagrant ssh-configlub vagrant ssh --debuguzyskać bardziej szczegółowe dane wyjściowe.

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

Jest to przydatne w sytuacjach, w których vagrant statusmówi się, że twoja maszyna wirtualna znajduje się w powerofflubsuspended trybie , gdy jesteś pewien, że faktycznie działa, aby wymusić połączenie ssh.

Jeśli nie chcesz zapamiętywać / wpisywać powyższego polecenia, po prostu zapisz je w vagrant.ps1pliku, aby móc wykonać je z poziomu PowerShell za pomocą .\vagrant_ssh.ps1


0

Dobrą alternatywą dla PuTTY jest emulator terminala Mintty . Ma więcej konfigurowalnych opcji niż PuTTY.


-1

Myślę, że lepszą odpowiedzią na to pytanie byłoby:

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

Eric napisał fajny artykuł o tym, jak zmienić komputer z systemem Windows w środowisko Linux. Nawet z hackami, aby Vim działał natywnie w cmd.

Jeśli przejrzysz ten przewodnik, który w zasadzie pozwoli ci zainstalować git cli, i przy kilku hackach możesz wywołać wiersz polecenia i wpisać vagrant ssh w folderze twojego vagrant box, a on zrobi właściwe rzeczy, nie trzeba skonfigurować klucze ssh itp. Wszystko, co jest dostarczane z ssh i git cli / bin.

Siła tego polega na tym, że możesz wtedy faktycznie uruchomić PowerShell i nadal korzystać z całej dobroci * nix. To naprawdę upraszcza środowisko i pomaga w uruchamianiu Vagrant i innych rzeczach.

TL; DR Pobierz Git cli i dodaj git / bin do PATH. Zhakuj vim.bat w / bin, aby działał w systemie Windows. Używaj ssh natywnie w cmd.


Dlaczego teraz to głosowano? Jest to rozsądne rozwiązanie i jeśli chcesz programować w systemie Windows, jest to świetna opcja, znacznie lepsza niż hakowanie szpachli, hakowanie innych poleceń.
Mark Liu,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.