我正在尝试使用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::SSH
或SSHKit
与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。
谢谢!