当#39;已经ssh进入远程机器时,如何scp回到本地?

时间:2014-08-25 08:44:41

标签: linux ssh scp

我经常遇到这种情况:我遇到了远程服务器并运行了一些程序,我想将他们的输出文件复制回我的本地机器。我所做的是记住远程机器上的文件路径,退出连接,然后scp user@remote:filepath .

显然这不是最佳选择。我正在寻找的是一种方法,让我scp文件回到本地机器而不退出连接。我做了一些搜索,几乎所有结果都告诉我如何从我的本地机器上做scp,我已经知道了。

这可能吗?更好的是,是否可以在不知道本地机器的IP地址的情况下使用它?

4 个答案:

答案 0 :(得分:24)

如果您在本地计算机上运行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其他端口,用它代替22)。

现在只需在远程服务器上运行scp并将我们的文件复制到远程服务器的端口2222,该端口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,可能会有所帮助。

答案 1 :(得分:1)

我发现SU上的this one-liner solution比接受的答案简单得多。由于它使用本地IP地址的环境变量,因此我认为它也满足OP事先不知道的请求。

基于此,这是一个bash函数,用于“下载”文件(即,从SSH会话推送到本地计算机上的设置位置)

function dl(){
    scp "$1" ${CLIENT_IP%% *}:/home/<USER>/Downloads
}

现在,我可以在SSH进入远程服务器的同时调用dl somefile.txt,并且somefile.txt会出现在我的本地Downloads文件夹中。

额外内容:

  • 我使用rsa键(ssh-copy-id)避开密码提示
  • 我发现this trick是为了防止本地bashrc来自scp调用

注意:这需要通过SSH从远程访问本地计算机(通常是任何人吗?)

答案 2 :(得分:0)

您需要在您的计算机上运行本地ssh服务器,然后您可以:

    scp [-r] local_content your_local_user@your_local_machine_ip:

无论如何,您不需要关闭远程连接来制作远程拷贝,只需打开另一个终端并在那里运行scp。

答案 3 :(得分:-2)

在您的本地计算机上:

scp root @ remotemachine_name_or_IP:/ complete_path_to_file / local_path