SSH到Windows中的Vagrant框?


172

我正在使用Vagrant在Windows中启动VirtualBox VM。在其他平台上,我可以

$ vagrant ssh

连接到VM。

我该如何在Windows中连接到这个Vagrant盒子?

Vagrant文​​档中建议的使用PuTTy的方法也无效:

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


2
这方面的大型教程,介绍了如何在Windows 7/8中SSH进入Vagrant盒
Sliq 2013年

11
这不再是问题。如果您的路径中包含ssh.exe(例如c:\ Program Files \ git \ bin),则“ vagrant ssh”有效。
Omri Spector 2014年

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. 在Windows安装程序中默认不包含ssh Ship ssh.exe ...这让我感到困惑
KCD

Answers:


243

我使用PuTTY连接到Windows7上的“ Vagrant”框。

确保你

  • %USERPROFILE%\.vagrant.d\insecure_private_key使用PuTTYGen转换为.ppk
  • 在PuTTY会话中使用.ppk密钥-在连接> SSH>身份验证>私钥文件中配置
  • 使用主机 127.0.0.1
  • 使用端口2222而不是22
  • 您可以在“连接”>“ SSH”>“身份验证”>“用于身份验证的私钥”下设置默认用户名(无用)

28
还要注意:当登录为:提示符出现时,输入“ vagrant”作为用户名(不带引号)。
snorkpete 2012年

5
然后针对Vagrant中的每个VM执行此操作。您知道,Vagrant可与多个VM配合使用。因此,只使用适当的解决方案,而不是解决方法:下面是我的答案。Vagrant中的小补丁。
Michael Field

20
您可以在下设置默认用户名,Connection > Data > Auto-login username而PPK设置在下Connection > SSH > Auth > Private key for authentication
mpen

1
如果您愿意像我一样使用密码保护私钥,从长远来看,在启动时使用pageant.exe应用程序,将ppk文件加载到其中可能会更容易。然后,您只需输入一次用于选美的密码即可登录,而不必每次在腻子终端中指定ppk密码。
拉里·西尔弗曼

8
您可以vagrant ssh-config用来了解给腻子提供哪些选择。
ibizaman 2014年

121

您只能通过修改一个文件来修补一些Vagrant代码ssh.rb

所有信息都在这里:https : //gist.github.com/2843680

vagrant ssh 现在也将在Windows中工作,就像在Linux中一样。


编辑:在较新的版本中,这变得不必要。您仍然必须将路径添加ssh.exePATHVariable中

在计算机上搜索ssh.exe,复制路径(即C:\Program Files (x86)\Git\bin),打开系统偏好设置,找到环境变量设置,单击路径变量,添加路径,使用分隔现有路径;


1
如果您使用此解决方法,请在Github请求请求上发表评论,因为它已经合并了。github.com/mitchellh/vagrant/pull/933
Cory Dolphin

4
这似乎已在三个月前合并。它绝对存在于版本1.2.2中。
约翰

最近的Vagrant发行人仍然需要或修补此消息吗?
亚历克斯

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 2015年

96

使用git binaries的另一种选择:

  1. 安装git:http : //git-scm.com/download/win
  2. 开始菜单> cmd(按Shift +进入以管理员身份进入)
  3. set PATH=%PATH%;C:\Program Files\Git\usr\bin
  4. vagrant ssh

希望这可以帮助 :)

在Windows上使用该功能几个月后仅获得一笔红利:使用控制台而不是Win终端,因此您始终可以打开一个新的终端选项卡,并设置PATH(在选项上对其进行配置)


有人支持这个答案。我现在想知道我是如何工作的!谢谢
RadiantHex13 2013年

这对我来说很好。由于我拥有GIT,因此可以更干净地工作,然后切换到Putty,因为您可以重复使用同一控制台窗口。
Bartvds

2
谢谢,但是我现在使用conumu。与Console类似,但更灵活。我有很多控制台,例如cmd.exe,git bash和腻子,以及蒜末和其他花哨的东西。
Bartvds

4
对于Git 2.5.0,PATH应该为“ C:\ Program Files \ Git \ usr \ bin”。
vladimir 2015年

1
set PATH =%PATH%; C:\ Program Files \ Git \ usr \ bin完美运行!谢谢!
v.babak '16


31

接受的答案是真正有用但它可能发生,而不是下面的键:

%USERPROFILE%\.vagrant.d\insecure_private_key

必须将其他密钥转换为Putty的格式:

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

我们要使用Putty连接到的计算机{vagrant_machine_root}的文件夹在哪里Vagrantfile

正如@ibizaman提到的,用于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 2016年

1
值得一提的是,您应该检查该User值,并确保将其提供给Connection-> Data-> Auto-login用户名中的Putty。在我的VM上,这个名字是ubuntu,我一直反复尝试并且失败,以vagrant
2016年


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. 安装GIT中击(在OpenSSH配,以及grepfindperlsed等;)

    如果您已安装Vagrant,请打开appwiz.cpl(又名“添加/删除程序”)并Repair安装Vagrant。这将使无业游民将自己添加到您的git-bash路径中。

  2. 打开Git Bash(通过开始菜单)

  3. cd ~/vagrant/mybox 到您的无业游民框的文件夹中, vagrant ssh

2

我按照上面的建议进行操作,但仅在命令行上使用PATH =%PATH%;“ C:\ Program Files \ git \ usr \ bin”更改了环境变量

这没有用。但是,当我通过Windows设置修改Environment变量,然后启动新命令提示符时,它第一次起作用!


1

就个人而言,我只是使用Cygwin。这使您可以在Windows中使用许多常见的* nix命令。SSH是其中之一。


您需要修改PATH才能包含Cygwin bin目录,例如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. OK> OK> OK,然后重新启动Windows
  7. 您必须先运行无业游民,但在那之后无业游民的ssh应该可以永久运行

更多信息可能对其他版本有帮助... http://www.computerhope.com/issues/ch000549.htm


1

非常简单,一旦您安装了Vagrant Manager和Virtual Box,请尝试在Windows上安装cygwin,但是在安装cygwin时,请确保选择SSH程序包,即VIM程序包,它将使您的系统在通过旋转计算机后从cygwin登录到VM。流浪汉。


这是最好的答案。Cygwin将为您提供类似bash的终端。太棒了!
Neoraptor

1

您可以将仿真器终端cmder用于Windows。

请按照以下步骤进行安装:

  1. 访问cmder.net;
  2. 单击下载完整;
  3. 解压缩
  4. (可选)将您自己的可执行文件放入bin文件夹中,以注入到PATH中。
  5. 运行Cmder(Cmder.exe)

在此处输入图片说明

Windows上的终端cmder

现在,执行设置VM vagrant所需的命令,对于connect,仅执行命令vagrant ssh;Watch cmder提供嵌入式ssh客户端。

我希望这有帮助。


0

还要注意:当登录为:提示符出现时,输入“ vagrant”作为用户名(不带引号)。– Snorkpete 2012年6月28日14:14

或者,您可以转到Category-> Connection-> Rlogin并将“自动登录用户名”字段设置为“ Vagrant”。

保存会话。


最好检查一下输出,vagrant ssh-config以确保这正确的用户名:在我的VM上,ubuntu / xenial64是ubuntu
处死


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是位于当前vagrant项目文件夹中的私钥和公钥(例如由生成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设置脚本的简化版本。

现在您可以vagrant ssh进入Windows框。

对于那些使用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 '04

0

我之前也遇到过同样的问题。

  1. 在homestead文件夹中,使用bash init.sh

  2. 如果您没有.ssh文件夹D:/Users/your username/,则需要获取一对ssh密钥ssh-keygen -t rsa -C "you@homestead"

  3. 编辑Homestead.yaml(家园/), 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桌面应用程序

  2. 打开git bash桌面应用程序。 vagrant up

  3. vagrant ssh


0

此处的另一种解决方案,但仅适用于Windows 10虚拟盒以测试资源管理器。ssh用户:IEUser ssh pass:Passw0rd!


0

vagrant安装文件夹包含一个ssh.exe,其行为类似于linux上的ssh(1)(具有相同的标志/参数)。

要查看使用的所有参数,可以运行vagrant ssh-configvagrant 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 status您的虚拟机正在运行时,如果说您的虚拟机处于poweroffsuspended模式,以强制ssh连接,这很有用。

如果您不想记住/键入上面的命令,只需将其写入vagrant.ps1文件中,以便可以使用以下命令从Powershell中执行该 命令.\vagrant_ssh.ps1



-1

我认为对这个问题的更好回答是:

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

埃里克(Eric)写了一篇很好的文章,介绍如何将Windows计算机变成Linux环境。即使有了黑客手段,也可以使Vim在cmd中原生运行。

如果您通读了本指南,该指南基本上可以帮助您安装git cli,并且有一些技巧,那么您可以在流浪汉框的文件夹中弹出命令提示符并键入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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.