AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 433923
Accepted
0xC0000022L
0xC0000022L
Asked: 2018-03-28 12:57:59 +0800 CST2018-03-28 12:57:59 +0800 CST 2018-03-28 12:57:59 +0800 CST

通过跳转主机、ssh_config 文件和仅“ssh targethost”进行 SSH 端口转发

  • 772

注意:我使用的 OpenSSH 客户端都是7.2 版本,所以不可RemoteCommand用。

假设以下设置:

  1. machine是一个跳转主机,并通过其foo提供对主机的访问barlocalhost:10022
  2. bar位于网络内部,我们可以在其中访问主机rdp并访问其 RDP 端口(3389)。我实际上给出了我的命令行和配置内部的 IP rdp,但我认为只要名称查找有效,使用它的名称是合法的。为简洁起见,我在rdp这里使用。

rdp:3389现在的目标是通过连接到bar通过跳转主机获得访问权限,foo并将其转发到localhost:33389我正在调用的本地机器上ssh bar。

[local:33389] --> {foo} --> {bar} --> [rdp:3389]

插曲

我以前用 PuTTY 解决了这个问题,如下所示:

  1. 创建连接foo并配置本地转发-L 33389:localhost:33389,从而将本地机器绑定localhost:33389到localhost:33389on foo。
  2. 使用以下远程命令将端口转发传送到其所在的网络bar中ssh -L 33389:rdp:3389 -A bar。
  3. Host bar在 foo内部配置.ssh/config为连接到localhost:10022并最终bar通过跳转主机。

PuTTY 配置就像一个魅力,但它依赖于远程命令来执行。虽然 shell 别名是解决此问题的一种方法,但我想知道是否有办法将所有内容保存在ssh_config(5)我的客户使用的内部,使用ProxyCommand?


上述 PuTTY 配置的大致等价物是:

ssh -L 33389:localhost:33389 foo ssh -t -L 33389:rdp:3389 -p 10022 localhost

或者,只要Host bar配置为foo通过:localhost:10022foo

ssh -L 33389:localhost:33389 foo ssh -t -L 33389:rdp:3389 bar

这似乎完成了工作。

但当然,这已经足够输入了,如果能够将所有这些都放入配置文件并ssh bar在本地机器上简单地输入,那就更简洁了。

正如 OpenSSH 7.6 中介绍的那样, RemoteCommand这似乎相当简单:

Host bar
    HostName foo
    RemoteCommand ssh -L 33389:rdp:3389 -A -p 10022 localhost
    LocalForward 33389 localhost:33389

...这应该大致转换为ssh上面显示的调用。但如前所述,我使用的是 OpenSSH 的旧(打包)版本,不支持该RemoteCommand节。

这是似乎最接近我想要实现的尝试。

Host bar
    HostName localhost
    Port 10022
    ProxyCommand ssh -L 33389:localhost:33389 -W %h:%p foo
    LocalForward 33389 rdp:3389

这个想法是在本地机器上我将简单地调用ssh bar. 事实上,它的工作原理是我最终出现在 的 shell 提示符下bar,但端口转发根本不起作用。虽然sudo lsof -i|grep 3389在本地机器上给了我:

ssh       15271        accden    6u  IPv6 7933201      0t0  TCP localhost:33389 (LISTEN)
ssh       15271        accden    7u  IPv4 7933202      0t0  TCP localhost:33389 (LISTEN)

在跳转主机上,我看不到任何包含3389.

由于ProxyCommand建立了与 的连接,foo并且我提供了LocalForward与 的连接bar,因此我希望这可以正常工作。

我究竟做错了什么?


目标是用于ssh bar连接bar并同时rdp:3389在本地机器上作为localhost:33389. 调整ssh_config(5)本地机器上的文件并被foo允许。但是,传递远程命令不是一个有效的答案。

openssh ssh-tunneling
  • 1 1 个回答
  • 30397 Views

1 个回答

  • Voted
  1. Best Answer
    A.B
    2018-04-01T10:09:34+08:002018-04-01T10:09:34+08:00

    首先,根据您的设置,什么会起作用,无论如何都需要两个 ssh:

    Host foo
        LocalForward 10022:bar:22
    
    Host bar
        Hostname localhost
        Port 10022
        LocalForward 33389 rdp:3389
    
    term1$ ssh foo # or use ssh -f -N -o ExitOnForwardFailure=yes foo for background task
    term2$ ssh bar
    

    您真正需要的不是 RemoteCommand,而是 ProxyJump,真正简化了您的配置,只有通过以下方式才能达到目标:

    ssh -L 33389:rdp:3389 -J foo bar
    

    或等效(仅)配置:

    Host bar
        ProxyJump foo
        LocalForward 33389 rdp:3389
    

    需要零中间端口。

    不幸的是,ProxyJump 仅从 openssh 7.3 开始可用

    但它很容易被ProxyCommand-W您之前使用的/组合替换。

    ssh -L 33389:rdp:3389 -o 'ProxyCommand=ssh foo -W %h:%p' bar 
    

    或作为配置文件:

    Host bar
        ProxyCommand ssh -W %h:%p foo
        LocalForward 33389 rdp:3389
    

    仍然有两个 ssh 正在运行:隐藏的一个是ProxyCommand仍在本地主机上运行的 as 参数,它使用一对带有主 ssh 的管道进行链接,而不是额外的 tcp 端口。试图让中间主机参与端口转发是不安全的或可能发生冲突(foo 的其他用户可以访问隧道或使用相同的端口),并且容易出错。如果可能,隧道末端应始终保留在客户端主机上,在那里可以完全控制。中间隧道不应该存在或指向下一个 ssh 入口点(这就是-W's 在这里的用法)。

    • 13

相关问题

  • 通过 SSH 将本地 unix 上的流量代理到远程 unix 套接字

  • 请解释一下这个SSH连接命令格式

  • 使用私钥进行 ssh 端口转发

  • 在此服务器上更新到 OpenSSH 7.6 后无法连接到 Centos 6.9 [重复]

  • 我应该在路由器上配置端口转发以转发到 sftp 的端口 22 吗?会安全吗?[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve