171

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

$ vagrant ssh

连接到虚拟机。

我如何在 Windows 中连接到这个 Vagrant 框?

Vagrant 文档中建议的使用 PuTTy 的方式也不起作用:

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

4

23 回答 23

245

我使用 PuTTY 连接到我在 Windows7 上的 Vagrant 盒子。

确保你

  • 使用PuTTYGen将其转换%USERPROFILE%\.vagrant.d\insecure_private_key为 .ppk
  • 在您的 PuTTY 会话中使用 .ppk 密钥 - 在 Connection > SSH > Auth > Private key file 中配置
  • 使用主机127.0.0.1
  • 使用端口 2222 而不是 22
  • 您可以在 Connection > SSH > Auth > Private key for authentication 下设置默认用户名(vagrant)
于 2012-03-29T11:06:45.870 回答
122

您必须通过仅修改一个文件来修补一些 Vagrant 代码,ssh.rb.

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

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


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

在你的电脑上搜索ssh.exeC:\Program Files (x86)\Git\bin ,复制路径(即),打开系统偏好设置,找到环境变量设置,点击路径变量,添加路径,使用分隔现有路径;

于 2012-11-20T21:46:43.727 回答
96

使用 git 二进制文件的另一个选项:

  1. 安装git: 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 终端,因此您始终可以打开一个带有 PATH 设置的新终端选项卡(在选项上配置它)

于 2013-04-27T02:30:18.020 回答
72

下载腻子: http: //www.chiark.greenend.org.uk/~sgtatham/putty/

使用 putty.exe:

腻子图形用户界面:

HostName: 127.0.0.1
Port: 2222

连接时(终端屏幕):

User: vagrant
Passwd: vagrant

在尝试连接之前,请使用 cmd.exe 验证您的 VM:

 vagrant status

如果它是下来使用:

vagrant up
于 2012-10-08T21:09:14.033 回答
33

接受的答案确实很有帮助,但是可能会发生,而不是以下键:

%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 使用的密钥:

$ 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
于 2015-01-30T20:53:20.640 回答
11

现在您还可以使用以下插件使用 putty 进行连接:

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

只需执行

vagrant 插件安装 vagrant-multi-putty

并确保 putty.exe 和 puttygen.exe 在您的 PATH 中

然后你就可以使用

流浪腻子

上述可执行文件可从以下位置获得:

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

于 2014-08-19T22:59:48.703 回答
7

任何一个

  1. 在您的cmd控制台中键入以下内容:

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

或者

  1. 在系统的环境变量中永久设置路径:

    C:\Program Files (x86)\Git\bin;
    
于 2014-10-24T18:42:20.433 回答
4

有一个适用于 Windows 的 OpenSSH 包,它基本上是一个精简的 Cygwin。它有一个 msi-Installer 并且(在相应地设置路径之后)与“vsagrant ssh”一起使用:

http://sourceforge.net/projects/opensshwindows/?source=directory

于 2014-07-17T07:40:58.443 回答
2

现在我有了一个更好的解决方案,可以实现无痛的 Vagrant 升级。它基于补丁文件。

vagrantfile 的第一行应该是:

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

并且修补后的vagrantfile_ssh文件(最初名为ssh.rb )应该与vagrantfile存在于同一目录中。这既优雅又实用。

下载已修补的 vagrantfile_ssh

于 2013-01-15T15:17:42.780 回答
2
  1. 安装Git Bash(OpenSSH 自带,以及grep, find, perl, sed, 等;)

    如果您安装了 Vagrant,请打开appwiz.cpl(AKA 添加/删除程序)和RepairVagrant 安装。这将使 vagrant 添加到您的 git-bash 路径中。

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

  3. cd ~/vagrant/mybox到您的 vagrant box'es 文件夹和vagrant ssh
于 2014-08-08T19:36:22.443 回答
2

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

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

于 2016-11-23T08:16:42.857 回答
1

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

于 2013-07-29T10:51:13.627 回答
1

Windows 7(未在其他版本上测试)

  1. 右键单击“我的电脑”,然后单击属性
  2. 单击高级系统设置
  3. 单击环境变量
  4. 在“系统变量”下的第二个框中向下滚动并单击变量“路径”并单击编辑
  5. 通过附加(如果不存在分号和)C:\Program Files (x86)\Git\bin;确保路径包含在变量值中 (或者你的 ssh.exe 的路径)
  6. 确定 > 确定 > 确定并重新启动 WINDOWS
  7. 您必须运行 vagrant ,但之后 vagrant ssh 应该可以永久运行

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

于 2015-01-20T02:13:34.643 回答
1

非常简单,一旦你安装了 Vagrant 管理器和虚拟机,尝试在 windows 上安装 cygwin,但是在安装 cygwin 时,确保选择 SSH 包,VIM 包,这将使你的系统在启动你的机器后从 cygwin 登录到你的虚拟机通过流浪汉。

于 2016-09-26T05:49:03.253 回答
1

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您的虚拟机处于poweroff或模式中,这很有用,以强制 ssh 连接。suspended

如果您不想记住/键入上述命令,只需将其写入vagrant.ps1文件中,以便您可以使用 powershell 执行它 .\vagrant_ssh.ps1

于 2017-11-21T15:49:00.237 回答
1

您可以使用模拟器终端cmder for windows。

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

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

在此处输入图像描述

Windows上的终端cmder

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

我希望这有帮助。

于 2018-07-12T17:40:29.677 回答
0

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

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

保存会话。

于 2013-02-14T17:56:57.637 回答
0

我在 Windows 7、8.1 和 Windows 10 上使用vagrant ssh命令。git ssh

要安装仅从msysgit 项目页面下载 msysgit 。

并且运行ssh.exe只包括bin folter到 windows 环境变量或从Git 下载页面安装 git并复制msysgit bin folterC:\Program Files\Git\bin.

于 2015-12-26T03:03:47.760 回答
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 setup script的简化版本。

现在您可以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: '*'
于 2017-03-09T01:03:22.423 回答
0

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

  1. 在 homestead 文件夹中,使用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 桌面应用程序

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

  3. vagrant ssh

于 2017-05-04T23:42:49.970 回答
0

这里的另一个解决方案,但仅适用于 Windows 10 的虚拟框来测试资源管理器。ssh 用户:IEUser ssh pass:Passw0rd!

于 2017-06-05T12:24:59.307 回答
0

PuTTY 的一个很好的替代品是Mintty终端仿真器。它比 PuTTY 有更多的可配置选项。

于 2019-11-06T15:13:11.810 回答
-1

我认为这个问题的更好答案如下:

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

Eric 写了一篇关于如何将 Windows 计算机变成 Linux 环境的好文章。即使有让 Vim 在 cmd 中本地工作的技巧。

如果您浏览本指南,基本上可以让您安装 git cli,并且通过一些技巧,您可以在 vagrant box 的文件夹中打开命令提示符并键入 vagrant ssh ,它会正确地做正确的事情,不需要配置 ssh 密钥等。所有这些都带有 ssh 和 git cli /bin。

这样做的好处是您可以实际运行 powershell 并仍然获得所有 *nix 优点。这确实简化了您的环境并有助于运行 Vagrant 和其他东西。

TL;DR 下载 Git cli 并将 git/bin 添加到 PATH。在 /bin 中破解 vim.bat 以适用于 Windows。在 cmd 中本机使用 ssh。

于 2014-11-11T16:01:53.987 回答