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 / 问题 / 486066
Accepted
Mei Zhang
Mei Zhang
Asked: 2018-12-05 20:27:08 +0800 CST2018-12-05 20:27:08 +0800 CST 2018-12-05 20:27:08 +0800 CST

使用自定义主机名的 ssh 端口转发

  • 772

我经常使用以下命令进行端口转发以访问远程 Web 服务器:

ssh user@remotehost -L 1234:localhost:1234

所以现在我可以在浏览器中输入http://localhost:1234来访问远程主机的 Web 服务器。我现在要做的是使用 localhost 以外的名称。例如,是否可以使用一些参数调用 ssh,以便我可以在浏览器中输入http://remotealias:1234来访问远程 Web 服务器?当我同时在端口 1234 上的本地计算机上运行其他服务时(并且不想记住许多端口:主机隧道映射),这特别有用。

如果单独使用 ssh 命令不可能,我也对需要在我的机器中编辑一些本地配置以使其按描述工作的解决方案感兴趣。

ssh
  • 3 3 个回答
  • 6297 Views

3 个回答

  • Voted
  1. Best Answer
    user1133275
    2018-12-05T21:40:57+08:002018-12-05T21:40:57+08:00

    是的; 您可以在本地机器上为每个主机创建一个 IP

    ip address add 122.0.0.2/32 dev eth0
    ip address add 122.0.0.3/32 dev eth0
    

    并编辑您的主机文件

    echo "127.0.0.2 remotehost1.com" >> /etc/hosts
    echo "127.0.0.3 remotehost2.com" >> /etc/hosts
    

    然后将每个 IP 转发到主机 IP(通过域的直接访问将被主机文件更改破坏)

    ssh user@$remotehost1_IP -L 127.0.0.2:80:localhost:1234
    ssh user@$remotehost2_IP -L 127.0.0.3:80:localhost:1234
    

    然后像平常一样使用您的网络浏览器

    http://remotehost1.com
    http://remotehost2.com
    

    这将通过它自己的 ssh 隧道在它自己的本地 IP 上为每个远程 fqdn 建立隧道。

    • 1
  2. dirkt
    2018-12-05T23:54:08+08:002018-12-05T23:54:08+08:00

    当你这样做

    ssh [email protected] -L 1234:localhost:5678
    

    在主机 b.company.com 上,会发生以下情况:

    • 在主机 B 上,ssh 开始侦听端口 1234。
    • 在主机 Alocalhost上,通过端口 5678 与(即再次连接主机 A)建立连接。
    • 这两个端点上的流量通过 A 和 B 之间的 ssh 连接转发。

    所以最终的结果是你可以使用主机 B 上的 1234 端口访问主机 A 上的 5678 端口。

    您必须输入的原因localhost是主机 A 也可以是“跳转服务器”,即某个受保护网络的入口点。所以如果你不能直接从主机B访问主机C,但是你可以从主机B访问主机A,从主机A访问主机C,你可以这样做

    ssh [email protected] -L 1234:c.company.com:5678
    

    它将在主机 B 和 A 之间以及主机 A 和 C 之间建立连接,并将主机 C 上的端口 5678 连接到主机 A 上的端口 1234。

    这有两个后果:

    • 如果您已经在客户端(主机 B)上将端口 1234 用于其他服务,则不能将其用于隧道。您需要使用不同的端口(但有很多可供选择)。

    • 在您的浏览器中,您将始终连接到隧道的本地端点,即localhost. 为远程主机分配名称不会改变这一点。

    所以不,你想要的不是这样工作的。

    编辑

    如果还不够清楚:您可以很容易地使用不同的端口号,因为您已经在运行本地服务。所以假设你有你想通过这种方式访问​​的主机 A、B 和 C,它们都在端口 80 上提供服务,并且你在端口 80 上运行你自己的 Web 服务器。然后你做

    ssh user@hosta -L 5000:localhost:80
    ssh user@hostb -L 5001:localhost:80
    ssh user@hostc -L 5002:localhost:80
    

    您现在可以在浏览器中通过键入http://localhost:5000、http://localhost:5001和来访问它们http:/localhost:5002。并且http://localhost:80仍将访问您自己的本地服务器。

    没有真正需要涉及为自己分配大量 IP 地址或远程别名的复杂结构。

    • 0
  3. Marcin Daw
    2018-12-05T23:51:29+08:002018-12-05T23:51:29+08:00

    当您通过 ssh 建立端口转发时 - 您在端口your_machine:port(从您的机器machine:port的角度)与您已连接到的机器的角度之间建立了一座桥梁。

    换句话说 - 如果你调用命令

    ssh user@remotehost -L 1234:localhost:4567

    如果您连接到计算机上的端口(为您提供地址),您将与remotehostplus建立 ssh 连接,您的 ssh 连接的远程部分将尝试在端口上建立连接(到自身 - 因为on将指向自身)1234localhostlocalhostlocalhostremotehost4567

    回到问题的优点。

    如果您1234的机器上的端口上有其他服务,则可以改为选择机器上空闲的另一个端口。

    • -1

相关问题

  • 为什么 ssh 实用程序被视为 pty?

  • Auto-SSH 手动工作,但不在后台工作

  • 远程运行 X 应用程序,在远程主机上运行 GUI [关闭]

  • rsync 端口 22 和 873 使用

  • SCP突然中止:管道损坏,消息验证码不正确

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