OpenSSH 客户端有一个用于端口转发的命令行选项,使用方式如下:
ssh -L localport:server:serverport user@host
它将连接到host
as user
,同时localport
在客户端上重定向到serverport
on server
(可以是host
或host
通过网络可访问的任何内容)。
现在假设我已经通过 SSHhost
进行了操作
ssh user@host
在会话进行到一半时,我意识到我忘记转发端口。唉,我正在做某事,所以我不想注销并通过端口转发重新建立 SSH 连接。
有没有办法将端口转发添加到正在运行的 SSH 会话?
答案1
转义字符
当请求伪终端时,ssh 通过使用转义字符支持许多功能。
单个波浪线字符可以作为波浪线
~~
字符发送,也可以在波浪线后面加上除下述字符以外的字符来发送。转义字符必须始终跟在换行符之后才能被解释为特殊字符。可以使用EscapeChar
配置指令在配置文件中或通过选项在命令行上更改转义字符-e
。支持的转义(假设默认
~
)是:[…]
~C
打开命令行。目前,这允许使用-L
、-R
和选项添加端口转发-D
(见上文)。 [...] 使用 -h 选项可以获得基本帮助。
所以输入Enter~
C(即首都c), 那么
-L localport:server:serverport
与所期望的localport
,server
以及serverport
,最后Enter。
笔记:
初始值Enter将立即发送到远程端,并可能会在那里引起一些操作,因此请选择一个好时机(例如,当您处于具有空命令行的 shell 中时)。或者如果你确定无论如何,您输入的最后一件事Enter(例如,您刚刚调用了一个正在运行的命令),您可以直接启动,
~
因为Enter您的本地ssh
.在国际化键盘上,波形符可能是生成特殊“波形符”字符的死键(例如按~n生成
ñ
)。在这种情况下,可能需要按SPACEafter~来生成单个波形符,即:ENTER~SPACEC。在西班牙语/LA 键盘布局的情况下,由于没有使用波形符和 C 的组合字符,因此可以省略空格并生成~C所需的序列。对于多个重定向,
ssh
转义的命令行仅接受单个命令。您应该再次按键盘序列以输入另一个命令或重定向。
答案2
您可以有多个 ssh 连接。端口转发可以独立于正在运行的连接来执行。此外,它必须在客户端执行-L
。
您可以添加-N -f
到命令中以从另一个终端窗口将其置于后台,并且不发送任何ENTER.此后台可能无法在 Windows 中正常工作,只需最小化终端即可。
就在这里另一个答案涵盖~C。