SSH para caixa Vagrant no Windows?


172

Estou usando o Vagrant para iniciar uma VM do VirtualBox no Windows. Em outras plataformas, eu posso apenas

$ vagrant ssh

para se conectar à VM.

Como faço para conectar-me a esta caixa do Vagrant no Windows?

A maneira sugerida na documentação do Vagrant para usar o PuTTy também não funcionou:

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


2

11
Isso não é mais um problema. Se você tiver o ssh.exe no seu caminho (por exemplo, c: \ Arquivos de Programas \ git \ bin), o 'vagrant ssh' funcionará.
Omri Spector

1
FYI Vagrant não inclui 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. ssh.exe Navio por padrão no instalador do Windows ... que me intrigou
KCD

Respostas:


243

Eu uso o PuTTY para conectar-me às minhas caixas do Vagrant no Windows7.

Assegure-se de que você

  • converta o %USERPROFILE%\.vagrant.d\insecure_private_keyarquivo em .ppk usando PuTTYGen
  • use a chave .ppk na sua sessão PuTTY - configurada em Connection> SSH> Auth> Private key file
  • usar host 127.0.0.1
  • use a porta 2222 em vez de 22
  • você pode definir o nome de usuário padrão (vagrant) em Connection> SSH> Auth> Private key for authentication

28
observe também: quando o prompt de login como: aparecer, digite 'vagrant' como o nome do usuário (sem aspas).
snorkpete

5
E faça isso para todas as VMs no Vagrant. Você sabe, o Vagrant trabalha com várias VMs. Portanto, basta usar a solução adequada, não a solução alternativa: aqui está a minha resposta. Remendo pequeno em Vagrant.
Michael Campo

20
Você pode definir o nome de usuário padrão sob Connection > Data > Auto-login usernameeo cenário PPK está sobConnection > SSH > Auth > Private key for authentication
MPEN

1
Se você preferir, como eu, proteger suas chaves privadas com senhas, pode ser mais fácil, a longo prazo, usar o aplicativo pageant.exe na inicialização, carregando o arquivo ppk nele. Depois, você digita sua senha para o concurso uma vez e pode efetuar login sem precisar especificar a senha ppk no terminal putty todas as vezes.
Larry Silverman

8
Você pode usar vagrant ssh-configpara saber quais opções dar à massa.
ibizaman 8/09/14

121

Você deve corrigir algum código do Vagrant modificando apenas um arquivo ssh.rb,.

Toda a informação está aqui: https://gist.github.com/2843680

vagrant ssh agora também funcionará no Windows, assim como no Linux.


EDIT : Nas versões mais recentes, isso se tornou desnecessário. Você ainda precisa adicionar o caminho ao seu ssh.exena sua PATHvariável :

Pesquise ssh.exe no seu computador, copie o Caminho (ie C:\Program Files (x86)\Git\bin), abra Preferências do Sistema, encontre as Configurações da variável de ambiente , clique na Variável do caminho, adicione o caminho, separando os caminhos existentes usando ;.


1
Comente a solicitação de recebimento do Github para o problema, se você usar esta solução alternativa, é hora de ela ser mesclada. github.com/mitchellh/vagrant/pull/933
Cory Dolphin

4
Parece que foi mesclado cerca de três meses atrás. Definitivamente existe na versão 1.2.2.
Johann

Isso ainda é necessário ou corrigido nos discos recentes do Vagrant?
1028 Alex

2
@Alex É definitivamente corrigido nas versões recentes do Vagrant. Eu testei e documentei aqui: robertpate.net/blog/2013/…
robertpateii

1
Defina rapidamente o caminho para o git OpenSSH, abra o PowerShell e execute: [Environment]::SetEnvironmentVariable("Path", "$env:Path;c:\Program Files (x86)\Git\bin\", "User")
Janusz Skonieczny

96

Outra opção usando binários git:

  1. Instale o git: http://git-scm.com/download/win
  2. Menu Iniciar> cmd (Shift + Enter para ir como Administrador)
  3. set PATH=%PATH%;C:\Program Files\Git\usr\bin
  4. vagrant ssh

Espero que isto ajude :)

Apenas um bônus depois de meses usando isso no Windows: use o Console em vez do terminal Win, para que você sempre possa abrir uma nova guia do terminal com o PATH definido (configure-o nas opções)


Alguém votou esta resposta. Estava tentando descobrir como consegui isso, agora eu sei! Graças
RadiantHex

Isso funcionou bem pra mim. Como eu tenho o GIT, ele funciona muito mais limpo do que mudar para o Putty, já que você pode reutilizar a mesma janela do console.
Bartvds

2
Obrigado, mas agora eu uso o conemu . É semelhante, mas mais flexível que o console. Eu tenho que envolver muitos consoles, como cmd.exe, git bash e putty com aliases e outras coisas sofisticadas.
Bartvds

4
para o Git 2.5.0 PATH deve ser "C: \ Arquivos de Programas \ Git \ usr \ bin".
vladimir

1
set PATH =% PATH%; C: \ Arquivos de Programas \ Git \ usr \ bin Funcionando perfeitamente! Obrigado!
precisa saber é

72

Faça o download do Putty: http://www.chiark.greenend.org.uk/~sgtatham/putty/

Usando putty.exe:

GUI do Putty:

HostName: 127.0.0.1
Port: 2222

Quando você se conecta (tela do terminal):

User: vagrant
Passwd: vagrant

Antes de tentar se conectar, verifique sua VM usando o cmd.exe:

 vagrant status

Se estiver inativo, use:

vagrant up

1
Isso mostra perfeitamente como não se perder em palavras. Incrível, obrigado!
Appoll

31

A resposta aceita é realmente útil, no entanto, pode acontecer que, em vez da seguinte chave:

%USERPROFILE%\.vagrant.d\insecure_private_key

uma chave diferente deve ser convertida para o formato do Putty:

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

Onde {vagrant_machine_root}está uma pasta com a Vagrantfilemáquina que queremos conectar usando Putty.

Como @ibizaman mencionou, use vagrant ssh-configpara verificar qual chave é usada pelo 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 você deseja usar o Putty, esta é a melhor resposta. Você precisa converter a chave privada correta. Muito Obrigado!
johnzachary

1
Vale ressaltar que você deve verificar o Uservalor e certificar-se de fornecê-lo ao Putty em Conexão-> Dados-> Nome de usuário com login automático. Na minha VM, o nome era ubuntue eu estava tentando e falhando repetidamente como logon vagrant.
perlyking


6

Ou

  1. No seu cmdconsole, digite o seguinte:

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

OU

  1. Defina permanentemente o caminho nas variáveis ​​de ambiente do seu sistema:

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


2

Agora eu tenho uma solução muito melhor que permite a atualização indolor do Vagrant. É baseado no arquivo corrigido.

A primeira linha de um arquivo vagrant deve ser:

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

E o arquivo corrigido vagrantfile_ssh (originalmente chamado ssh.rb ) deve existir no mesmo diretório que o arquivo vagrant . Isso é elegante e funcional.

Faça o download do arquivo vagrantfile_ssh corrigido .


2
  1. Instalar GIT Bash (Vem com OpenSSH, bem como grep, find, perl, sed, etc .;)

    Se você tiver o Vagrant instalado, abra appwiz.cpl(AKA Adicionar / Remover Programas) e Repaira instalação do Vagrant. Isso fará com que o vagrant se adicione ao seu caminho do git-bash.

  2. Abra o Git Bash (através do menu Iniciar)

  3. cd ~/vagrant/mybox para a pasta vagrant box'es e vagrant ssh

2

Eu estava fazendo como sugerido acima, mas alterando a variável de ambiente na linha de comando apenas com PATH =% PATH%; "C: \ Arquivos de programas \ git \ usr \ bin"

Isso não funcionou. Mas quando alterei a variável de ambiente através das Configurações do Windows e iniciei um novo prompt de comando, ele funcionou pela primeira vez!


1

Pessoalmente, eu apenas uso Cygwin . O que permite que você use muitos comandos * nix comuns no Windows. SSH sendo um deles.


Você precisará Amém seu PATH para incluir o Cygwin bin, algo comoset PATH=%PATH%;c:\cygwin\bin
David Soroko

1

Windows 7 (não testado em outras versões)

  1. Clique com o botão direito em "Meu Computador" e clique em Propriedades
  2. Clique em Configurações avançadas do sistema
  3. Clique em Variáveis ​​de ambiente
  4. Na segunda caixa, em "Variáveis ​​do sistema", role para baixo e clique na variável "Caminho" e clique em Editar
  5. Certifique-se de que o caminho seja incluído no valor variável, anexando (um ponto-e-vírgula se não estiver lá e) C: \ Arquivos de Programas (x86) \ Git \ bin; (ou qualquer que seja o caminho para o seu ssh.exe)
  6. OK> OK> OK e reinicie o Windows
  7. Você terá que ficar vagabundo, mas depois disso, o ssh vagrant deve funcionar permanentemente

Mais informações que podem ajudar com outras versões ... http://www.computerhope.com/issues/ch000549.htm


1

muito simples, depois de instalar o gerenciador Vagrant e a caixa virtual, tente instalar o cygwin no Windows, mas enquanto instala o cygwin, selecione o pacote SSH, pacote VIM, que permitirá que seu sistema efetue login na sua VM a partir do cygwin depois de girar sua máquina através vagabundo.


Esta é a melhor resposta aqui. Cygwin lhe dará um terminal semelhante ao bash para trabalhar. Impressionante!
Neoraptor

1

você pode usar o cmder terminal do emulador para windows.

Siga as etapas abaixo para instalação:

  1. Acesse cmder.net;
  2. Clique em Download completo;
  3. Descompactar
  4. (opcional) Coloque seus próprios arquivos executáveis ​​na pasta bin a serem injetados no seu PATH.
  5. Executar Cmder (Cmder.exe)

insira a descrição da imagem aqui

Cmder do terminal no Windows

Agora execute o comando necessário para as configurações VM vagrant; para conectar, execute apenas o comando vagrant ssh; Assista cmder oferece cliente ssh incorporado.

Eu espero que isso ajude.


0

observe também: quando o prompt de login como: aparecer, digite 'vagrant' como o nome do usuário (sem aspas). #: 30512 Snorkpete às 14:14

Ou você pode ir em Categoria-> Conexão-> Rlogin e defina o campo 'Nome de usuário com login automático' como 'Vagrant'.

Salve a sessão.


Melhor para verificar a saída de vagrant ssh-configpara garantir que este é o nome de usuário correto: no meu VM, ubuntu / xenial64, foiubuntu
perlyking


0

Adicione as seguintes linhas ao seu 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

onde vagrant_rsae vagrant_rsa.pubsão as chaves públicas e privadas localizadas na pasta do projeto atual vagrant (e geradas, por exemplo, por ssh-keygen -t rsa -C "your@email.here") e openssh.ps1são:

$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 é uma versão simplificada do script de instalação joefitzgerald / packer-windows openssh .

Agora você pode vagrant sshentrar na caixa do Windows.

Para aqueles que usam o vagrant-libvirt, é possível encaminhar algumas portas como o RDP de host para convidado. O vagrant-libvirt usa ssh para encaminhamento de porta, então você precisa configurar o ssh no Windows, como nas instruções acima, e então poderá encaminhar portas como:

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

Não está trabalhando para mim. Preciso de uma senha ao executar o ssh-keygen?
Jared Beach

@JaredBeach Não, não digite a senha ao gerar a chave.
mixel

0

Eu também encontrei o mesmo problema antes.

  1. Na pasta do homestead, use bash init.sh.

  2. Se você não tiver a pasta .ssh D:/Users/your username/, precisará obter um par de chaves ssh ssh-keygen -t rsa -C "you@homestead",.

  3. Edite 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. Você precisa usar o aplicativo de desktop git bash .

  2. Abra o aplicativo de desktop git bash. vagrant up

  3. vagrant ssh


0

Outra solução aqui, mas apenas para a caixa virtual do Windows 10 para testar o Explorer. usuário ssh: IEUser ssh pass: Passw0rd!


0

A pasta de instalação do vagrant contém um ssh.exe que se comporta como ssh (1) no linux (usa os mesmos sinalizadores / argumentos).

Para ver todos os argumentos usados, você pode executar vagrant ssh-configou vagrant ssh --debugobter uma saída mais detalhada.

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"

Isso é útil em situações em que vagrant statusdiz que sua vm está no modo poweroffou suspendedquando você tem certeza de que está realmente executando, para forçar a conexão ssh.

Se você não quiser lembrar / digitar o comando acima, basta escrevê-lo em um vagrant.ps1arquivo para que você possa executá-lo a partir do seu PowerShell usando .\vagrant_ssh.ps1


0

Uma boa alternativa ao PuTTY é o emulador de terminal Mintty . Possui mais opções configuráveis ​​que o PuTTY.


-1

Eu acho que uma resposta melhor para esta pergunta seria a seguinte:

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

Eric escreveu um bom artigo sobre como transformar seu computador Windows em um ambiente Linux. Mesmo com hacks para que o Vim funcione nativamente no cmd.

Se você ler este guia, que basicamente faz com que você instale o git cli, e com alguns hacks, você poderá abrir um prompt de comando e digitar vagrant ssh enquanto estiver na pasta da sua caixa vagrant e ele fará as coisas certas corretamente, não precisa configurar as teclas ssh, etc. Tudo o que vem com o ssh e o git cli / bin.

O poder disso é que você pode realmente executar o PowerShell e ainda obter toda a bondade * nix. Isso realmente simplifica seu ambiente e ajuda na execução do Vagrant e outras coisas.

TL; DR Faça o download do Git cli e adicione git / bin ao PATH. Hackeie o vim.bat em / bin para trabalhar com o Windows. Use ssh nativamente no cmd.


Por que isso foi votado agora? É uma solução razoável e, se você deseja desenvolver no Windows, é uma ótima opção, muito melhor do que invadir sua massa, invadir seus outros comandos.
Mark Liu
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.