标签: ssh-tunnel

如何确定服务器上为动态绑定的 openssh 反向隧道分配的端口?

在最新版本的 OpenSSH 上创建反向隧道时,可以指定远程端口 0 来绑定任何可用端口:

-R [bind_address:]port:host:hostport

...

如果端口参数为“0”,则侦听端口将在服务器上动态分配并在运行时报告给客户端。

openssh ssh 客户端联机帮助页

我的问题是如何(以自动方式)确定服务器上的此端口分配。向运行 ssh 客户端的主机报告它似乎没有帮助 - 但不是向目标报告,目标将要连接到此端口以访问客户端上的服务。

我能想到的两个类似选项正在运行

# netstat -ntlp
Run Code Online (Sandbox Code Playgroud)

在服务器上并通过 sshd 或查看输出来查找绑定在 127.0.0.1 上的可疑端口

# lsof -p $PPID | grep TCP | grep LISTEN
Run Code Online (Sandbox Code Playgroud)

但是从自动化的角度来看,这两种方法都不是令人愉快的,如果创建了多个这样的隧道,则没有任何方法可以将动态端口绑定回原始服务端口。

在 sshd 服务器端有效地获取活动隧道列表(本地和远程端口号)是否有任何遗漏,例如相当于 SSH_CONNECTION 环境变量,但对于活动隧道?

对于某些情况,我正在尝试创建可能非常多的并发反向隧道到主机,隧道返回到许多不同主机上的相同端口号。让 TCP 堆栈自动管理端口池似乎是最有效的方法。

ssh openssh ssh-tunnel

16
推荐指数
1
解决办法
4109
查看次数

是否有适用于 Windows 的 sshuttle 等效项 - 适用于 Windows 的 ssh 隧道

长期以来,我一直在我的 linux 桌面上使用 sshuttle 来规避越南 ISP 的限制。但是我想知道是否有类似的易于使用的Windows软件?可以通过 ssh 隧道重定向所有/选定流量的东西?

windows ssh-tunnel sshuttle

15
推荐指数
3
解决办法
3万
查看次数

Windows 10 上的 SSH 隧道到 Linux Samba

我知道这个问题已经被问过几次了,但我认为我的问题可能略有不同。也许我不了解问题的基本原理。

我有一个 Linux Samba 共享,我想通过 ssh 隧道从 Windows 中使用它。当我在 VPN 上时,我可以访问 Samba 共享,并且隧道端口 139 在 Linux 上工作正常。当我从 VPN 之外的 Linux 机器访问共享时,我需要做的就是像这样转发端口 139:

ssh user@remotehost -L 1139:localhost:139
Run Code Online (Sandbox Code Playgroud)

然后挂载驱动:

mount -t cifs //remotehost/shared /mnt/cifs -o username=myuser,password=mypass,ip=127.0.0.1,port=1139
Run Code Online (Sandbox Code Playgroud)

对于 Windows,我尝试按照教程通过 PuTTY 创建环回适配器和隧道:http : //www.nikhef.nl/~janjust/CifsOverSSH/Win8Loopback.html

这不起作用,所以我尝试遵循使用端口 139 而不是 445 的不同教程:https : //www.simonholywell.com/post/2009/04/samba-file-share-over-ssh-tunnel/

这两个教程都没有奏效,所以我想我的第一个问题是我实际上需要转发这些端口中的哪一个?我需要端口 139、端口 445 还是两者都需要?我不明白这可能是什么问题。

如果您需要任何其他信息,请告诉我,我曾尝试使用 nmap 进行故障排除,但没有取得任何进展。

ssh samba cifs ssh-tunnel windows-10

14
推荐指数
2
解决办法
3万
查看次数

本地IP转发和远程IP转发有什么区别?

两者在功能上有什么区别?我有点困惑。

本地转发使远程端口在本地可用。

远程转发使本地端口远程可用。

但是这种“可用性”将在两个方向上起作用......或者是吗?

例如以下(从主机“家”发出)

ssh -R 1234:localhost:2345 user@work
Run Code Online (Sandbox Code Playgroud)

这将在 work::1234 和 home::2345 之间建立安全隧道,对吗?

如果我在一端放入任何东西,它就会从另一端出来。

但是,我可以通过来自主机“工作”的以下调用来实现相同的目的:

ssh -L 1234:localhost:2345 user@home
Run Code Online (Sandbox Code Playgroud)

所以,唯一的区别是我从哪里调用它,对吗?

ssh ssh-tunnel

12
推荐指数
2
解决办法
4万
查看次数

SSH 隧道到家庭网络,并访问路由器 Web 界面

我正在尝试使用远程位置的 ssh 隧道连接到我的家庭网络并访问路由器 Web 界面。

我可以通过 SSH 访问家庭网络,并且可以连接到网关机器“Lounge”。(例如 192.168.1.100)

我需要做什么来通过“休息室”将 Web 请求代理到家庭网络上的路由器 (192.168.1.1),以便我可以从远程位置查看它?

如果它有所不同,则“休息室”机器正在运行 OS X。

我想要一个仅限 ssh/命令行的解决方案,谢谢。

ssh ssh-tunnel macos

11
推荐指数
2
解决办法
2万
查看次数

相当于 Windows 服务器的 ssh 端口隧道?

我的家是 Linux 服务器,在那里 SSH 总是可以用来绕过稍微限制性太强的防火墙。然而,在工作中,我们处理的所有服务器都是基于 Windows 的。

我需要连接到在 Windows 2008 服务器上运行的 SQL Server 2000 实例。服务器位于防火墙后面,该防火墙似乎阻止了除远程桌面之外的所有传入端口。假设有一个 VPN,但由于某种原因它已经消失了,根据我们最终访问远程桌面的速度来判断,可能需要几周的时间才能在防火墙或用户中设置异常添加到 VPN。

所以现在我正在寻找一个快速解决方案来解决它。绕过它的最佳方法是什么?

此外,我们用来连接到服务器的计算机运行的是 Windows 7。我们拥有对服务器的管理员访问权限,但我们不希望永久安装任何东西

windows ssh vpn windows-server-2008 ssh-tunnel

11
推荐指数
1
解决办法
8612
查看次数

使用端口转发时如何恢复大型 scp 文件传输?

我有一台机器在几跳之外,我需要设置端口转发才能传输文件。

编辑:需要明确的是,需要多跳才能访问远程机器。在我的机器上,我设置了一个 VPN,我可以在其中访问 10.255.xx - 这是我可以通过 VPN 连接的唯一机器。一旦登录到 .xx,我就可以连接到其他机器 - .yy 就是其中之一。

从我的机器:

ssh -L 4567:localhost:4567 me@10.255.x.x
Run Code Online (Sandbox Code Playgroud)

然后从那台机器:

ssh -L 4567:localhost:22 me@10.255.y.y
Run Code Online (Sandbox Code Playgroud)

那我可以

scp -P 4567 me@localhost:/path/to/large/file.gz .
Run Code Online (Sandbox Code Playgroud)

我让这个运行过夜,才发现转移在某个时候死了。

我已经看到一些建议使用 rsync over ssh 来恢复传输,但我不清楚如何设置。这可能吗?

ssh rsync file-transfer scp ssh-tunnel

11
推荐指数
3
解决办法
2万
查看次数

查找原始机器的 IP 或主机名 (ssh)

我不断地从不同的物理位置(以及不同的物理机器)连接到许多机器。其中大部分是通过 ssh 完成的,有时需要一两台网关机器(我通过ProxyCommandin调用~/.ssh/config)。我想知道是否有一种方法可以识别远程端调用初始连接(即我正在使用的机器)的机器的 IP 或主机名?

  • 我不想发送环境变量,因为有些机器我没有 root 可以设置PermitUserEnvironment
  • $SSH_CLIENT环境变量是用于直接连接有用,但只列出最近的网关。

我目前对解决方案的想法是抓取$SSH_CLIENT,ssh 到它,找到该机器的$SSH_CLIENT值并重复直到它不存在;然后获取主机名并以某种方式将其拉回。

不过看起来有点像黑客工作;有人有更好的方法吗?

我主要在 bash shell 中工作,但我也很高兴任何不使用它的建议。

linux ssh environment-variables hostname ssh-tunnel

10
推荐指数
1
解决办法
1万
查看次数

使用密钥的 ssh 内联代理跳转不起作用

我需要通过代理跳转建立到远程服务器的连接。我正在尝试使用 -J 标志来做到这一点。据我了解,语法如下:

ssh -J A B
Run Code Online (Sandbox Code Playgroud)

但我需要对两个连接使用密钥文件。所以我尝试过这个:

ssh -J -i /path/proxy.pem user@proxy_host -i /path/target.pem user@target_host
Run Code Online (Sandbox Code Playgroud)

显然它不起作用,我得到了

option requires an argument -- i
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-E log_file] [-e escape_char]
           [-F configfile] [-I pkcs11] [-i identity_file]
           [-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec]
           [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address]
           [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]
           [user@]hostname [command]
ssh_exchange_identification: Connection closed by remote host
Run Code Online (Sandbox Code Playgroud)

在这种情况下,在不编辑 ssh 设置的情况下,正确的内联语法是什么?在这种情况下,密钥存储在哪个服务器上没有区别。

ssh ssh-tunnel

10
推荐指数
1
解决办法
1万
查看次数

如果我使用 SSH 隧道绕过防火墙,系统管理员会看到什么?

我使用 SSH 隧道作为浏览器用来访问互联网的端口。结果是我绕过了我的网络使用的防火墙,这阻止了我使用我想使用的许多站点(facebook,任何人?)。如果我像这样建立 SSH 隧道,系统管理员会看到我的互联网历史记录吗?他只是看到一个SSH连接,然后加密信息吗?或者他能以某种方式看到我在 facebook 上,而 SSH 隧道只对防火墙足够好?

security firewall ssh-tunnel

9
推荐指数
2
解决办法
4380
查看次数