【问题标题】:SSH to Vagrant box in Windows?SSH 到 Windows 中的 Vagrant 框?
【发布时间】:2012-04-10 17:20:59
【问题描述】:

我正在使用 Vagrant 在 Windows 中启动 VirtualBox VM。 在其他平台,我只能

$ vagrant ssh

连接到虚拟机。

如何在 windows 中连接到这个 Vagrant 盒子?

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

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

【问题讨论】:

标签: windows ssh virtual-machine virtualbox vagrant


【解决方案1】:

我在 Windows7 上使用 PuTTY 连接到我的 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)

【讨论】:

  • 注意:当登录为:提示出现时,输入'vagrant'作为用户名(不带引号)。
  • 然后对 Vagrant 中的每个 VM 执行此操作。你知道,Vagrant 适用于多个虚拟机。因此,只需使用正确的解决方案,而不是解决方法:下面是我的答案。 Vagrant 中的小补丁。
  • 可以在Connection > Data > Auto-login username下设置默认用户名,在Connection > SSH > Auth > Private key for authentication下设置PPK
  • 如果您喜欢像我一样使用密码保护您的私钥,从长远来看,在启动时使用 pageant.exe 应用程序可能会更容易,将您的 ppk 文件加载到其中。然后输入一次密码就可以登录了,不用每次在putty终端指定ppk密码就可以登录了。
  • 您可以使用vagrant ssh-config 来了解可以为腻子提供哪些选项。
【解决方案2】:

下载腻子: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

【讨论】:

  • 这完美地展示了如何不迷失在文字中。太棒了,谢谢!
【解决方案3】:

您必须修补一些 Vagrant 代码,只需修改一个文件 ssh.rb

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

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


编辑:在较新的版本中,这变得不必要了。你还是要add the path to your ssh.exe to your PATH Variable

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

【讨论】:

  • 如果您使用此解决方法,请在 Github 拉取请求上发表评论,是时候合并了。 github.com/mitchellh/vagrant/pull/933
  • 这似乎是在大约三个月前合并的。它肯定存在于 1.2.2 版本中。
  • 最近的 Vagrant dists 是否仍然需要或修补?
  • @Alex 它肯定已被修补到最近的 Vagrant 版本中。我对其进行了测试并在此处记录:robertpate.net/blog/2013/…
  • 快速设置 git OpenSSH 的路径,打开 PowerShell 并运行:[Environment]::SetEnvironmentVariable("Path", "$env:Path;c:\Program Files (x86)\Git\bin\", "User")
【解决方案4】:

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

vagrantfile 的第一行应该是:

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

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

下载patched vagrantfile_ssh

【讨论】:

    【解决方案5】:

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

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

    保存会话。

    【讨论】:

    • 最好检查vagrant ssh-config 的输出以确保这正确的用户名:在我的VM ubuntu/xenial64 上,它是ubuntu
    【解决方案6】:

    使用 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 上使用几个月后只是一个奖励:使用 Console 而不是 Win 终端,因此您始终可以打开一个带有 PATH 设置的新终端选项卡(在选项上配置它)

    【讨论】:

    • 有人赞成这个答案。试图弄清楚我是如何做到这一点的,现在我知道了!谢谢
    • 这对我来说很好。因为我有 GIT,所以它比切换到 Putty 更干净,因为您可以重复使用相同的控制台窗口。
    • 谢谢,但我现在使用conemu。它与控制台类似但更灵活。我用它包裹了许多控制台,比如 cmd.exe、git bash 和 putty 以及别名和其他花哨的东西。
    • 对于 Git 2.5.0 PATH 应该是“C:\Program Files\Git\usr\bin”。
    • set PATH=%PATH%;C:\Program Files\Git\usr\bin 完美运行!谢谢!
    【解决方案7】:

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

    【讨论】:

    • 您需要修改 PATH 以包含 Cygwin bin 目录,例如 set PATH=%PATH%;c:\cygwin\bin
    【解决方案8】:

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

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

    【讨论】:

    • 这对我来说是迄今为止最好的解决方案。您提供的链接自 2010 年以来未更新。mls-software.com/opensshd.html 提供了更新的版本
    【解决方案9】:
    1. 安装Git Bash(自带OpenSSH,还有grepfindperlsed等;)

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

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

    3. cd ~/vagrant/mybox 到您的 vagrant box'es 文件夹和 vagrant ssh

    【讨论】:

      【解决方案10】:

      现在您还可以使用以下插件通过 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

      【讨论】:

        【解决方案11】:

        任一

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

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

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

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

        【讨论】:

          【解决方案12】:

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

          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。

          【讨论】:

          • 为什么现在投票?这是一个合理的解决方案,如果您想在 Windows 中进行开发,这是一个不错的选择,比破解您的 putty、破解您的其他命令要好得多。
          【解决方案13】:

          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

          【讨论】:

            【解决方案14】:

            accepted answer 确实很有帮助,但它可能会发生,而不是以下键:

            %USERPROFILE%\.vagrant.d\insecure_private_key
            

            必须将不同的密钥转换为 Putty 的格式:

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

            其中{vagrant_machine_root} 是一个文件夹,其中包含我们要使用 Putty 连接的机器的 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
            

            【讨论】:

            • 如果你想使用Putty,那么这是最好的答案。您必须转换正确的私钥。非常感谢!
            • 值得一提的是,您应该检查 User 值并确保将其提供给连接->数据->自动登录用户名中的 Putty。在我的 VM 上,名称是 ubuntu,我一直在尝试以 vagrant 登录,但都失败了。
            • 这是正确的答案,事情(设置)已经改变了多年。
            【解决方案15】:

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

            要安装只从msysgit project page下载msysgit。

            并且要运行ssh.exe,只需将bin folter 包含到Windows 环境变量中,或者从Git Download page 安装git 并将msysgit bin folter 复制到C:\Program Files\Git\bin

            【讨论】:

              【解决方案16】:

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

              【讨论】:

              • 这是最好的答案。 Cygwin 会给你一个类似 bash 的终端来使用。太棒了!
              【解决方案17】:

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

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

              【讨论】:

                【解决方案18】:

                将以下行添加到您的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 用于port forwarding,因此您需要按照上述说明在 Windows 上设置 ssh,然后您将能够转发如下端口:

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

                【讨论】:

                • 不适合我。运行 ssh-keygen 时需要密码吗?
                • @JaredBeach 不,生成密钥时不要输入密码。
                【解决方案19】:

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

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

                2. 如果D:/Users/your username/中没有.ssh文件夹,则需要获取一对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

                【讨论】:

                  【解决方案20】:

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

                  【讨论】:

                    【解决方案21】:

                    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

                    【讨论】:

                      【解决方案22】:

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

                      按照以下步骤进行安装:

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

                      Windows 上的终端命令

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

                      我希望这会有所帮助。

                      【讨论】:

                        【解决方案23】:

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

                        【讨论】:

                          猜你喜欢
                          • 2018-03-02
                          • 2016-11-12
                          • 2019-07-09
                          • 2014-04-16
                          • 2016-04-09
                          • 2016-02-26
                          • 1970-01-01
                          • 2016-09-08
                          • 2012-06-07
                          相关资源
                          最近更新 更多