Я пытаюсь использовать 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 на бастионном сервере невозможна.
Спасибо!