我经常遇到这种情况:我将其转移到远程服务器并运行一些程序,我想将其输出文件复制回本地机器.我所做的是记住远程机器上的文件路径,退出连接,然后scp user @ remote:filepath.
显然这不是最佳的.我正在寻找的是让我将文件恢复到本地机器而不退出连接的一种方式.我做了一些搜索,几乎所有的结果告诉我如何从本地机器,我已经知道的scp.
这可能吗?更好的是,是否可能不需要知道我的本地机器的IP地址?
解决方法
鉴于您在本地计算机上运行了sshd,因此可能需要知道您的IP地址.如果启用SSH端口转发,即使已经打开了ssh连接,也没有终止,您可以打开安全通道.
假设你有一个ssh连接到一些服务器:
local $ssh user@example.com Password: remote $echo abc > abc.txt # now we have a file here
好的,现在我们需要将该文件复制回本地服务器,由于某种原因我们不想打开一个新的连接.好的,我们通过按Enter键C(输入,然后是波浪号,然后是大写字母C)得到ssh命令行:
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,可以帮助.