SSH с использованием перенаправления агентов с ОС Windows, Vagrant Ubuntu Guest OS и Keepass/Keeagent

Намерение: иметь возможность развернуть в lan-example.com из любой среды разработки; будь то напрямую из виртуальной ОС или любой системы с одной ОС, или даже через Интернет, используя ОДИН ключ SSH, хранящийся в Keepass. В настоящее время я не могу сделать это из ОС Vagrant, если я не сгенерировал явно свой собственный ключ и не авторизовал его на каждом из моих серверов развертывания. Я полагаю, что способ сделать то, что я хочу, - это перенаправление пользовательских агентов, да?


ОС хоста

  • Windows 7 x64
  • Ключ SSH, сгенерированный puttygen: C:\Users\Administrator\.ssh\id_rsa.ppk
  • Keepass с Keeagent хранит мой ключ SSH. Keeagent установлен в режим "Агент"
  • pageant.exe установлен, но не запущен
  • Если я хочу подключиться к внешним / внутренним серверам локальной сети с помощью моего ключа, Putty обращается к Keeagent - Putty не сохраняет местоположения закрытого ключа в своей конфигурации.

C: \ Users \ Administrator.ssh \ Config

Host 192.168.55.2
  ForwardAgent yes

Vagrantfile

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.network :private_network, ip: '192.168.55.2'
  config.ssh.forward_agent = true
  # Why would I need to set this if Keeagent is handling things?
  config.ssh.private_key_path = '~/.ssh/id_rsa_jake_mitchell.ppk'
end

Гостевая ОС (Vagrant)

  • Ubuntu x64
  • 192.168.55.2, доступно только через хост
  • В SSH нет ключей /home/vagrant/.ssh (Я их убрал). Цель состоит в том, чтобы позволить User Agent Forwarding через хост-ОС (Keeagent) позаботиться об использовании ключа.

LAN Web Host (интранет-сайты)

  • Скажем, его домен lan-example.com
  • Это позволяет SSH вход без пароля только с использованием открытого ключа id_rsa.ppk
  • 192.168.0.2
  • Переадресация агента пользователя включена в sshd

Проблема:

Что работает (используя Host OS): Putty, подключение к lan-example.com без необходимости явно ссылаться на ключ SSH.

Что не работает (с использованием гостевой ОС): ssh -v web-server@lan-example.com поскольку это показывает, что нет никаких ключей для использования.

Я заметил кое-что о бета-версии Keeagent, которая позволяет мне устанавливать SSH_AUTH_SOCK. Я сделал это и настроил общий ресурс NFS, который позволяет гостевой ОС читать файл; Однако это ничего не меняет. Как переадресация агентов работает даже в такой среде? Чем отличается Windows от этой ошибки?

1 ответ

Решение

Совместное использование файла сокета через сетевую файловую систему не будет работать, так как сокет Windows и сокет Linux - совершенно разные звери - Linux внутри ВМ не знает, как использовать сокеты Windows. Чтобы виртуальная машина могла использовать агент аутентификации на хосте, необходимо включить переадресацию агента как на клиенте ssh, так и на сервере, затем ssh в ВМ через хост (не напрямую входить в консоль ВМ).

Предполагая, что:

  1. Настройка переадресации агента сервера SSH выполнена, согласно оригинальному сообщению (я не использовал Vagrant, поэтому не могу сказать);
  2. Настройка Keeagent завершена и работает (я пробовал режим клиента, но есть некоторые проблемы, связанные с ключами не-RSA/DSA, поэтому режим агента более безопасен);

Под putty настройка профиля, отметьте опцию "Разрешить переадресацию агента" в разделе "Соединение → SSH → Аутентификация", чтобы включить переадресацию агента для клиента. В качестве альтернативы, если Cygwin SSH используется на хосте, то есть 2 варианта:

  1. Установите ssh-pageant и запустите его автоматически с помощью cygwin (в ~/.profile и тому подобное).
  2. Укажите желаемое расположение файла сокета Windows в настройке Keeagent и установите $SSH_AUTH_SOCK переменная в cygwin для соответствующего местоположения.

Чтобы проверить, работает ли переадресация агента, зайдите в виртуальную машину и проверьте переменную $SSH_AUTH_SOCK, Если он не пустой и указывает на существующий файл сокета Linux, то все должно быть в порядке. Если переменная пуста, то чего-то не хватает.

Другие вопросы по тегам