Использование последних версий Capistrano (v3.11.0), Vagrant (v2.1.2) и Rails (v5.2.0).
Добавив вывод vagrant ssh-config в ~ / .ssh / config, я могу подключиться по ssh к виртуальной машине с «настоящим» сеансом ssh (не только через vagrant ssh):
devbox $ ssh бродяга @ myvm
Однако Capistrano не может подключиться. Например, при использовании стандартной задачи Capistrano возникает ошибка SSHKit:
devbox $ cap staging git:check
Traceback (most recent call last):
<stuff snipped>
cap aborted!
SSHKit::Runner::ExecuteError: Exception while executing as vagrant@cvong: getaddrinfo: nodename nor servname provided, or not known
Caused by:
SocketError: getaddrinfo: nodename nor servname provided, or not known
Я подозреваю, что проблема связана с тем, как сеанс ssh использует интерактивный сеанс входа в систему, в то время как Capistrano использует неинтерактивный сеанс без входа в систему (https://capistranorb.com/documentation/faq/why-does-something-work-in-my-ssh-session-but-not-in-capistrano/). Предположительно, сеанс ssh забирает конфигурации ssh виртуальной машины из ~ / .ssh / config, в то время как Capistrano этого не делает, поэтому Capistrano не может найти виртуальную машину. Или есть какое-то другое объяснение?
Так как же скормить необходимые конфиги в Capistrano, и какие они? Страница документации Capistrano выше объясняет проблему, но не говорит, что с ней делать. Кроме того, я не могу найти документы о ssh_options, которые можно указать при определении сервера в Capistrano, куда, по-видимому, должны идти эти конфигурации.
Вот определение сервера в my_rails_app / config / deploy / staging.rb:
server "myvm",
user: 'vagrant',
roles: %w{app db web},
primary: true,
ssh_options: {
forward_agent: true,
keys: ['~/.vagrant.d/insecure_private_key'],
port: '2222',
host_name: 'myvm'
}
Capistrano, очевидно, находит имя виртуальной машины, поскольку "vagrant @ myvm" появляется в ошибке SSHKit. Однако похоже, что в разделе ssh_options чего-то не хватает, так что Capistrano не может войти в систему. Очевидно, это похоже на Just Work для большинства людей, так что за глупую ошибку я делаю?
Большое спасибо за любые указатели!
Следующая проблема заключается в том, что Capistrano 3 больше не поддерживает push из локального репозитория git, как это было раньше в Capistrano 2, но это еще одна битва на следующий день.





Отметил бы это как "отвечено", если бы мог. Никогда не удавалось заставить это работать с бродячим пользователем по умолчанию, но после настройки обычного пользователя вместе с рабочими ключами SSH - и, что особенно важно, удалив определение сервера и просто используя синтаксис роли, Capistrano больше не может таким же образом достичь Vagrant VM. В конфигах Capistrano видимо меньше меньше.