SSH для Vagrant в Windows?

172

Я использую Vagrant для запуска виртуальной машины VirtualBox в Windows. На других платформах я могу просто

$ vagrant ssh

подключиться к ВМ.

Как мне подключиться к этой Vagrant коробке в Windows?

Предложенный в документации Vagrant способ использования PuTTy также не работает:

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

Sathish
источник
2
Большое руководство по этому вопросу, показывающее, как использовать SSH в Vagrant box в Windows 7/8
Sliq
11
Это больше не проблема. Если у вас есть ssh.exe на вашем пути (например, c: \ Program Files \ git \ bin), тогда работает vagrant ssh.
Омри Спектор
1
К вашему сведению, 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. по умолчанию не включает ssh Ship ssh.exe в установщик Windows ... это меня озадачило
KCD

Ответы:

243

Я использую PuTTY для подключения к своим Vagrant-боксам на Windows7.

Убедись, что ты

  • преобразовать в %USERPROFILE%\.vagrant.d\insecure_private_key.ppk, используя PuTTYGen
  • используйте ключ .ppk в вашем сеансе PuTTY - настраивается в разделе Соединение> SSH> Auth> файл личного ключа
  • использовать хост 127.0.0.1
  • используйте порт 2222 вместо 22
  • Вы можете установить имя пользователя по умолчанию (vagrant) в Соединении> SSH> Аутентификация> Закрытый ключ для аутентификации
Дрор Березницкий
источник
28
обратите внимание: при появлении приглашения «Войти как:» введите «vagrant» в качестве имени пользователя (без кавычек).
snorkpete
5
И затем сделайте это для каждой виртуальной машины в Vagrant. Вы знаете, Vagrant работает с несколькими виртуальными машинами. Так что, просто используйте правильное решение, а не обходной путь: мой ответ ниже. Небольшое пятно в Vagrant.
Майкл Филд
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
121

Вы должны исправить некоторый код Vagrant, изменив только один файл ssh.rb.

Вся информация здесь: https://gist.github.com/2843680

vagrant ssh теперь будет работать и в Windows, как и в Linux.


РЕДАКТИРОВАТЬ : В более новых версиях это стало ненужным. Вам все еще нужно добавить путь ssh.exeк вашей PATHпеременной :

Найдите на своем компьютере файл ssh.exe , скопируйте путь (то есть C:\Program Files (x86)\Git\bin), откройте «Системные настройки», найдите переменную среды « Настройки», щелкните переменную пути, добавьте путь, разделяя существующие пути, используя ;.

Майкл Филд
источник
1
Пожалуйста, прокомментируйте запрос Github по запросу, если вы используете эту работу, пришло время объединить ее. github.com/mitchellh/vagrant/pull/933
Кори Дельфин,
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
96

Еще один вариант использования git binaries:

  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 (настройте ее для параметров)

gabrielhpugliese
источник
Кто-то поддержит этот ответ. Пытался выяснить, как у меня это получилось, теперь я знаю! Спасибо
RadiantHex
Это работало нормально для меня. Поскольку у меня есть GIT, он работает намного чище, чем переключение на Putty, так как вы можете просто использовать то же самое окно консоли.
Bartvds
2
Спасибо, но я сейчас пользуюсь conemu . Он похож, но более гибкий, чем Консоль. У меня есть это обертывание многих консолей, таких как cmd.exe, git bash и putty с псевдонимами и другими причудливыми вещами.
Bartvds
4
для Git 2.5.0 PATH должен быть "C: \ Program Files \ Git \ usr \ bin".
Владимир
1
set PATH =% PATH%; C: \ Program Files \ Git \ usr \ bin Работает отлично! Спасибо!
v.babak
72

Загрузите Putty: http://www.chiark.greenend.org.uk/~sgtatham/putty/

Используя putty.exe:

GUI замазки:

HostName: 127.0.0.1
Port: 2222

При подключении (экран терминала):

User: vagrant
Passwd: vagrant

Прежде чем пытаться подключиться, проверьте свою виртуальную машину с помощью cmd.exe:

 vagrant status

Если он отключен, используйте:

vagrant up
Рафаэль Горски
источник
1
Это прекрасно показывает, как не запутаться в словах. Удивительно, спасибо!
Апрель
31

Общепринятый ответ очень полезно , однако это может случиться так, что вместо следующего ключа:

%USERPROFILE%\.vagrant.d\insecure_private_key

другой ключ должен быть преобразован в формат Putty:

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

Где {vagrant_machine_root}находится папка с Vagrantfileмашиной, к которой мы хотим подключиться, используя Putty.

Как упомянул @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
begie
источник
4
Если вы хотите использовать Putty, то это лучший ответ. Вы должны преобразовать правильный закрытый ключ. Большое спасибо!
Джонзари
1
Стоит отметить, что вы должны проверить Userзначение и убедиться, что вы указали его для Putty в Connection-> Data-> Auto-login username. На моей виртуальной машине имя было, ubuntuи я неоднократно пытался, и не смог войти в систему как vagrant.
perlyking
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

camilohe
источник
6

Либо

  1. В вашей cmdконсоли введите следующее:

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

ИЛИ

  1. Постоянно установите путь в переменных среды вашей системы:

    C:\Program Files (x86)\Git\bin;
    
Крипа джаякумар
источник
4

Существует пакет OpenSSH для Windows, который по сути является урезанным Cygwin. Он имеет msi-Installer и (после установки соответствующего пути) работает с "vsagrant ssh":

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

Кристиан Вайднер
источник
Это было безусловно лучшее решение для меня. Ссылка, которую вы даете, не обновлялась с 2010 года. Более свежая версия доступна на mls-software.com/opensshd.html
icc97
2

Теперь у меня есть намного лучшее решение, которое позволяет безболезненно обновить Vagrant. Это основано на исправленном файле.

Первая строка vagrantfile должна быть:

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

И исправленный файл vagrantfile_ssh (первоначально названный ssh.rb ) должен существовать в том же каталоге, что и vagrantfile . Это одновременно элегантно и функционально.

Загрузите пропатченный vagrantfile_ssh .

Майкл Филд
источник
2
  1. Установка Git Bash (Поставляется с OpenSSH, а также grep, find, perl, sedи т.д .;)

    Если у вас установлен Vagrant, откройте appwiz.cpl(Установка и удаление программ AKA) и Repairустановите Vagrant. Это заставит vagrant добавить себя в путь к git-bash.

  2. Откройте Git Bash (через меню «Пуск»)

  3. cd ~/vagrant/mybox в папку вашего бродячего ящика и vagrant ssh
ThorSummoner
источник
2

Я делал, как предложено выше, но менял переменную среды в командной строке только с PATH =% PATH%; "C: \ Program Files \ git \ usr \ bin"

Это не сработало. Но когда я изменил переменную Environment через Windows Settings, а затем запустил новую командную строку, она сработала в первый раз!

Пол Притчард
источник
1

Лично я просто использую Cygwin . Что позволяет вам использовать многие распространенные команды * nix в Windows. SSH является одним из них.

Kiksy
источник
Вам нужно будет изменить свой PATH, чтобы включить каталог bin Cygwin, что-то вроде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. ОК> ОК> ОК и перезапустить ОКНА
  7. Вам придется запустить vagrant, но после этого vagrant ssh должен работать постоянно

Дополнительная информация, которая может помочь с другими версиями ... http://www.computerhope.com/issues/ch000549.htm

byronyasgur
источник
1

очень просто: после установки Vagrant manager и виртуального блока попробуйте установить cygwin в Windows, но при установке cygwin обязательно выберите пакет SSH, пакет VIM, который позволит вашей системе войти в виртуальную машину из cygwin после раскрутки вашей машины через бродяга.

Prashanth
источник
Это лучший ответ здесь. Cygwin предоставит вам терминал типа bash для работы. Потрясающие!
Неораптор
1

Вы можете использовать эмулятор терминала cmder для Windows.

Выполните следующие шаги для установки:

  1. Доступ к cmder.net;
  2. Нажмите в Download Full;
  3. расстегнуть молнию
  4. (необязательно) Поместите свои собственные исполняемые файлы в папку bin, чтобы вставить их в PATH.
  5. Запустите Cmder (Cmder.exe)

введите описание изображения здесь

Терминальный cmder на Windows

Теперь выполните команду, необходимую для настройки VM vagrant, для подключения только выполните команду vagrant ssh; Смотреть cmder предлагает встроенный ssh ​​клиент.

Надеюсь, это поможет.

Вандерсон Леандро де Оливейра
источник
0

обратите внимание: при появлении приглашения «Войти как:» введите «vagrant» в качестве имени пользователя (без кавычек). - Сноркете 28 июня '12 в 14:14

Или вы можете перейти в Category-> Connection-> Rlogin и установить для поля «Auto-login username» значение «Vagrant».

Сохранить сессию.

BadAlgorithm
источник
Лучше всего, чтобы проверить выход , vagrant ssh-configчтобы убедиться , что это будет правильное имя пользователя: на моей виртуальной машине, убунт / xenial64, онubuntu
perlyking
0

Я использую vagrant sshкоманду с git sshWindows 7, 8.1 и Windows 10.

Для установки скачайте только msysgit со страницы проекта msysgit .

А для запуска включите ssh.exeтолько bin folterпеременные окружения to windows или установите git со страницы загрузки Git и скопируйте msysgit bin folter в C:\Program Files\Git\bin.

Руди Алькивар
источник
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_rsaи vagrant_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 для переадресации портов, поэтому вам нужно настроить ssh в Windows, как описано в приведенных выше инструкциях, и тогда вы сможете переадресовывать порты следующим образом:

config.vm.network :forwarded_port, host: 3389, guest: 3389, id: "rdp", gateway_ports: true, host_ip: '*'
Mixel
источник
Не работает для меня Нужен ли пароль при запуске ssh-keygen?
Джаред Бич
@JaredBeach Нет, не вводите фразу-пароль при генерации ключа.
mixel
0

Я также встречал ту же проблему раньше.

  1. В папке усадьбы используйте 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

JKol
источник
0

Другое решение здесь, но только для виртуальной коробки Windows 10 для тестирования проводника. ssh пользователь: IEUser ssh pass: Passw0rd!

Gustavo
источник
0

Папка установки vagrant содержит ssh.exe, который ведет себя как ssh (1) в Linux (принимает те же флаги / аргументы).

Чтобы увидеть все используемые аргументы, вы можете запустить 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 statusваш виртуальный компьютер находится в режиме poweroffили в suspendedрежиме, когда вы уверены, что он на самом деле работает, чтобы установить соединение ssh.

Если вы не хотите запоминать / вводить указанную выше команду, просто напишите ее в vagrant.ps1файле, чтобы вы могли выполнить ее из вашего PowerShell, используя .\vagrant_ssh.ps1

rxdazn
источник
0

Хорошей альтернативой PuTTY является эмулятор терминала Mintty . Он имеет более настраиваемые параметры, чем PuTTY.

yvoloshin
источник
-1

Я думаю, что лучший ответ на этот вопрос будет следующим:

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

Эрик написал хорошую статью о том, как превратить ваш компьютер с Windows в среду Linux. Даже с помощью хаков, чтобы заставить Vim работать изначально в cmd.

Если вы ознакомитесь с этим руководством, которое в основном заставляет вас установить git cli, и с некоторыми хаки, вы можете вызвать командную строку и набрать vagrant ssh, находясь в папке вашего vagrant, и оно будет правильно делать правильные вещи, нет необходимо настроить ключи ssh и т. д. Все, что поставляется с ssh и git cli / bin.

Сила этого в том, что вы можете запустить PowerShell и при этом получить все преимущества * nix. Это действительно упрощает вашу среду и помогает запускать Vagrant и другие вещи.

TL; DR Загрузите Git cli и добавьте git / bin в PATH. Взломайте vim.bat в / bin для работы на windows. Используйте SSH изначально в CMD.

Марк Лю
источник
Почему за это проголосовали сейчас? Это разумное решение, и если вы хотите разрабатывать в Windows, это отличный вариант, гораздо лучше, чем взлом вашей замазки, взлом других ваших команд.
Марк Лю