我经常面临这样的情况:我进入一个远程服务器并运行一些程序,我想把它们的输出文件复制回本地机器.我要做的是记住远程机器上的文件路径,退出连接,然后返回scp user@remote:filepath .
显然,这不是最优的.我要寻找的是一种方法,让我的scp文件回到本地机器,而不退出连接.我做了一些搜索,几乎所有的结果都告诉我如何在我的本地机器上进行scp,我已经知道了.
这可能吗?更好的是,不需要知道本地机器的IP地址就可以了吗?
我经常面临这样的情况:我进入一个远程服务器并运行一些程序,我想把它们的输出文件复制回本地机器.我要做的是记住远程机器上的文件路径,退出连接,然后返回scp user@remote:filepath .
显然,这不是最优的.我要寻找的是一种方法,让我的scp文件回到本地机器,而不退出连接.我做了一些搜索,几乎所有的结果都告诉我如何在我的本地机器上进行scp,我已经知道了.
这可能吗?更好的是,不需要知道本地机器的IP地址就可以了吗?
考虑到本地机器上运行的是sshd
,这是可能的,而且您不需要知道传出的IP地址.如果启用了SSH端口转发,即使您已经打开了SSH连接,也可以打开一个安全 tunel ,而无需终止它.
假设您有一个到某个服务器的ssh连接:
local $ ssh user@example.com
Password:
remote $ echo abc > abc.txt # now we have a file here
好的,现在我们需要将该文件复制回本地服务器,出于某种原因,我们不想打开新连接.好的,让我们通过按Enter ~C
来获取ssh命令行(Enter,然后是tilde,然后是大写字母C):
ssh> help
Commands:
-L[bind_address:]port:host:hostport Request local forward
-R[bind_address:]port:host:hostport Request remote forward
-D[bind_address:]port Request dynamic forward
-KR[bind_address:]port Cancel remote forward
这就像常规的-L/R/D
个选项一样.我们需要-R
,所以我们再次点击Enter ~C
并键入:
ssh> -R 127.0.0.1:2222:127.0.0.1:22
Forwarding port.
在这里,我们将远程服务器的端口2222转发到本地机器的端口22(在这里,您需要在端口22上启动本地SSH服务器;如果它正在侦听其他端口,请使用它,而不是22).
现在只需在远程服务器上运行scp
,并将文件复制到远程服务器的端口2222,该端口映射到本地机器的端口22(本地sshd
正在运行).
remote $ scp -P2222 abc.txt user@127.0.0.1:
user@127.0.0.1's password:
abc.txt 100% 4 0.0KB/s 00:00
我们完了!
remote $ exit
logout
Connection to example.com closed.
local $ cat abc.txt
abc
这很棘手,但如果你从另一个终端运行scp
,可能会有所帮助.