通过具有身份验证的堡垒服务器进行Capistrano部署

时间:2020-04-17 10:23:51

标签: ssh deployment proxy capistrano gateway

我正在尝试使用Capistrano部署RoR应用程序。问题是,我不能直接从本地计算机访问服务器:我之前必须通过堡垒代理服务器进行身份验证。

我必须使用这样的用户ID和密码向堡垒服务器进行身份验证:

ssh -l userID -t bastion-server

然后我必须输入密码,如果可以,它将显示我可以访问的服务器列表,如下所示:

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

我输入服务器ID,并且已连接到服务器。

我可以直接访问不带以下列表的服务器:

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

我的问题是,我无法使用Net::SSHSSHKit与Capistrano一起使用。我尝试了一堆类似this one的命令:

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与ssh没有帮助。我还尝试了Jump代理选项,如SSHKit here的官方文档所述:

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与ssh结合使用时,出现此错误:

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。

谢谢!

0 个答案:

没有答案