是否可以在登录远程且不知道本地 IP 地址的情况下从远程 SCP 到本地?

jnt*_*lrk 38 remote scp local

我经常发现自己想将文件从远程终端会话复制到我的本地机器。通常我退出远程会话并从本地调用 scp 传输以将文件从远程复制到本地。但这感觉有点啰嗦。我想在通过 SSH 登录远程时传输文件以节省时间。我的本地机器从动态 IP 范围连接到互联网,所以我不太确定如何远程连接到它。但是可以肯定的是,由于远程会话来自我的笔记本电脑,因此 scp 中必须有一个快捷方式才能回到我的笔记本电脑......对吗?

小智 23

您可以为此使用SSH 隧道

使用隧道,您可以将 TCP 端口从本地计算机转发到远程计算机,或从远程计算机转发到本地计算机。我经常使用它来将 SMTP 或 IMAP 端口从防火墙后面的远程机器转发到我的本地机器(然后在本地访问服务,就好像它们在本地运行一样)。

要将端口 22 (SSH) 从本地计算机转发到远程计算机,请尝试以下操作:

ssh -R12345:localhost:22 yourremoteuser@remotemachine
Run Code Online (Sandbox Code Playgroud)

(注意localhost指的是远程机器的本地名称)

运行此程序后,您应该可以使用以下命令 ssh 返回家中:

ssh -p12345 yourlocaluser@127.0.0.1
Run Code Online (Sandbox Code Playgroud)

使用 scp 时,您会执行以下操作(scp 有一个大写的 P 用于端口转发):

scp -P12345 filename 127.0.0.1:/tmp/filename
Run Code Online (Sandbox Code Playgroud)

另一个方向(从远程到本地)的端口转发使用 -L 而不是 -R。

上述命令假设您使用的是终端 ssh 客户端。图形客户端,如适用于 Windows 的 PuTTY,也支持隧道

  • 除非我错过了一些东西,否则 OP 从当前远程机器连接回本地应该没问题。隧道将通过 SSH 会话完成。当从动态本地机器到远程机器建立 SSH 连接时,它将成功,因此能够在远程机器上设置一个监听端口,该端口通过隧道返回到它的来源。 (3认同)
  • 通过使用 `~C` 转义设置远程端口转发,您可以更方便地使用它。只需输入`<Enter>~CR 12345:localhost:22<Enter>`,您就拥有了隧道,而无需离开已建立的 SSH 会话。 (3认同)

小智 7

在远程机器的命令行中尝试以下操作,您可能需要在路由器上启用端口转发。

scp <file on remote machine> ${SSH_CLIENT%% *}:<directory on local machine>
Run Code Online (Sandbox Code Playgroud)

来源:轻松将文件 scp 发送回您正在连接的主机(commandlinefu.com)

  • 这可以通过在 shell rc 文件中添加类似 `export ME="${SSH_CLIENT%% *}"` 的内容来进一步改进。然后你可以简单地使用 `scp &lt;file&gt; $ME:&lt;local path&gt;` (2认同)