Windows에서 SSH to Vagrant box?


172

Vagrant를 사용하여 Windows에서 VirtualBox VM을 시작하고 있습니다. 다른 플랫폼에서는

$ vagrant ssh

VM에 연결합니다.

Windows에서이 Vagrant Box에 어떻게 연결합니까?

Vagrant 문서에서 PuTTy를 사용하도록 제안 된 방법도 작동하지 않았습니다.

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



11
이것은 더 이상 문제가되지 않습니다. 경로에 ssh.exe가있는 경우 (예 : c : \ Program Files \ git \ bin) 'vagrant ssh'가 작동합니다.
Omri Spector

1
참고로 방랑은 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. Windows 설치에서 기본적으로 선박 ssh.exe를 ... 그것은 나를 의아해
KCD

답변:


243

PuTTY를 사용하여 Windows7의 Vagrant 박스에 연결합니다.

당신을 확인

  • PuTTYGen을%USERPROFILE%\.vagrant.d\insecure_private_key 사용하여를 .ppk 로 변환
  • PuTTY 세션에서 .ppk 키 사용-연결> SSH> 인증> 개인 키 파일에서 구성
  • 호스트 사용 127.0.0.1
  • 22 대신 포트 2222를 사용하십시오.
  • 인증> 연결> SSH> 인증> 개인 키에서 기본 사용자 이름 (유랑)을 설정할 수

28
참고 : login as : 프롬프트가 나타나면 따옴표없이 사용자 이름으로 'vagrant'를 입력하십시오.
snorkpete

5
그런 다음 Vagrant의 모든 VM에 대해 그렇게하십시오. Vagrant는 여러 VM과 함께 작동합니다. 따라서 해결 방법이 아닌 적절한 솔루션을 사용하십시오. 아래에 내 대답이 있습니다. Vagrant의 작은 패치.
Michael Field

20
아래에서 기본 사용자 이름을 설정할 수 있으며 Connection > Data > Auto-login usernamePPK 설정은Connection > SSH > Auth > Private key for authentication
mpen

1
암호로 개인 키를 보호하려는 경우 장기적으로 ppk 파일을로드 할 때 pageant.exe 앱을 사용하는 것이 더 쉬울 수 있습니다. 그런 다음 미인 대회에 비밀번호를 한 번 입력하면 매번 퍼티 터미널에서 ppk 비밀번호를 지정하지 않고도 로그인 할 수 있습니다.
Larry Silverman

8
vagrant ssh-config퍼티에 어떤 옵션을 주어야하는지 알 수 있습니다 .
ibizaman

121

하나의 파일 만 수정하여 일부 Vagrant 코드를 패치 해야합니다 ssh.rb.

모든 정보는 여기에 있습니다 : https://gist.github.com/2843680

vagrant ssh Linux에서와 마찬가지로 Windows에서도 작동합니다.


편집 : 최신 버전에서는 이것이 불필요 해졌습니다. 여전히 변수 경로를 변수ssh.exePATH추가 해야합니다 .

컴퓨터에서 ssh.exe 를 검색 하고 경로 (예 :) 를 복사하고 C:\Program Files (x86)\Git\bin시스템 환경 설정을 열고 환경 변수 설정을 찾은 다음 경로 변수를 클릭하고 경로를 추가 하여을 사용하여 기존 경로를 분리하십시오 ;.


1
이 해결 방법을 사용하는 경우 문제에 대한 Github 풀 요청에 대해 의견을 말하십시오. github.com/mitchellh/vagrant/pull/933
Cory Dolphin

4
약 3 개월 전에 합병 된 것으로 보입니다. 버전 1.2.2에는 확실히 존재합니다.
Johann

최근 Vagrant Dists에서 이것이 여전히 필요하거나 패치되어 있습니까?
Alex

2
@Alex 최신 Vagrant 버전으로 확실히 패치되었습니다. 나는 그것을 테스트하고 여기에 문서화했다 : robertpate.net/blog/2013/…
robertpateii

1
git OpenSSH의 경로를 빠르게 설정하고 PowerShell을 열고 다음을 실행하십시오. [Environment]::SetEnvironmentVariable("Path", "$env:Path;c:\Program Files (x86)\Git\bin\", "User")
Janusz Skonieczny

96

자식 바이너리를 사용하는 또 다른 옵션 :

  1. 자식 설치 : http://git-scm.com/download/win
  2. 시작 메뉴> cmd (Shift + Enter를 눌러 관리자로 이동)
  3. set PATH=%PATH%;C:\Program Files\Git\usr\bin
  4. vagrant ssh

도움이 되었기를 바랍니다 :)

몇 달 후 Windows에서 사용하면 보너스 : Win 터미널 대신 Console을 사용하므로 PATH 세트로 새 터미널 탭을 항상 열 수 있습니다 (옵션에서 구성)


누군가이 답변을 찬성했습니다. 내가 어떻게 작동하는지 알아 내려고 노력하고 있었지만 이제는 알고 있습니다! 감사합니다
RadiantHex 2016 년

이것은 나를 위해 잘 작동했습니다. GIT을 사용하면 동일한 콘솔 창을 재사용 할 수 있기 때문에 Putty로 전환하는 것이 훨씬 깨끗합니다.
Bartvds

2
고마워,하지만 지금 conemu 사용 합니다 . 콘솔과 비슷하지만 더 유연합니다. cmd.exe, git bash 및 putty와 같은 많은 콘솔을 alliases 및 기타 멋진 것들로 포장했습니다.
Bartvds

4
Git 2.5.0의 경우 PATH는 "C : \ Program Files \ Git \ usr \ bin"이어야합니다.
vladimir

1
set PATH = % PATH %; C : \ Program Files \ Git \ usr \ bin 완벽하게 작동합니다! 감사!
v.babak

72

퍼티 다운로드 : http://www.chiark.greenend.org.uk/~sgtatham/putty/

putty.exe 사용 :

퍼티 GUI :

HostName: 127.0.0.1
Port: 2222

연결시 (터미널 화면) :

User: vagrant
Passwd: vagrant

연결하기 전에 cmd.exe를 사용하여 VM을 확인하십시오.

 vagrant status

다운 된 경우 :

vagrant up

1
이것은 말로 길을 잃지 않는 방법을 완벽하게 보여줍니다. 정말 고마워요!
appoll

31

허용 대답 은 다음과 같은 주요 대신 그 일이 일어날 수 있지만 정말 도움이 될 것입니다 :

%USERPROFILE%\.vagrant.d\insecure_private_key

다른 키를 퍼티 형식으로 변환해야합니다.

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

Putty를 사용하여 연결하려는 컴퓨터 {vagrant_machine_root}의 폴더는 어디에 있습니까 Vagrantfile?

@ibizaman이 언급했듯이 vagrant vagrant ssh-config가 사용하는 키를 확인하는 데 사용합니다.

$ 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
퍼티를 사용하려면 이것이 최선의 대답입니다. 올바른 개인 키를 변환해야합니다. 많은 감사합니다!
johnzachary

1
User값을 확인하고 연결-> 데이터-> 자동 로그인 사용자 이름으로 퍼티에 제공 해야한다는 점을 언급 할 가치가 있습니다 . 내 VM에서 이름은 ubuntu이고로 로그인을 반복적으로 시도하고 실패했습니다 vagrant.
perlyking

11

이제 다음 플러그인을 사용하여 퍼티를 사용하여 연결할 수도 있습니다.

https://github.com/nickryand/vagrant-multi-putty

그냥 실행

방랑 플러그인 설치 방랑 멀티 퍼티

putty.exe와 puttygen.exe가 PATH에 있는지 확인하십시오.

그럼 당신은 사용할 수 있습니다

방랑 퍼티

위에서 언급 한 실행 파일은 다음에서 구할 수 있습니다.

http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html


6

어느 한 쪽

  1. 당신의에서 cmd콘솔 다음을 입력 :

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

또는

  1. 시스템 환경 변수에서 경로를 영구적으로 설정하십시오.

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


2

이제 고통없는 Vagrant 업그레이드를 가능하게하는 훨씬 더 나은 솔루션이 있습니다. 패치 된 파일을 기반으로합니다.

vagrantfile의 첫 줄은 다음과 같아야합니다.

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

패치 된 vagrantfile_ssh 파일 (원본 이름은 ssh.rb )은 vagrantfile 과 동일한 디렉토리에 있어야 합니다. 이것은 우아하고 기능적입니다.

패치 된 vagrantfile_ssh를 다운로드하십시오 .


2
  1. 설치 힘내 배쉬을 (OpenSSH를 함께 제공뿐만 아니라 grep, find, perl, sed, 등;)

    Vagrant를 설치 한 경우 appwiz.cpl(AKA 프로그램 추가 / 제거) 및 Vagrant 설치를 엽니 다 Repair. 그러면 git-bash 경로에 방랑자가 추가됩니다.

  2. Git Bash 열기 (시작 메뉴를 통해)

  3. cd ~/vagrant/mybox 당신의 방랑 상자 폴더에 vagrant ssh

2

위에서 제안한대로 PATH = % PATH %; "C : \ Program files \ git \ usr \ bin"명령 줄에서만 환경 변수를 변경했습니다.

이것은 작동하지 않았다. 그러나 Windows 설정을 통해 환경 변수를 수정 한 다음 새 명령 프롬프트를 시작하면 처음으로 작동했습니다!


1

개인적으로 Cygwin 만 사용 합니다 . Windows에서 많은 일반적인 * nix 명령을 사용할 수 있습니다. SSH는 그중 하나입니다.


Cygwin bin 디렉토리를 포함 시키려면 PATH를 사용해야합니다.set PATH=%PATH%;c:\cygwin\bin
David Soroko

1

Windows 7 (다른 버전에서는 테스트되지 않음)

  1. "내 컴퓨터"를 마우스 오른쪽 버튼으로 클릭하고 속성을 클릭하십시오.
  2. 고급 시스템 설정을 클릭하십시오
  3. 환경 변수를 클릭하십시오
  4. "시스템 변수"아래의 두 번째 상자에서 아래로 스크롤하여 변수 "경로"를 클릭하고 편집을 클릭하십시오.
  5. 세미콜론 (없는 경우 세미콜론)을 추가하여 경로가 변수 값에 포함되어 있는지 확인하십시오. C : \ Program Files (x86) \ Git \ bin; (또는 ssh.exe 경로는 무엇이든)
  6. 확인> 확인> 확인 및 WINDOWS 다시 시작
  7. 당신은 유랑을 실행해야하지만 그 후 ssh는 영구적으로 작동해야합니다

다른 버전에 도움이 될 수있는 추가 정보 ... http://www.computerhope.com/issues/ch000549.htm


1

매우 간단합니다. Vagrant manager와 virtual box를 설치 한 후에는 Windows에 cygwin을 설치해보십시오. 그러나 cygwin을 설치하는 동안 시스템을 순환시킨 후 시스템이 cygwin에서 VM에 로그인 할 수 있도록하는 SSH 패키지, VIM 패키지를 선택하십시오 방랑자.


이것이 가장 좋은 대답입니다. Cygwin은 터미널과 같은 bash를 제공합니다. 대박!
Neoraptor

1

Windows 용 에뮬레이터 터미널 cmder를 사용할 수 있습니다.

아래 단계에 따라 설치하십시오 :

  1. cmder.net에 액세스하십시오.
  2. 전체 다운로드를 클릭하십시오.
  3. 압축 해제
  4. (선택 사항) 자신의 실행 파일을 PATH에 주입 할 bin 폴더에 넣습니다.
  5. Cmder (Cmder.exe) 실행

여기에 이미지 설명을 입력하십시오

Windows의 터미널 cmder

이제 VM vagrant 설정에 필요한 명령을 실행하십시오. connect는 vagrant ssh 명령 만 실행하십시오. Watch cmder는 ssh 클라이언트 내장을 제공합니다.

이게 도움이 되길 바란다.


0

참고 : login as : 프롬프트가 나타나면 따옴표없이 사용자 이름으로 'vagrant'를 입력하십시오. – Snorkpete 6 월 28 일 12시 14:14

또는 Category-> Connection-> Rlogin으로 이동하여 'Auto-login username'필드를 'Vagrant'로 설정할 수 있습니다.

세션을 저장하십시오.


베스트의 출력을 확인하는 vagrant ssh-config확인이 있도록 되어 내 VM에, 우분투 / xenial64, 그것이 : 올바른 사용자 이름ubuntu
perlyking


0

에 다음 줄을 추가하십시오 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

어디 vagrant_rsavagrant_rsa.pub현재의 방랑 프로젝트 폴더에있는 (에 의해 예를 생성 한 개인 키와 공개 키이다 ssh-keygen -t rsa -C "your@email.here")하고 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"

이것은 joefitzgerald / packer-windows openssh setup script 의 단순화 된 버전입니다 .

이제 vagrant sshWindows 상자에 들어갈 수 있습니다 .

vagrant-libvirt 를 사용 하는 사람들을 위해 RDP와 같은 일부 포트를 호스트에서 게스트로 전달할 수 있습니다. vagrant-libvirt는 포트 포워딩에 ssh를 사용 하므로 위의 지침과 같이 Windows에서 ssh를 설정하면 다음과 같은 포트를 포워딩 할 수 있습니다.

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

나를 위해 작동하지 않습니다. ssh-keygen을 실행할 때 비밀번호가 필요합니까?
Jared Beach

@JaredBeach 아니요, 키를 생성 할 때 암호를 입력하지 마십시오.
mixel

0

나는 또한 전에 같은 문제를 만났다.

  1. 홈스테드 폴더에서을 사용하십시오 bash init.sh.

  2. 에 .ssh 폴더가 없으면 D:/Users/your username/ssh 키 쌍이 필요합니다 ssh-keygen -t rsa -C "you@homestead".

  3. 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. git bash desktop app 을 사용해야 합니다 .

  2. git bash 데스크톱 앱을 엽니 다. vagrant up

  3. vagrant ssh


0

여기에 또 다른 솔루션이 있지만 탐색기를 테스트하기 위해 Windows 10의 가상 상자에만 해당합니다. ssh 사용자 : IEUser ssh 패스 : Passw0rd!


0

vagrant installation 폴더에는 Linux에서 ssh (1)처럼 동작하는 ssh.exe가 포함되어 있습니다 (같은 플래그 / 인수 사용).

사용 된 모든 인수를 보려면 더 자세한 출력을 실행 vagrant ssh-config하거나 수행 할 수 있습니다 vagrant ssh --debug.

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"

이것은 vagrant statusvm이 실제로 실행 중일 때 vm이 모드 에 poweroff있거나 suspendedssh 연결을 강제하기 위해 모드 라고 말하는 상황에 유용 합니다.

위의 명령을 기억하거나 입력하지 않으려면 vagrant.ps1파일에 작성 하여 다음을 사용하여 powershell에서 실행할 수 있습니다 .\vagrant_ssh.ps1


0

PuTTY의 좋은 대안은 Mintty 터미널 에뮬레이터입니다. PuTTY보다 구성 가능한 옵션이 더 많습니다.


-1

이 질문에 대한 더 나은 대답은 다음과 같습니다.

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

Eric은 Windows 컴퓨터를 Linux 환경으로 전환하는 방법에 대한 훌륭한 기사를 작성했습니다. Vim이 cmd에서 기본적으로 작동하도록 해킹하는 경우에도 마찬가지입니다.

이 가이드를 통해 기본적으로 git cli를 설치하고 일부 해킹을 사용하면 명령 프롬프트를 표시하고 vagrant 상자의 폴더에 vagrant ssh를 입력하면 올바르게 수행됩니다. ssh 키 등을 구성해야합니다. ssh 및 git cli / bin과 함께 제공됩니다.

이것의 장점은 실제로 powershell을 실행하고 여전히 모든 * nix 장점을 얻을 수 있다는 것입니다. 이것은 실제로 환경을 단순화하고 Vagrant와 다른 것들을 실행하는 데 도움이됩니다.

TL; DR Git cli를 다운로드하고 git / bin을 PATH에 추가하십시오. / bin에서 vim.bat를 해킹하여 Windows에서 작동합니다. cmd에서 ssh를 기본적으로 사용하십시오.


이것이 왜 지금 투표 되었습니까? 합리적인 솔루션이며 Windows에서 개발하고 싶다면 퍼티를 해킹하고 다른 명령을 해킹하는 것보다 훨씬 좋은 옵션입니다.
Mark Liu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.