MOSH 进入堡垒服务器,SSH 进入内部主机

MOSH 进入堡垒服务器,SSH 进入内部主机

我已经ssh配置为通过堡垒主机自动转发:

Host bastion_host
    HostName bastion.example.com

Host internal_host
    ProxyCommand ssh -q bastion_host nc -q0 internal_host.dmz 22
    User internal_user

这有效。但是,如果我尝试通过莫什我收到以下错误:

$ mosh internal_host
/usr/local/bin/mosh: Could not resolve hostname internal_host
ssh_exchange_identification: Connection closed by remote host
/usr/local/bin/mosh: Did not find remote IP address (is SSH ProxyCommand disabled?).

我正在寻找的是mosh来自我的系统到堡垒主机,并ssh从堡垒主机到内部主机建立正常隧道。可能吗?

答案1

您在 ssh 配置中使用了 ProxyCommand,而 mosh 在错误消息中提到了 ProxyCommand。我认为这是关键线索。mosh 在内部使用 ProxyCommand,这样做可能会覆盖您自己的设置。

我通过像这样的手动端口转发调用来避免使用 ProxyCommand:

ssh -fN -L 2222:internal_host.example.com:22 bastion_host

然后我尝试连接到本地主机的 2222 端口:

mosh --ssh="ssh -p2222" internal_user@localhost

我没有收到 ProxyCommand 错误,而是收到了以下错误:

mosh-server: invalid option -- 'l'
Usage: mosh-server new [-s] [-i LOCALADDR] [-p PORT] [-c COLORS] [-- COMMAND...]

我怀疑这是由于 mosh 版本不同造成的,因为我发现即使直接使用 mosh 而不使用 bastion_host 也是如此。无论如何,尽管出现消息,直接连接仍然有效,所以我认为这不是问题所在。相反,我认为问题在于端口转发仅处理端口 22,而 mosh 还使用 60000:61000 中的 UDP 端口。ssh 隧道无法轻松转发 UDP 流量,所以我认为您最好使用不同的架构。

我假设您想要使用 mosh 进行第一跳,因为您的本地机器可能会更改网络等。为什么不像这样使用 mosh 和 ssh(也许使用别名)?

mosh bastion_host ssh internal_user@internal_host

答案2

我用mosh它来连接堡垒服务器,并tmux在该会话中运行以保持与内部服务器的永久连接。这对您的情况可能也更有用。

2019 年 5 月更新

我稍微改变了一下流程,tmux在本地运行,现在mosh我的 中有一个包装函数~/.zshrc。我删减了一些细节,但你会明白要点:

function mosh() {
  case $@ in
  hostname)
    command mosh bastion.domain.com -- bash -c 'echo "Bouncing via bastion..." && echo && ssh hostname.domain.com'
    ;;
  *)
    command mosh "$@"
    ;;
  esac
}

相关内容