Scatola da SSH a Vagrant in Windows?


172

Sto usando Vagrant per avviare una VM VirtualBox in Windows. In altre piattaforme, posso proprio

$ vagrant ssh

per connettersi alla macchina virtuale.

Come posso collegarmi a questo box Vagrant in Windows?

Anche il modo suggerito nella documentazione di Vagrant di usare PuTTy non ha funzionato:

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


2
Grande tutorial su questo, che mostra come SSH in un box Vagrant in Windows 7/8
Sliq

11
Questo non è più un problema. Se hai ssh.exe nel tuo percorso (es. C: \ Programmi \ git \ bin), allora 'vagrant ssh' funziona.
Omri Spector,

1
FYI Vagrant non include 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 di default nel programma di installazione di Windows ... mi ha lasciato perplesso
KCD,

Risposte:


243

Uso PuTTY per connettermi ai miei box Vagrant su Windows 7.

Accertati di

  • converti %USERPROFILE%\.vagrant.d\insecure_private_keyin .ppk usando PuTTYGen
  • utilizzare la chiave .ppk nella sessione PuTTY - configurata in Connessione> SSH> Auth> File chiave privata
  • usa l'host 127.0.0.1
  • utilizzare la porta 2222 anziché 22
  • è possibile impostare il nome utente predefinito (vagabondo) in Connessione> SSH> Auth> Chiave privata per l'autenticazione

28
nota anche: quando appare il prompt login as:, inserire 'vagrant' come nome utente (senza virgolette).
snorkpete,

5
E poi fallo per ogni VM in Vagrant. Sai, Vagrant funziona con più VM. Quindi, basta usare la soluzione corretta, non una soluzione alternativa: c'è la mia risposta qui sotto. Toppa piccola in Vagrant.
Michael Field,

20
È possibile impostare il nome utente predefinito in Connection > Data > Auto-login usernamee l'impostazione PPK è inConnection > SSH > Auth > Private key for authentication
mpen

1
Se preferisci proteggere le tue chiavi private con le mie password, a lungo termine potrebbe essere più semplice utilizzare l'app pageant.exe all'avvio, caricando il tuo file ppk in essa. Quindi inserisci la password per il concorso una volta e puoi accedere senza dover specificare la password ppk nel terminale putty ogni volta.
Larry Silverman,

8
Puoi usare vagrant ssh-configper sapere quali opzioni dare allo stucco.
ibizaman,

121

È necessario patchare un codice Vagrant modificando un solo file, ssh.rb.

Tutte le informazioni sono qui: https://gist.github.com/2843680

vagrant ssh ora funzionerà anche su Windows, proprio come su Linux.


EDIT : nelle versioni più recenti questo non è più necessario. Devi ancora aggiungere il percorso ssh.exealla tua PATHvariabile :

Cerca ssh.exe sul tuo computer, copia il percorso (es. C:\Program Files (x86)\Git\bin), Apri le Preferenze di Sistema, trova le impostazioni della variabile d'ambiente , fai clic sulla variabile del percorso, aggiungi il percorso, separando i percorsi esistenti usando ;.


1
Si prega di commentare la richiesta pull di Github per il problema se si utilizza questo lavoro in giro, è tempo che sia stato unito. github.com/mitchellh/vagrant/pull/933
Cory Dolphin

4
Questo sembra essere stato unito circa tre mesi fa. Esiste sicuramente nella versione 1.2.2.
Johann,

È ancora necessario o corretto nelle recenti dist Vagrant?
Alex

2
@Alex È definitivamente corretto nelle recenti versioni di Vagrant. L'ho provato e documentato qui: robertpate.net/blog/2013/…
robertpateii

1
Imposta rapidamente il percorso del tuo git OpenSSH, apri PowerShell ed esegui: [Environment]::SetEnvironmentVariable("Path", "$env:Path;c:\Program Files (x86)\Git\bin\", "User")
Janusz Skonieczny

96

Un'altra opzione che utilizza i binari git:

  1. Installa git: http://git-scm.com/download/win
  2. Menu Start> cmd (MAIUSC + INVIO per accedere come amministratore)
  3. set PATH=%PATH%;C:\Program Files\Git\usr\bin
  4. vagrant ssh

Spero che questo ti aiuti :)

Solo un bonus dopo mesi usando quello su Windows: usa la Console invece del terminale Win, così puoi sempre aprire una nuova scheda del terminale con PATH impostato (configuralo su opzioni)


Qualcuno ha votato per questa risposta. Stavo cercando di capire come ho funzionato, ora lo so! Grazie
RadiantHex,

Questo ha funzionato bene per me. Dato che ho GIT, funziona in modo molto più pulito, quindi passa a Putty poiché puoi semplicemente riutilizzare la stessa finestra della console.
Bartvds,

2
Grazie, ma ora uso il conemu . È simile ma più flessibile della console. Ho racchiuso molte console, come cmd.exe, git bash e putty con allias e altre cose fantasiose.
Bartvds,

4
per Git 2.5.0 PATH dovrebbe essere "C: \ Programmi \ Git \ usr \ bin".
Vladimir

1
set PATH =% PATH%; C: \ Programmi \ Git \ usr \ bin Funziona perfettamente! Grazie!
v.babak,

72

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

Utilizzando putty.exe:

GUI Putty:

HostName: 127.0.0.1
Port: 2222

Quando ci si collega (schermata terminale):

User: vagrant
Passwd: vagrant

Prima di provare a connettersi, verificare la VM usando cmd.exe:

 vagrant status

Se è inattivo, utilizzare:

vagrant up

1
Questo dimostra perfettamente come non perdersi a parole. Incredibile, grazie!
Appoll

31

La risposta accettata è davvero utile, tuttavia può accadere che invece della seguente chiave:

%USERPROFILE%\.vagrant.d\insecure_private_key

una chiave diversa deve essere convertita nel formato di Putty:

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

Dov'è {vagrant_machine_root}una cartella con la Vagrantfilemacchina della quale vogliamo connetterci usando Putty.

Come accennato da @ibizaman, usa vagrant ssh-configper verificare quale chiave viene utilizzata da 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
Se vuoi usare Putty, questa è la risposta migliore. Devi convertire la chiave privata corretta. Grazie molto!
johnzachary,

1
Vale la pena ricordare che è necessario controllare il Uservalore e assicurarsi di fornirlo a Putty in Connessione-> Dati-> Nome utente di accesso automatico. Sulla mia macchina virtuale il nome era ubuntued ero stato ripetutamente tentando, e non riuscendo, di accedere come vagrant.
perlyking il


6

O

  1. Nella cmdconsole digitare quanto segue:

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

O

  1. Imposta in modo permanente il percorso nelle variabili di ambiente del tuo sistema:

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


2

Ora ho una soluzione molto migliore che consente l'aggiornamento Vagrant indolore. Si basa su un file patchato.

La prima riga di un file vagabondo dovrebbe essere:

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

E il file vagrantfile_ssh patchato (originariamente chiamato ssh.rb ) dovrebbe esistere nella stessa directory di vagrantfile . Questo è allo stesso tempo elegante e funzionale.

Scarica il vagrantfile_ssh patchato .


2
  1. Installare Git Bash (Viene fornito con OpenSSH, così come grep, find, perl, sed, ecc .;)

    Se hai installato Vagrant, apri appwiz.cpl(Installazione applicazioni AKA) e Repairl'installazione di Vagrant. Questo farà sì che il vagabondo si aggiunga al tuo percorso git-bash.

  2. Apri Git Bash (tramite il menu Start)

  3. cd ~/vagrant/mybox nella cartella del tuo vagabondo e vagrant ssh

2

Stavo facendo come suggerito sopra ma cambiando la variabile d'ambiente sulla riga di comando solo con PATH =% PATH%; "C: \ Programmi \ git \ usr \ bin"

Questo non ha funzionato. Ma quando ho modificato la variabile Environment tramite Impostazioni di Windows e poi ho avviato un nuovo prompt dei comandi, ha funzionato per la prima volta!


1

Personalmente, uso solo Cygwin . Ciò consente di utilizzare molti comandi * nix comuni in Windows. SSH è uno di questi.


Devi includere il tuo PERCORSO per includere la directory bin di Cygwin, qualcosa del genereset PATH=%PATH%;c:\cygwin\bin
David Soroko,

1

Windows 7 (non testato su altre versioni)

  1. Fare clic destro su "Risorse del computer" e fare clic su Proprietà
  2. Fai clic su Impostazioni di sistema avanzate
  3. Fai clic su Variabili d'ambiente
  4. Nella seconda casella in "Variabili di sistema" scorrere verso il basso e fare clic sulla variabile "Percorso" e fare clic su MODIFICA
  5. Assicurati che il percorso sia incluso nel Valore variabile aggiungendo (un punto e virgola se non è presente e) C: \ Programmi (x86) \ Git \ bin; (o qualunque sia il percorso del tuo ssh.exe)
  6. OK> OK> OK e riavvia Windows
  7. Dovrai eseguire il vagabondo, ma dopo quel vagabondo ssh dovrebbe funzionare in modo permanente

Ulteriori informazioni che potrebbero essere utili con altre versioni ... http://www.computerhope.com/issues/ch000549.htm


1

molto semplice, una volta installato Vagrant Manager e Virtual Box, prova a installare Cygwin su Windows ma durante l'installazione di Cygwin, assicurati di selezionare il pacchetto SSH, pacchetto VIM che consentirà al tuo sistema di accedere alla tua VM da Cygwin dopo aver acceso il tuo computer attraverso vagabondo.


Questa è la migliore risposta qui. Cygwin ti fornirà un terminale bash con cui lavorare. Eccezionale!
Neoraptor,

1

puoi usare l'emulatore terminal cmder per windows.

Seguire i passaggi seguenti per l'installazione:

  1. Accedi a cmder.net;
  2. Fai clic su Download completo;
  3. Unzip
  4. (facoltativo) Posiziona i tuoi file eseguibili nella cartella bin da iniettare nel PERCORSO.
  5. Esegui Cmder (Cmder.exe)

inserisci qui la descrizione dell'immagine

Terminale cmder su Windows

Ora esegui il comando richiesto per le impostazioni VM vagrant, per connect esegui solo il comando vagrant ssh; Watch cmder offre client ssh incorporato.

Spero che aiuti.


0

nota anche: quando appare il prompt login as:, inserire 'vagrant' come nome utente (senza virgolette). - Snorkpete, 28 giugno 12 alle 14:14

Oppure puoi andare su Categoria-> Connessione-> Rlogin e impostare il campo "Nome utente login automatico" su "Vagrant".

Salva la sessione.


Meglio controllare l'output di vagrant ssh-configper assicurarsi che questo sia il nome utente corretto: sulla mia VM, ubuntu / xenial64, lo eraubuntu
perlyking il

0

Uso il vagrant sshcomando con git sshsu Windows 7, 8.1 e Windows 10.

Per installare scaricare solo msysgit dalla pagina del progetto msysgit .

E per eseguire ssh.exeincludere solo il bin folterper finestre variabili d'ambiente o installare git dalla pagina di Download Git e copiare il msysgit bin folter a C:\Program Files\Git\bin.


0

Aggiungi le seguenti righe al tuo 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

dove vagrant_rsaed vagrant_rsa.pubè la chiave privata e pubblica situata nella cartella del progetto vagabondo corrente (e generata ad esempio da ssh-keygen -t rsa -C "your@email.here") ed openssh.ps1è:

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

che è la versione semplificata dello script di installazione openssh di joefitzgerald / packer-windows .

Ora puoi vagrant sshaccedere alla finestra di Windows.

Per coloro che usano vagrant-libvirt potresti voler inoltrare alcune porte come RDP da host a guest. vagrant-libvirt usa ssh per il port forwarding, quindi devi installare ssh su Windows come nelle istruzioni sopra e sarai in grado di inoltrare porte come:

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

Non funziona per me. Ho bisogno di una password quando eseguo ssh-keygen?
Jared Beach,

@JaredBeach No, non inserire la passphrase durante la generazione della chiave.
mixel

0

Ho anche incontrato lo stesso problema prima.

  1. Nella cartella della fattoria, utilizzare bash init.sh.

  2. Se non si dispone di cartella .ssh in D:/Users/your username/, è necessario per ottenere una coppia di chiavi SSH, ssh-keygen -t rsa -C "you@homestead".

  3. Modifica Homestead.yaml (fattoria /), 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. Devi usare l'app desktop git bash .

  2. Apri l'app desktop git bash. vagrant up

  3. vagrant ssh


0

Un'altra soluzione qui, ma solo per la scatola virtuale di Windows 10 per testare Explorer. utente ssh: IEUser ssh pass: Passw0rd!


0

La cartella di installazione di Vagrant contiene un ssh.exe che si comporta come ssh (1) su Linux (accetta gli stessi flag / argomenti).

Per visualizzare tutti gli argomenti utilizzati, è possibile eseguire vagrant ssh-configo vagrant ssh --debugper un output più dettagliato.

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

Questo è utile in situazioni in cui vagrant statusdice che il tuo VM è in modalità poweroffo suspendedquando sei sicuro che stia funzionando, per forzare la connessione SSH.

Se non vuoi ricordare / digitare il comando sopra, juste scrivilo in un vagrant.ps1file in modo da poterlo eseguire dalla tua PowerShell usando .\vagrant_ssh.ps1


0

Una buona alternativa a PuTTY è l' emulatore di terminale Mintty . Ha più opzioni configurabili di PuTTY.


-1

Penso che una risposta migliore a questa domanda sarebbe la seguente:

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

Eric ha scritto un bell'articolo su come trasformare il tuo computer Windows in un ambiente Linux. Anche con gli hack per far funzionare Vim in modo nativo in cmd.

Se passi attraverso questa guida, che in pratica ti fa installare git cli, e con alcuni hack, puoi far apparire un prompt dei comandi e digitare vagrant ssh mentre sei nella cartella del tuo vagabondo e farà correttamente le cose giuste, no è necessario configurare i tasti ssh ecc. Tutto ciò che viene fornito con ssh e git cli / bin.

Il potere di questo è che puoi effettivamente eseguire PowerShell e ottenere ancora tutto il bene * nix. Questo semplifica davvero il tuo ambiente e aiuta con l'esecuzione di Vagrant e altre cose.

TL; DR Scarica Git cli e aggiungi git / bin a PATH. Hack vim.bat in / bin per funzionare con Windows. Usa ssh in modo nativo in cmd.


Perché è stato votato ora? È una soluzione ragionevole e se vuoi sviluppare in Windows, questa è un'ottima opzione, molto meglio che hackerare il tuo mastice, hackerare gli altri tuoi comandi.
Mark Liu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.