Развертывание Capistrano через бастионный сервер с авторизацией - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь использовать Capistrano для развертывания приложения RoR. Проблема в том, что я не могу получить прямой доступ к серверу с моего локального компьютера: я должен проходить проверку подлинности через прокси-сервер бастиона.

Я должен пройти проверку подлинности на бастионном сервере с Идентификатор пользователя и пароль вроде этого:

ssh -l userID -t bastion-server

Затем я должен ввести свой пароль, и если он работает, он показывает список серверов, к которым у меня есть доступ, например:

| ID | Cible (page 1/1)                  | Autorisation
|----|-----------------------------------|----------------------------------
|  0 | sysroot@local@XX:SSH              | XYZ
|  1 | sysroot@local@XX:SUDO             | XYZ

Я ввожу идентификатор сервера, и я подключен к серверу.

У меня может быть доступ к серверу без списка с помощью:

ssh sysroot@local@XX+SSH+USERID@bastion-server
# works too
ssh -tt USERID@bastion-server sysroot@local@XX+SSH+USERID
# without the prompt asking for password, ofc not recommended
sshpass -p 'PWD' ssh -tt sysroot@local@XX+SSH+USERID@bastion-server

Моя проблема в том, что я могу ' сделать это для работы с Capistrano, используя Net::SSH или SSHKit. Я попробовал несколько команд, таких как эта :

host = SSHKit::Host.new(
  ssh_options: { forward_agent: false,
                 proxy: Net::SSH::Proxy::Command.new('ssh -tt USERID@bastion-server sysroot@local@XX+SSH+USERID') }
)
on [host] do
  execute :echo, '1'
end

Но после запроса моего пароля, он зависает, ничего не происходит. -vvv с s sh не помогает. Я также попробовал вариант прокси Jump, как описано в официальной документации SSHKit здесь :

host = SSHKit::Host.new(
  hostname: 'sysroot@local@XX+SSH',
  ssh_options: { proxy: Net::SSH::Proxy::Jump.new("USERID@bastion-server") }
)
on [host] do
  execute :echo, '1'
end

Но он тоже не работает. Когда я пытаюсь использовать -J с s sh вручную, я получаю эту ошибку:

ssh -J USERID@bastion-server sysroot@local@XX:SSH
# entering password..
Received disconnect from 172.x.x.x port 22:11: Disconnection
Disconnected from 172.x.x.x port 22
kex_exchange_identification: Connection closed by remote host

Любые советы? Я хотел бы остаться на Capistrano, потому что я использую его в других проектах, и мне нравится версия исходного кода. Установка Capistrano на бастионном сервере невозможна.

Спасибо!

...