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
    • 最新
    • 标签
主页 / server / 问题

问题[ssh-tunnel](server)

Martin Hope
Paul Reynolds
Asked: 2025-01-19 23:55:14 +0800 CST

无法通过 ssh 隧道连接到服务器

  • 5

我正尝试通过互联网通过 ssh 隧道连接到正在路由器后面的远程计算机端口上监听的服务。我在本地计算机和远程计算机上拥有 root 权限,并且对路由器拥有管理员访问权限。远程计算机的防火墙拒绝除其 ssh 端口(假设为 2222)之外的所有传入连接。端口 2222 由路由器转发,本地计算机的 ssh 客户端也在使用此端口。我能够使用 通过互联网从本地计算机连接到远程计算机ssh <my_user>@<router public ip>,从而获得一个 shell。

到目前为止一切顺利。要设置隧道,我运行

ssh -D 5555 <my_user>@<router public ip>

然后我按预期在远程计算机上获得了一个 shell。在本地计算机的输出中,sudo ss -tap | grep ssh我可以看到 ssh 客户端正在监听本地主机端口 5555,充当 SOCKS5 服务器,并且已建立隧道连接:

LISTEN 0 0                  127.0.0.1:5555             0.0.0.0:*    users:(("ssh", pid=...))    
ESTAB  0 0 <local machine private ip>:40632 <router public ip>:2222 users:(("ssh", pid=...))

40632 是 ssh 客户端使用的随机传出端口。我告诉我的应用程序客户端使用 localhost:5555 处的 SOCKS5 服务器,并尝试通过隧道通过其 GUI 连接到应用程序服务器。这失败了,GUI 中出现输入/输出错误,在终端中我得到

channel 3: open failed: connect failed: Connection refused

在远程机器的 auth.log 中我得到了

sshd[<pid>]: error: connect_to <router public ip> port 5555 failed

在阅读了有关此问题的大量其他来源后,我发现“通道 3”消息通常是由于远程计算机上没有服务在端口 5555 上侦听。我猜想远程计算机上的 sshd 无法传递现在未加密的数据包。在我的例子中,应用程序服务正在侦听远程端口 5555:我可以在 ss 的输出中看到这一点,并且我还能够在远程计算机上使用 nc 连接到该端口,从而在 ss 输出中生成已建立的内部连接。

我认为相关错误消息来自远程计算机的 sshd。这告诉我 sshd 正在尝试连接到路由器的公共 IP 地址端口 5555,该端口未转发,因此无法连接(我已通过允许路由器转发此端口来验证这一点,但这对我来说不是一个解决方案)。我的印象是隧道正在运行,直到远程 sshd 应将数据包传递到远程目标端口的部分。

远程计算机上的 sshd 不应该尝试连接到远程计算机的 localhost:5555 而不是使用公共 IP 地址吗?我可能在这里配置不正确吗?

通过路由器转发 5555 会破坏隧道,所以我肯定设置错了。还有一件事要提一下,当我通过 LAN 执行所有操作时,隧道可以正常工作。正如我上面所说,通过互联网进行简单的 ssh 连接也可以正常工作。我还检查了远程计算机的防火墙没有阻止任何东西,事实确实如此(ufw.log 中没有阻止)。

如果我遗漏了任何关键细节,请告诉我。任何关于这方面的想法都将不胜感激!谢谢。

ssh-tunnel
  • 2 个回答
  • 50 Views
Martin Hope
Wildcard
Asked: 2023-09-09 08:34:17 +0800 CST

SSH 隧道以避免暴露管理控制台

  • 5

我正在运行 Lucee Server,这是一个冷聚变服务器引擎,在我的例子中,它运行在 Tomcat 和 Apache 上。

我正在研究以各种方式强化它,并且遇到了有关此处描述的 SSH 隧道方法的问题:https ://docs.lucee.org/guides/deploying-lucee-server-apps/lockdown-guide .html#restricted-access-plus-ssh-tunneling

问题是,我认为关于如何进行 ssh 隧道的描述不准确或完整。我花了很多时间查看 SSH 文档以及其他一些 Stack Exchange 问题(https://superuser.com/q/588591/504387、https://superuser.com/q/237977/504387),但仍然可以' t 让 SSH 隧道按照该指南中所述或任何其他方式工作。


当前设置,我在 server.example.com 上运行 lucee,侦听端口 8888。在同一服务器上运行的 Apache 正在侦听端口 443,并配置为将所有请求代理到端口 8888 上的 127.0.0.1(即将它们转发到 lucee) 。但它被配置为拒绝对 /lucee 的请求,如上述文档中所述。

这意味着 Lucee 管理控制台只能直接在端口 8888 访问,而不能通过端口 443 访问。防火墙规则(iptables)设置为仅允许来自公司内部网络的端口 8888 上的传入流量,这样我们就可以访问 lucee 控制台,但外界不能。

这可能没问题,但我试图看看是否可以使隧道方法按所述工作。如果隧道可以工作,我们可以放弃 iptables 允许规则并完全阻止端口 8888(环回除外),或者只是将 lucee 重新配置为仅绑定到 127.0.0.1。


SSH 使用 server.example.com 上的非标准端口,假设它是 3300。

我想要做的是在我的笔记本电脑上运行 SSH 命令,该命令将:

  1. 使用我现有的 ssh 配置和密钥将我连接到 server.example.com(其中 sshd 正在侦听端口 3300),
  2. 绑定到我的笔记本电脑上本地主机上的任何端口,比方说 60001,
  3. 从远程端 server.example.com 依次连接到 127.0.0.1:8888,以便流量可以传递到 lucee。

最终结果应该是我可以在我的笔记本电脑上访问http://127.0.0.1:60001/lucee/admin/server.cfm,它将被运行在 server.example.com 上的 lucee 接收并监听绑定到的端口 8888该服务器上的 127.0.0.1。

我怎样才能做到这一点?

ssh-tunnel
  • 1 个回答
  • 38 Views
Martin Hope
Muhammad Ikhwan Perwira
Asked: 2022-02-05 07:04:46 +0800 CST

将一个 VPS 中的 UDP ipv6 端口转发到另一个 VPS 中的 UDP ipv4 端口

  • 0

我有 VPS,比方说没有 IPv4 但只有 IPv6 的 VPS X。

和

我有 VPS,比如说没有 IPv6 但只有 IPv4 的 VPS Y。

由于今天仍然普遍使用 IPv4,并且某些设备无法访问 IPv6。

我想使用 VPS Y 网卡作为 VPS X 的 IPv4,因为 VPS X 没有 IPv4。

我希望 VPS Y 中的 UDP 端口正在监听来自互联网的传入连接,然后将 UDP 数据报转发到 VPS X 中的 UDP 端口。

我可以使用 SSH 转发在 VPS X 中运行此命令来实现它。

SSH -NR 19132:localhost:19133 server

我可以将 SSH 从 VPS X 连接到 VPS Y。但是 VPS Y 无法连接到 VPS X。

不幸的是,SSH 转发仅适用于 TCP 端口。虽然我想要 UDP 端口转发,因为我的世界基岩服务器正在使用 UDP。

udp ssh port-forwarding ssh-tunnel ipv6
  • 1 个回答
  • 185 Views
Martin Hope
Toorero
Asked: 2022-01-07 16:55:43 +0800 CST

用于 SSH 隧道的 Apache 反向代理

  • 0

我想为在本地网络中运行的 Home-Assistant(hass) 实例设置一个 Apache 反向代理。

我将本地 hass 实例的流量通过隧道传输到远程服务器ssh -N proxy@example.com -R 8123:localhost:8123。

现在我尝试在 Apache 中设置一个普通的反向代理:

<VirtualHost *:443>
    ServerName hass.example.com

    SSLEngine On

    # If you manage SSL certificates by yourself, these paths will differ.
    SSLCertificateFile fullchain.pem
    SSLCertificateKeyFile privkey.pem

    SSLProxyEngine on
    SSLProxyProtocol +TLSv1.2 +TLSv1.3
    SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH

    ProxyPreserveHost On
    ProxyRequests Off
    ProxyVia On
    RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
    
            
    # Proxy all traffic to hass
    ProxyPass / http://localhost:8123/ nocanon
    ProxyPassReverse / http://localhost/
    ErrorLog ${APACHE_LOG_DIR}/hass.example.com-error.log
    CustomLog ${APACHE_LOG_DIR}/hass.example.com-access.log combined
    <IfModule security2_module>
        SecRuleEngine off
    </IfModule>
</VirtualHost>

<VirtualHost *:80>
    ServerName hass.example.com

    Redirect permanent / "https://hass.example.com"

    ErrorLog ${APACHE_LOG_DIR}/hass.example.com-error.log
    CustomLog ${APACHE_LOG_DIR}/hass.example.com-access.log combined
</VirtualHost>

可悲的是,如果我尝试打开hass.example.com,浏览器会以400: Bad Request.

ssh ssh-tunnel apache-2.4 apache2
  • 1 个回答
  • 555 Views
Martin Hope
MoWo
Asked: 2022-01-06 14:58:02 +0800 CST

在 EC2 上使用多个公共 IP 地址的出站代理

  • 0

我们有一堆 EC2 实例形式的后端服务器,它们位于 AWS VPC 的私有子网中,需要与第 3 方 API 通信。此 API 限制了我们可以根据原始 IP 地址发送的请求,并且在扩展我们的设置时,我们已经开始达到用于所有出站流量的 NAT 网关 IP 的限制。

因此,我想为连接了多个 EIP 的出站流量设置代理。为了进行测试,我目前正在使用带有 2 个 ENI 的 Amazon Linux 2 实例,每个 ENI 附加了 2 个 EIP。后端服务器打开到出站代理的 SSH 隧道并将第 3 方 API 映射到本地端口,服务器主机文件中的条目将所有流量重定向到该主机名到 localhost,此设置通常工作正常,但来自proxy 总是只使用第一个关联的 EIP。

所以我的设置如下所示:

ENI1: eth0
private IP1: 10.0.11.81
private IP2: 10.0.11.82

ENI2: eth1
private IP3: 10.0.11.52
private IP4: 10.0.11.53

original route table:
default via 10.0.11.1 dev eth0
default via 10.0.11.1 dev eth1 metric 10001
10.0.11.0/24 dev eth0 proto kernel scope link src 10.0.11.81
10.0.11.0/24 dev eth1 proto kernel scope link src 10.0.11.52
169.254.169.254 dev eth0

我现在希望能够在通过出站代理调用 API 时指定哪个后端服务器使用哪个 EIP。我的第一次尝试如下:

  • 在代理主机上设置 4 个不同的用户
  • 像这样为每个用户添加 iptable 规则:iptables -t nat -m owner --uid-owner user1 -A POSTROUTING -j SNAT --to IP1等等。
  • 这适用于连接到主 ENI(即机器中的 eth0)的 2 个 IP,但不适用于与第二个 ENI(eth1)关联的 2 个 IP
  • 添加-o eth1到语句中也不起作用

我的下一个尝试是为每个 IP 地址创建自定义路由表并将它们与策略规则匹配:

  • 创建自定义路由表,即为 IP3:
default via 10.0.11.1 dev eth1
10.0.11.0/24 dev eth1 proto static scope link src 10.0.11.52
169.254.169.254 dev eth1 scope link
  • 创建 iptables 规则以标记来自 user3 的流量:-A OUTPUT -m owner --uid-owner 1003 -j MARK --set-xmark 0x3/0xffffffff
  • 创建规则以对标记为 3 的所有数据包使用自定义路由表:32763: from all fwmark 0x3 lookup ip3
  • 这又不起作用。数据包确实会得到不同的处理。除了上面示例中的 user3 之外,所有用户都可以与世界通信。

我究竟做错了什么?是否有一些微不足道的东西我错过了,或者我的整个方法注定要失败?我非常愿意接受有关使此设置正常工作以及替代方法的建议...

提前非常感谢!

routing amazon-ec2 ssh-tunnel linux-networking outboundrules
  • 2 个回答
  • 122 Views
Martin Hope
c0D3l0g1c
Asked: 2022-01-03 04:32:11 +0800 CST

SSH远程转发成功,但远程站点测试不起作用

  • 0

我花了一段时间才弄清楚这一点,但最终让远程端口转发与ssh一起工作,如下所示:

ssh -N -i /etc/ssh/id_rsa user@somewhere.com -R 8080:localhost:80 -C -v

本地服务器使用私钥连接到配置了公钥的远程服务器。能够成功认证,日志中没有错误。ssh 打印的最后一行是:

debug1: remote forward success for: listen 8080, connect localhost:80

我尝试从我的公共站点对此进行测试,如下所示:

  • http://www.somewhere.com
  • http://www.somewhere.com:8080
  • https://www.somewhere.com
  • https://www.somewhere.com:8080

但是,什么也没发生 - 仍然看到这一行:

debug1: remote forward success for: listen 8080, connect localhost:80

如果我使用http://127.0.0.1:8080在远程服务器上进行本地测试,它工作正常。

注意:在远程服务器上的 sshd_config 中设置了以下内容:

  1. AllowTcpForwarding 是
  2. 网关端口 是

不知道我错过了什么......

linux ssh port-forwarding ssh-tunnel
  • 1 个回答
  • 164 Views
Martin Hope
Arkhan6
Asked: 2021-12-16 04:25:50 +0800 CST

使用 Java 桌面程序 (.jar) 将 SSH 隧道连接到远程服务器

  • 0

我为公司的员工开发了一个JavaFx 桌面程序。现在,他们想在家里用自己的个人电脑使用该程序。该程序有MySQL 和 FTP 服务。

我需要使用SSH 隧道或VPN以便程序可以从外部连接到办公室的远程服务器(FTP 和 MySQL 的端口转发)。

如果我想使用 SSH 隧道,我必须在自己员工的计算机中安装(或复制/粘贴)证书,我认为这个选项很危险,因为证书可能会被用来攻击他们的计算机。

有时我想为每个员工(100 人)创建一个证书,以更好地控制每次连接的人员,但维护起来太费力了。

我想使用 SSH 隧道,但我不知道在这种情况下是否是最佳选择。

我可以使用哪些其他选项将我的程序安全地连接到远程服务器?

java linux mysql ssh-tunnel
  • 2 个回答
  • 113 Views
Martin Hope
spekulatius
Asked: 2021-12-04 22:51:13 +0800 CST

在单独的 mysql 服务器上通过 SSH 运行 mysqldump

  • 0

我有一个由两个单独的服务器组成的托管环境:web-server 和 db server。Web 服务器只能通过 SSH 访问(当然还有端口 80)。DB 服务器无法从 Internet 访问,只能通过 Web 服务器访问。

网络服务器没有 mysqldump 并且硬盘上的空间不允许在网络服务器上进行数据库转储。

我想使用我的本地 mysqldump 并通过网络服务器将其连接到数据库服务器。我不确定如何让 bash 命令正常工作。我试过这个:

SSH 隧道

ssh -f -L 3312:localhost:3306 user@web-server -i ~/.ssh/key-file -c cipher -N

mysql转储

mysqldump -P 3312 -h 127.0.0.1 -u user -p database > /tmp/db.sql

我知道数据库服务器需要以某种方式包含在命令中,但我不确定如何以及在何处包含数据库服务器的 IP。

mysql bash ssh ssh-tunnel
  • 2 个回答
  • 202 Views
Martin Hope
Ullas
Asked: 2021-11-14 09:15:34 +0800 CST

SSH 隧道/类似设置以连接到与专用网络关联的服务

  • 0

这是我的问题。

操作系统:Oracle Linux 7.8管理IP(Putty可访问)eth0:10.250.0.210 App IP(外部不可访问)eth1:10.250.4.210

我有一个在 10.250.4.210:80 上运行的网站。

出于测试目的,我需要通过 10.250.0.210 IP 访问此站点。我怎样才能做到这一点。

提前致谢。乌杰

port-forwarding ssh-tunnel
  • 1 个回答
  • 163 Views
Martin Hope
Georg Heiler
Asked: 2021-11-09 09:34:26 +0800 CST

带有跳转主机转发的 ssh TOTP 连接

  • 0

我怎样才能简化这个?也许使用代理转发?

我有一个通过 TOTP x2 使用 2FA 的 SSH 跳转主机和一台也使用 2FA 的机器(跳转主机和机器):

ssh myuser@host.corp.com -L 22222:my_machine.corp.com:22
# requires password + 2FA TOTP code
ssh myuser@localhost -p 22222
# requires password + 2FA TOTP code

我怎样才能理想地简化这个(通过SSH配置左右)来简单地调用ssh myhost,然后如果需要被要求输入2FA和密码2x - 但不必连接2x

ssh ssh-tunnel ssh-agent
  • 1 个回答
  • 129 Views

Sidebar

Stats

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

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve