从一个 SSH 连接建立隧道到另一个 SSH 连接

从一个 SSH 连接建立隧道到另一个 SSH 连接

我有一台ic可以 ssh 连接的机器,名为 。还有另一台机器,fw,位于完全不同的 VLAN 上,我无法与它通信。ic位于我的两个 VLAN 上使用的VLAN fw,因此我通常通过 ssh 连接到 fw 的程序是 ssh 进入ic,然后从那里 ssh 进入fw。但是,如果我想编写此操作的脚本,我该如何让它工作?

我尝试过ssh root@ic "ssh root@fw",但这会导致消息Pseudo-terminal will not be allocated because stdin is not a terminal,然后我收到三条来自的消息fw,大概是因为它有空输入:

Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).

编写该脚本的最佳方法是什么?

答案1

默认情况下,ssh在发出命令时不分配 pty。对于交互式使用,您可以使用选项覆盖此-t设置。

对于身份验证,如果您使用公钥和正确配置的ssh-agent,您可以使用该-A选项来启用代理转发。

ssh -t -A user@ic ssh root@fw

(使用到处都有?别偷懒,赶紧创建账户吧。)


另一种方法,使用 SSH 上的 TCP 转发:

首先建立连接到ic使用-L(本地隧道)选项:

ssh -L 7890:fw:22 -fN user@ic

现在所有连接到localhost:7890将通过icfw:22(端口 7890 是任意的;您可以选择任何您喜欢的未使用的端口。)

(该-fN选项将使该连接在后台继续运行。)

二、通过隧道连接:

ssh root@localhost -p 7890

答案2

其他方法是使用ProxyCommand

ssh root@fw -o "ProxyCommand=ssh root@ic nc $FW_VLAN_IP %p"

这将连接到ic,创建一个 netcat TCP 代理并将fw其借给您的本地ssh客户端,这意味着它将使用您的本地身份验证系统而不是远程身份验证系统。

相关内容