sor*_*rin 5 ssh portforwarding
这种情况的用例是使用SSH建立临时端口转发,运行本地命令并在此之后退出并关闭ssh连接。
我再说一遍,该命令必须在本地运行,而不是在删除站点上。
例如,您在DMZ中有一台服务器,并且您需要允许计算机中的应用程序连接到该计算机的端口8080,但是您只能通过SSH访问该计算机。
假设您从命令行使用 OpenSSH....
SSH 可以打开一个连接来维持隧道并尽可能长时间保持活动状态:
ssh -fNT -Llocalport:remotehost:remoteport targetserver
Run Code Online (Sandbox Code Playgroud)
您也可以让 SSH 在运行一段时间的服务器上启动一些东西。届时隧道将开放。只要隧道仍在使用,SSH 连接就应该在远程命令退出后保持。如果您只使用隧道一次,则指定一个简短的“睡眠”,让隧道在使用后过期。
ssh -f -Llocalport:remotehost:remoteport targetserver sleep 10
Run Code Online (Sandbox Code Playgroud)
如果您希望能够从本地运行的脚本中杀死隧道,那么我建议您在 shell 中将其作为后台,然后记录 pid 以供稍后杀死。假设您使用的操作系统包含 Bourne shell ....
#/bin/sh
ssh -f -Llocalport:remotehost:remoteport targetserver sleep 300 &
sshpid=$!
# Do your stuff within 300 seconds
kill $sshpid
Run Code Online (Sandbox Code Playgroud)
如果您不喜欢使用 shell 将 ssh 设为后台,您还可以使用高级 ssh 功能来控制后台进程。如此处所述,SSH 功能ControlMaster以及ControlPath您如何使其工作。例如,将以下内容添加到您的~/.ssh/config:
host targetserver
ControlMaster auto
ControlPath ~/.ssh/cm_sockets/%r@%h:%p
Run Code Online (Sandbox Code Playgroud)
现在,您的第一个连接targetserver将设置一个控件,以便您可以执行以下操作:
$ ssh -fNT -Llocalport:remoteserver:remoteport targetserver
$ ssh -O check targetserver
Master running (pid=23450)
$ <do your stuff>
$ ssh -O exit targetserver
Exit request sent.
$ ssh -O check targetserver
Control socket connect(/home/sorin/.ssh/cm_socket/sorin@192.0.2.3:22): No such file or directory
Run Code Online (Sandbox Code Playgroud)
显然,这些命令也可以包装到您的 shell 脚本中。
| 归档时间: |
|
| 查看次数: |
3100 次 |
| 最近记录: |