好的,我有一个 Web 服务器,我们称之为服务器 A,它通过 HTTPS 提供服务。我有一个 SSH 网关服务器,我们称之为服务器 B。
由于防火墙规则,我无法从台式机 linux 计算机访问服务器 A 的 Web 服务。因此,要查看 Web 服务,我必须使用 X Forwarding SSH 到服务器 B 并通过 SSH 隧道运行 firefox。服务器 B 可以访问服务器 A 的 Web 服务,因此它可以工作。
我想知道是否可以在我的 PC 和服务器 B 之间创建一个 SSH 隧道,这将允许我使用桌面 Web 浏览器访问服务器 A 上的服务,而不是通过 SSH 隧道运行 firefox。
我能够接受来自单个服务器上多个远程系统的反向 SSH 连接,每个连接使用一个端口:
Remote A: ssh -fN -R5000:localhost:22 user@server-ip -p22
Remote B: ssh -fN -R5001:localhost:22 user@server-ip -p22
Remote C: ssh -fN -R5002:localhost:22 user@server-ip -p22
Run Code Online (Sandbox Code Playgroud)
我可以根据需要从本地客户端访问这些系统:
Access Remote A: ssh root@server-ip -p5000
Access Remote B: ssh root@server-ip -p5001
Run Code Online (Sandbox Code Playgroud)
这需要在服务器上为每个远程系统转发一个端口。当 100 多个遥控器连接时,除了在服务器防火墙中打开 100 多个端口并将每个遥控器静态分配给上述端口之外,我还有其他选择吗?我的目标是让多个遥控器按需创建隧道,我可以在其中查询连接的人。
我发现 sslh 是一个多路复用器,可以根据协议区分单个端口上的流量,但这仅适用于不同的协议,例如。ssl/ssh。是否有允许在单个端口上建立多个隧道的解决方案?
例子:
Remote A: ssh -fN -R5000:localhost:22 user@server-ip -p22 -identifier abc123
Remote B: ssh -fN -R5000:localhost:22 user@server-ip -p22 -identifier def456
access Remote A: ssh root@server-ip -p5000 -identifier abc123
access Remote B: ssh root@server-ip -p5000 -identifier def456
Run Code Online (Sandbox Code Playgroud) 我使用动态SSH端口转发(-D)和正常的SSH端口转发(-L或-R用于许多不同的事情,包括增加的加密层,以我的无线网络流量)。我通常使用的命令如下所示:
ssh -l raam -D 9000 my-linux-server.com
Run Code Online (Sandbox Code Playgroud)
启动隧道后,我将 Web 浏览器配置为使用端口 9000 的 127.0.0.1 SOCKS v5 代理。现在浏览器中的所有流量(DNS 除外)都通过 SSH 隧道传输。
当我准备关闭隧道时(例如,当我将笔记本电脑带到另一个位置时),我只需键入“ logout”。但是,SSH 会话挂起,我必须按CTRL+c才能恢复本地提示。
为什么会发生这种情况,我该如何预防?
(我的猜测是我通过隧道打开的连接保持打开状态,我的本地 SSH 客户端正在等待它们关闭,然后再给我提示。如果是这种情况,我如何强制所有这些连接在我'我准备退出?)
我想设置一个 SSH 隧道以作为 Windows 服务运行,我需要能够仅使用命令行来设置它,因此这会计算出任何不包含命令行版本的软件。
我可以使用哪些适用于 Windows 的工具来执行此操作?
如何设置 SSH 命令以允许端口转发但不执行命令。
我知道 ssh 登录可以使用 -N 来停止执行命令,但是可以设置 ssh 配置文件来禁止它吗?
在 Linux 中限制 shell 的类型和路径是可选的,但是可以在 SSH 配置本身中完成吗?
假设我有一个 SSH 服务器,启用了端口转发。用户建立 SSH 连接并通过它转发 BitTorrent 流量或其他非法或滥用流量是相当简单的。如何设置日志记录以记录用户所做的端口转发?
我正在尝试将 Web 流量从远程服务器转发到我的本地计算机,以测试一些 API 集成(tropo、paypal 等)。基本上,我正在尝试设置类似于 tunnlr.com 提供的内容。
我已经使用命令启动了 ssh 隧道
$ssh –nNT –R :7777:localhost:5000 user@server
然后我可以看到服务器现在正在侦听端口 7777
user@server:$netstat -ant | grep 7777
tcp 0 0 127.0.0.1:7777 0.0.0.0:* LISTEN
tcp6 0 0 ::1:7777 :::* LISTEN
$user@server:curl localhost:7777
Hello from local machine
Run Code Online (Sandbox Code Playgroud)
所以这很好用。curl 请求实际上是从本地机器提供的。
现在,我如何启用 server.com:8888 以通过该隧道路由?
我试过像这样使用 nginx:
upstream tunnel {
server 0.0.0.0:7777;
}
server {
listen 8888;
server_name server.com;
location / {
access_log /var/log/nginx/tunnel-access.log;
error_log /var/log/nginx/tunnel-error.log;
proxy_pass http://tunnel;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off; …Run Code Online (Sandbox Code Playgroud) 让我们假设以下主机:
我无权sudo访问remoteserver,因此我无法使用 root 用户进行更改。
问题是:是否可以通过单个命令从remoteserver访问private.remoteserver上的端口?
我在没有运气的情况下玩过 ssh 隧道。它想为private.remoteserver创建一个 SSH 别名,如本文所述。
例如,我想从本地主机运行:
curl http://private.remoteserver:8080/
Run Code Online (Sandbox Code Playgroud)
连接到 private.remoteserver 上的端口 8080。这可能吗?
因此,我最近需要从我们的海外办事处之一通过 Internet 提取大文件。两个办公室在两个方向上都有 50Mbit 的光纤链路,但往返时间很可怕,从正常情况下的 450 毫秒到糟糕一天的 750 毫秒不等。
最初,我尝试通过 VPN 连接拉取文件,但在几次传输失败(smb 确实在慢速链接上很糟糕)并且速度达到最大约 128kBps 后,一个快速的谷歌显示我遇到了 Windows TCP 窗口缩放问题。
从那以后,我通过商业私有云类型服务推送文件,该服务更快地将文件发送到这里,因此以下内容更多是出于好奇心。
更有趣的是,两端的互联网访问都是通过 http 代理进行的。但是,我在两端的机器上都拥有管理员权限。
你将如何获得更好的速度?
我尝试过的事情:
1)两台linux虚拟机之间的普通SFTP,使用corkscrew打孔通过http代理和第三个中介将两端连接在一起。达到的速度:大约 600kBps。
2) SFTP 但使用用 HPN-SSH 修补的 OpenSSH。开瓶器和中间配置与 1) 相同。几乎没有速度提升。
3) 按照 2 但使用 LFTPpget -c -n 10将传输分成块。这是迄今为止最好的,看到 3.5MBps ...
欢迎所有改进。
我正在尝试通过 ssh 隧道连接到 NAT 后面的服务器:
从笔记本电脑 ssh --> 在防火墙中使用端口转发的主机 --> 直接进入来宾(172.16.0.2,在主机 NAT 后面)。
在主机上使用 iptables - 它会起作用:
# iptables -I OUTPUT -d 0.0.0.0/0 -j ACCEPT
# iptables -I FORWARD -d 0.0.0.0/0 -j ACCEPT
# iptables -I INPUT -d 0.0.0.0/0 -j ACCEPT
# iptables -t nat -I PREROUTING -d 0.0.0.0/0 -p tcp --dport 222 -j DNAT --to-destination 172.16.0.2:22
Run Code Online (Sandbox Code Playgroud)
但是,主机重启时不会保存 iptables,因为 firewalld 服务正在运行(firewalld 是 RHEL 7 中的默认设置)。
所以我正在尝试使用 firewall-cmd进行相同的端口转发。
在主机上使用 firewall-cmd - 它不起作用:
# firewall-cmd --permanent --zone=public …Run Code Online (Sandbox Code Playgroud)