¿SSH a Vagrant box en Windows?


172

Estoy usando Vagrant para iniciar una VM VirtualBox en Windows. En otras plataformas, puedo simplemente

$ vagrant ssh

para conectarse a la VM.

¿Cómo me conecto a este cuadro Vagrant en Windows?

La forma sugerida en la documentación de Vagrant para usar PuTTy tampoco funcionó:

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


2
Gran tutorial sobre esto, presentando cómo SSH en una caja Vagrant en Windows 7/8
Sliq

11
Esto ya no es un problema. Si tiene ssh.exe en su ruta (por ejemplo, c: \ Archivos de programa \ git \ bin), entonces funciona 'ssh vagabundo'.
Omri Spector

1
FYI Vagrant no incluye 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 de forma predeterminada en el instalador de Windows ... me dejó perplejo
KCD

Respuestas:


243

Yo uso PuTTY para conectarme a mis cajas Vagrant en Windows7.

Asegúrese

  • convertir el %USERPROFILE%\.vagrant.d\insecure_private_key.ppk usando PuTTYGen
  • use la clave .ppk en su sesión PuTTY, configurada en Conexión> SSH> Auth> Archivo de clave privada
  • usar host 127.0.0.1
  • use el puerto 2222 en lugar de 22
  • puede establecer el nombre de usuario predeterminado (vagabundo) en Conexión> SSH> Auth> Clave privada para autenticación

28
nota también: cuando aparezca el mensaje de inicio de sesión como: ingrese 'vagabundo' como nombre de usuario (sin comillas).
snorkpete

55
Y luego haga eso para cada VM en Vagrant. Ya sabes, Vagrant funciona con varias máquinas virtuales. Entonces, solo use la solución adecuada, no la solución: a continuación, mi respuesta. Pequeño parche en Vagrant.
Michael Field

20
Puede establecer el nombre de usuario predeterminado debajo Connection > Data > Auto-login usernamey la configuración de PPK está debajoConnection > SSH > Auth > Private key for authentication
abrir

1
Si prefiere, como lo hago yo, proteger sus claves privadas con contraseñas, a la larga puede ser más fácil usar la aplicación pageant.exe al inicio, cargando su archivo ppk en ella. Luego ingrese su contraseña para el concurso una vez, y puede iniciar sesión sin tener que especificar la contraseña de ppk en el terminal de masilla cada vez.
Larry Silverman

8
Puedes usar vagrant ssh-configpara saber qué opciones darle a la masilla.
ibizaman

121

Debe parchear un código Vagrant modificando sólo un archivo, ssh.rb.

Toda la información está aquí: https://gist.github.com/2843680

vagrant ssh ahora funcionará también en Windows, al igual que en Linux.


EDITAR : en versiones más recientes esto se volvió innecesario. Todavía tiene que agregar la ruta ssh.exea su PATHvariable :

Busque ssh.exe en su computadora, copie la ruta (es decir C:\Program Files (x86)\Git\bin), abra las Preferencias del sistema, encuentre la Configuración de la variable de entorno , haga clic en la Variable de ruta, agregue la ruta, separando las rutas existentes usando ;.


1
Comente la solicitud de extracción de Github para el problema si utiliza esta solución, es hora de que se fusione. github.com/mitchellh/vagrant/pull/933
Cory Dolphin

44
Esto parece haberse fusionado hace unos tres meses. Definitivamente existe en la versión 1.2.2.
Johann

¿Sigue siendo necesario o parcheado en los últimos discos Vagrant?
Alex

2
@Alex Definitivamente está parcheado en versiones recientes de Vagrant. Lo probé y lo documenté aquí: robertpate.net/blog/2013/…
robertpateii

1
Establezca rápidamente la ruta a su git OpenSSH, abra PowerShell y ejecute: [Environment]::SetEnvironmentVariable("Path", "$env:Path;c:\Program Files (x86)\Git\bin\", "User")
Janusz Skonieczny

96

Otra opción usando binarios git:

  1. Instale git: http://git-scm.com/download/win
  2. Menú de inicio> cmd (shift + enter para ir como administrador)
  3. set PATH=%PATH%;C:\Program Files\Git\usr\bin
  4. vagrant ssh

Espero que esto ayude :)

Solo una bonificación después de meses usando eso en Windows: use la consola en lugar del terminal Win, para que siempre pueda abrir una nueva pestaña de terminal con PATH establecido (configúrelo en las opciones)


Alguien votó esta respuesta. Estaba tratando de descubrir cómo conseguí que esto funcionara, ¡ahora lo sé! Gracias
RadiantHex

Esto funcionó bien para mi. Como tengo GIT, funciona mucho más limpio y luego cambia a Putty, ya que puedes reutilizar la misma ventana de consola.
Bartvds

2
Gracias, pero ahora uso conemu . Es similar pero más flexible que la consola. Lo tengo envolviendo muchas consolas, como cmd.exe, git bash y putty con alias y otras cosas elegantes.
Bartvds

44
para Git 2.5.0 PATH debe ser "C: \ Archivos de programa \ Git \ usr \ bin".
vladimir

1
set PATH =% PATH%; C: \ Archivos de programa \ Git \ usr \ bin ¡Funciona perfecto! ¡Gracias!
v.babak

72

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

Usando putty.exe:

Masilla GUI:

HostName: 127.0.0.1
Port: 2222

Cuando te conectas (pantalla de terminal):

User: vagrant
Passwd: vagrant

Antes de intentar conectarse, verifique su VM usando cmd.exe:

 vagrant status

Si está fuera de uso:

vagrant up

1
Esto muestra perfectamente cómo no perderse en las palabras. Increíble, gracias!
appoll

31

La respuesta aceptada es realmente útil, sin embargo, puede suceder que en lugar de la siguiente clave:

%USERPROFILE%\.vagrant.d\insecure_private_key

se debe convertir una clave diferente al formato de Putty:

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

¿Dónde {vagrant_machine_root}está una carpeta con la Vagrantfilede la máquina a la que queremos conectarnos usando Putty?

Como @ibizaman mencionó, use vagrant ssh-configpara verificar qué clave usa vagabundo:

$ 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

44
Si quieres usar Putty, esta es la mejor respuesta. Tienes que convertir la clave privada correcta. ¡Muchas gracias!
johnzachary

1
Vale la pena mencionar que debe verificar el Uservalor y asegurarse de proporcionarlo a Putty en Conexión-> Datos-> Nombre de usuario de inicio de sesión automático. En mi VM, el nombre era ubuntuy había estado intentando repetidamente, y no había podido, iniciar sesión como vagrant.
2016


6

Ya sea

  1. En su cmdconsola, escriba lo siguiente:

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

O

  1. Establezca permanentemente la ruta en las variables de entorno de su sistema:

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


2

Ahora tengo una solución mucho mejor que permite una actualización sin dolor de Vagrant. Se basa en un archivo parcheado.

La primera línea de un archivo vagrant debe ser:

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

Y el archivo parcheado vagrantfile_ssh (originalmente llamado ssh.rb ) debería existir en el mismo directorio que vagrantfile . Esto es a la vez elegante y funcional.

Descargue el archivo vagrantfs_ssh parcheado .


2
  1. Instalar Git Bash (Viene con OpenSSH, así como grep, find, perl, sed, etc .;)

    Si tiene instalado Vagrant, abra appwiz.cpl(Agregar / quitar programas AKA) y Repairla instalación de Vagrant. Esto hará que vagabundo se agregue a tu ruta git-bash.

  2. Abra Git Bash (a través del menú de inicio)

  3. cd ~/vagrant/mybox a su carpeta de cajas vagabundos y vagrant ssh

2

Estaba haciendo lo sugerido anteriormente pero cambiando la variable de entorno en la línea de comando solo con PATH =% PATH%; "C: \ Archivos de programa \ git \ usr \ bin"

Esto no funcionó. Pero cuando modifiqué la variable de entorno a través de la configuración de Windows y luego comencé un nuevo símbolo del sistema, ¡funcionó la primera vez!


1

Personalmente, solo uso Cygwin . Lo que le permite usar muchos comandos comunes * nix en Windows. SSH es uno de ellos.


Tendrá que amenizar su RUTA para incluir el directorio bin de Cygwin, algo así comoset PATH=%PATH%;c:\cygwin\bin
David Soroko

1

Windows 7 (no probado en otras versiones)

  1. Haga clic derecho en "Mi PC" y haga clic en propiedades
  2. Haga clic en Configuración avanzada del sistema
  3. Haga clic en Variables de entorno
  4. En el segundo cuadro debajo de "Variables del sistema", desplácese hacia abajo y haga clic en la variable "Ruta" y haga clic en EDITAR
  5. Asegúrese de que la ruta esté incluida en el Valor de la variable agregando (un punto y coma si no está allí y) C: \ Archivos de programa (x86) \ Git \ bin; (o cualquiera que sea la ruta a su ssh.exe)
  6. OK> OK> OK y REINICIAR VENTANAS
  7. Tendrás que ejecutar vagabundo pero después de eso ssh vagabundo debería funcionar de forma permanente

Más información que podría ayudar con otras versiones ... http://www.computerhope.com/issues/ch000549.htm


1

muy simple, una vez que instale Vagrant Manager y virtual box, intente instalar cygwin en Windows, pero mientras instala cygwin, asegúrese de seleccionar el paquete SSH, el paquete VIM que permitirá que su sistema inicie sesión en su VM desde cygwin después de girar su máquina a través de vagabundo.


Esta es la mejor respuesta aquí. Cygwin te dará una terminal como bash para trabajar. ¡Increíble!
Neoraptor

1

puedes usar el emulador terminal cmder para windows.

Siga a continuación los pasos para la instalación:

  1. Acceda a cmder.net;
  2. Haga clic en Descargar completo;
  3. Abrir la cremallera
  4. (opcional) Coloque sus propios archivos ejecutables en la carpeta bin para inyectarlos en su RUTA.
  5. Ejecute Cmder (Cmder.exe)

ingrese la descripción de la imagen aquí

Terminal cmder en Windows

Ahora ejecute el comando requerido para la configuración VM vagrant, para conectar solo ejecute el comando vagrant ssh; Watch cmder ofrece cliente ssh incrustado.

Espero que esto ayude.


0

nota también: cuando aparezca el mensaje de inicio de sesión como: ingrese 'vagabundo' como nombre de usuario (sin comillas). - Snorkpete 28 de junio de 12 a 14:14

O puede ir a Categoría-> Conexión-> Rlogin y establecer el campo 'Nombre de usuario de inicio de sesión automático' en 'Vagabundo'.

Guarda la sesión.


Mejor para comprobar la salida de vagrant ssh-configasegurarse de que esto es el nombre de usuario correcto: en mi máquina virtual, ubuntu / xenial64, seubuntu
perlyking


0

Agregue las siguientes líneas a su 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

donde vagrant_rsay vagrant_rsa.pubson las claves privadas y públicas ubicadas en la carpeta actual del proyecto vagabundo (y generadas, por ejemplo, por ssh-keygen -t rsa -C "your@email.here") y openssh.ps1es:

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

que es la versión simplificada del script de configuración de openssh de joefitzgerald / packer-windows .

Ahora puedes vagrant sshentrar en el cuadro de Windows.

Para aquellos que usan vagrant-libvirt, es posible que desee reenviar algunos puertos como RDP de host a invitado. vagrant-libvirt usa ssh para el reenvío de puertos, por lo que debe configurar ssh en Windows como en las instrucciones anteriores y luego podrá reenviar puertos como:

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

No funciona para mi ¿Necesito una contraseña cuando ejecuto ssh-keygen?
Jared Beach

@JaredBeach No, no ingrese la frase de contraseña al generar la clave.
mixel 01 de

0

También me encontré con el mismo problema antes.

  1. En la carpeta de la granja, use bash init.sh.

  2. Si usted no tiene la carpeta .ssh en D:/Users/your username/, que necesita para obtener un par de claves SSH, ssh-keygen -t rsa -C "you@homestead".

  3. Editar 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. Debe usar la aplicación de escritorio git bash .

  2. Abra la aplicación de escritorio git bash. vagrant up

  3. vagrant ssh


0

Otra solución aquí, pero solo para la caja virtual de Windows 10 para probar el explorador. usuario ssh: IEUser ssh pass: Passw0rd!


0

La carpeta de instalación vagabunda contiene un ssh.exe que se comporta como ssh (1) en Linux (toma los mismos indicadores / argumentos).

Para ver todos los argumentos utilizados, puede ejecutar vagrant ssh-configo vagrant ssh --debugpara una salida más detallada.

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"

Esto es útil en situaciones donde vagrant statusdice que tu VM está en poweroffosuspended modo cuando está seguro de que realmente se está ejecutando, para forzar la conexión ssh.

Si no desea recordar / escribir el comando anterior, solo escríbalo en un vagrant.ps1archivo para que pueda ejecutarlo desde su PowerShell utilizando .\vagrant_ssh.ps1


0

Una buena alternativa a PuTTY es el emulador de terminal Mintty . Tiene más opciones configurables que PuTTY.


-1

Creo que una mejor respuesta a esta pregunta sería la siguiente:

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

Eric escribió un buen artículo sobre cómo convertir su computadora con Windows en un entorno Linux. Incluso con hacks para que Vim funcione de forma nativa en cmd.

Si ejecuta esta guía, que básicamente le permite instalar git cli, y con algunos hacks, puede abrir un símbolo del sistema y escribir vagrant ssh mientras está en la carpeta de su cuadro de vagabundo y hará las cosas correctamente, no necesita configurar las teclas ssh, etc. Todo lo que viene con ssh y el git cli / bin.

El poder de esto es que puedes ejecutar powershell y obtener toda la bondad * nix. Esto realmente simplifica su entorno y ayuda a ejecutar Vagrant y otras cosas.

TL; DR Descarga Git cli y agrega git / bin a PATH. Hackea vim.bat en / bin para que funcione en Windows. Use ssh de forma nativa en cmd.


¿Por qué se votó esto ahora? Es una solución razonable y si desea desarrollar en Windows, esta es una gran opción, mucho mejor que piratear su masilla, piratear sus otros comandos.
Mark Liu
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.