我有一个在远程服务器端口 9999 上运行的程序。由于它不支持任何类型的加密和身份验证,我使用 ssh 隧道来访问它。
这是我正在使用的命令:
ssh -L 9999:localhost:9999 user@remotehost
Run Code Online (Sandbox Code Playgroud)
为了保持这条隧道的活力。我编写了一个 ssh 脚本来监视并在出现任何问题时重新启动它。所以,我必须将密码存储在脚本中。
但是,考虑到此客户端服务器被黑客入侵的可能性。我认为如果我可以将此隧道限制为最小权限会更好。
那么,是否可以限制 remotehost 用户只能使用 ssh 隧道转发到端口 9999?
我有以下设置
2 x linode vps
1 x lab (physical) running 4 vps
Run Code Online (Sandbox Code Playgroud)
我的目标是让所有节点都像在同一个 LAN 上一样。这将允许我更改 IPTable 规则,只允许本地流量,而不是必须为每个需要访问目标节点上的端口的服务器添加一个新的 IPTable 条目。
我已经做了一些初步的研究和测试,但似乎无法找到我想要完成的最佳解决方案。在我开始配置实际的生产 VPS 之前,我一直在练习我的两个实验室 VPS,它们驻留在不同的子网上。
实验室机器有两个物理网卡;eth0 和 eth1。eth1 被设置为向 VPS 提供虚拟网卡的桥梁。
设置如下
service-a-1 (physical node):
eth0: 192.168.0.1
eth1: br0
br0: 192.168.0.2
service-a-2 (vps):
eth0: 192.168.0.3
eth0:0 10.0.0.1, 255.255.192.0
eth0:1 10.0.1.1, 255.255.192.0, gw 10.0.0.1
service-a-3 (vps):
eth0: 192.168.0.4
eth0:0 10.0.64.1, 255.255.192.0
eth0:1 10.0.65.1, 255.255.192.0, gw 10.0.64.1
Run Code Online (Sandbox Code Playgroud)
我使用192.168.0.x ip addies 连接到 VPS,但10.0.x ip addies 用于练习连接子网。我对上述设计的目标是通过网关 ips在service-a-2和service-a-3之间建立安全隧道;分别为10.0.0.1和 …
我有一台服务器需要通过端口转发来接受传入的 ssh 连接。传入的客户端请求从服务器上的端口转发到本地端口的端口。他们使用公钥/私钥进行身份验证。所以:在客户端-R 40001:localhost:8443用于使服务器连接到自己的40001端口,并在客户端的8443端口访问一个应用程序。
如何限制服务器,以便该特定用户只能转发端口 40001 而不能转发其他端口?我看过permitopen,但它似乎只适用于正向隧道,而不是反向隧道。
我正在尝试绕过医院防火墙。
我可以在端口 443 上通过 SSH 连接到我的 devbox:
ssh -L 8080:devbox:443 root@devbox -p 443
但我实际上无法在浏览器中加载 devbox。当我去localhost:8080我收到以下错误:
SSH-2.0-OpenSSH_4.3
Protocol mismatch.
当我ssh -V得到以下信息时:
开发箱: OpenSSH_4.3p2, OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008
本地机器: OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
我假设这种差异是导致协议不匹配的原因。谁能建议如何解决不匹配?
我尝试为 autossh 创建一个可靠的 systemd 服务。
服务正常工作,但如果主机密钥发生变化,则服务处于正常状态(正在运行)。
如果隧道不起作用,我希望它处于“失败”状态。
这是我当前的 systemd 服务文件:
# Source is in srv/salt/tunnel/autossh\@.service
# which is a git repo.
# Don't edit /etc/systemd/system/autossh\@.service
[Unit]
Description=Tunnel For %i
After=network.target
[Service]
User=autossh
# https://serverfault.com/a/563401/90324
ExecStart=/usr/bin/autossh -M 0 -N -o "ExitOnForwardFailure yes" -o "ConnectTimeout=1" -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -R 40443:installserver:40443 -R 8080:installserver:8080 tunnel@%i
Restart=always
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
这是输出 systemctl status autossh@foo-work
salt:/srv # systemctl status autossh@foo-work
autossh@foo-work.service - Tunnel For foo-work
Loaded: loaded (/etc/systemd/system/autossh@.service; enabled)
Active: active (running) since Wed, …Run Code Online (Sandbox Code Playgroud) 你好社区几天我在保持连接到我执行到 VPS的ssh 隧道时遇到问题。2 到 4 分钟后,我收到此错误:隧道已关闭。packet_write_wait:连接到未知端口 0:管道损坏。我一直在论坛上阅读,但仍然找不到解决方案,这些是我的配置文件。值得一提的是,我通过代理(Squid)访问互联网。
在我的SSH 服务器(/etc/ssh/sshd_config) 上添加以下行:
ClientAliveInterval 60
ClientAliveCountMax 5
TCPKeepAlive no
Run Code Online (Sandbox Code Playgroud)
在我的SSH 客户端(~/.ssh/config) 上:
Host myhost
User root
ProxyCommand proxytunnel -p proxy.example.com:3128 -P userproxy:passwordproxy -d dominiovps.com:443 -v -H "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Win32)"
ServerAliveInterval 60
ServerAliveCountMax 5
TCPKeepAlive no
Run Code Online (Sandbox Code Playgroud) 我不知道如何用语言表达,所以创建了一个插图来展示我的设置是什么样的。
DB Server和Web Server在一个VLAN中,Web Server有公网IP,DB Server没有。通常 DB 只能与 Web 服务器通信。例外是它也应该能够与主服务器通信,但它应该是无法远程访问的。
我认为它可以设置为 DB>>Web>>Main Server,但我对 SSH 配置处于非常初级的水平,所以我不能自己做任何事情。
DB to Main 连接应该是永久的两种方式,并且只需要通过端口 80。
DB和Web服务器是CentOS 7.2,主服务器是Debian 8
这实际上可能吗?如果可能,如何实现?很感谢任何形式的帮助。谢谢。
所以我设置了我的 ssh 变量来在 ~/.ssh/config 中做一个反向隧道,并调用主机 tunnel_reverse。我测试了以下命令以使用 autossh 创建持久隧道,并且它按预期工作:
autossh -M 0 -N tunnel_reverse
Run Code Online (Sandbox Code Playgroud)
创建远程主机反向隧道后,我能够从笔记本电脑连接到远程计算机。但是,当我尝试设置服务文件以便它可以在使用 systemd 启动时自动启动时,它不起作用。这是我创建的 /etc/systemd/system/tunnel.service 文件:
[Unit]
Description=AutoSSH to reverse tunnel
After=network.target
[Service]
Environment="AUTOSSH_GATETIME=0"
ExecStart=/usr/bin/autossh -M 0 -v -N tunnel_reverse
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
所以我开始了
systemctl daemon-reload
systemctl restart tunnel.service
systemctl status tunnel.service
Run Code Online (Sandbox Code Playgroud)
查看状态日志,似乎有一个错误,内容如下:
debug1: Server host key: blah blah blah
debug1: read_passpphrase: can't open /dev/tty: No such device or address
Host key verification failed.
ssh exited with error status 255; restarting ssh
Run Code Online (Sandbox Code Playgroud)
我哪里做错了?
我正在尝试设置一个 docker 容器,用于绕过防火墙/NAT 以允许 SSH 访问这些路由屏障后面的计算机。本质上,我有一个 SSH 服务在 docker 容器内侦听,我的其他计算机连接到该服务,打开反向 SSH 端口转发,然后如果我想连接到防火墙后面的计算机,我改为连接到我的 dockerized反向端口上的代理服务器。例子:
防火墙计算机“鲍勃”连接到代理服务器:
ssh -R 2024:localhost:22 -N remote.server
Run Code Online (Sandbox Code Playgroud)
接下来,我通过端口连接到远程服务器,2024以便沿着隧道返回并连接到localhost:22bob:
ssh -p 2024 remote.server
Run Code Online (Sandbox Code Playgroud)
当它没有被 dockerized 时,这一切都很好,但是当我试图将它移动到一个 dockerized 服务时,我发现我sshd在docker容器中的服务器顽固地拒绝打开远程端口转发。ssh -vvv在上面的第一步中与 with 连接给出:
...
debug1: Entering interactive session.
debug1: pledge: network
debug3: receive packet: type 4
debug1: Remote: Server has disabled port forwarding.
debug3: receive packet: type 82
debug1: remote forward failure for: listen 2024, connect localhost:22
Warning: remote port forwarding failed for …Run Code Online (Sandbox Code Playgroud) 我查看了 ssh 手册 ( man ssh) 并阅读了-L和-R选项的定义,但不太明白其中的区别。两者似乎都能够将请求转发到所需的主机和端口。有人可以尝试向孩子解释其中的区别吗……这两个选项之间的主要区别是什么?