![](/img/trans.png)
[英]How can I schedule a script to copy a file from a remote server to my local machine every hour with a time stamp using CRON & SCP?
[英]How to scp back to local when I've already sshed into remote machine?
我经常遇到这种情况:我连接到远程服务器并运行了一些程序,我想将它们的 output 文件复制回我的本地计算机。 我所做的是记住远程机器上的文件路径,退出连接,然后scp user@remote:filepath.
显然这不是最优的。 我正在寻找的是一种让我 scp 文件回到本地机器而不退出连接的方法。 我做了一些搜索,几乎所有结果都告诉我如何从我已经知道的本地机器上执行 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
,可以提供帮助。
我发现SU上的这种单线解决方案要比接受的答案简单明了。 由于它使用环境变量作为本地IP地址,我认为它也满足OP的要求,不提前知道它。
基于此,这里有一个bash函数“DownLoad”一个文件(即从SSH会话推送到本地机器上的设置位置)
function dl(){
scp "$1" ${CLIENT_IP%% *}:/home/<USER>/Downloads
}
现在我可以调用dl somefile.txt
同时SSH进入远程, somefile.txt
出现在我的本地Downloads文件夹中。
演员:
注意:这需要从远程SSH访问本地计算机(对于任何人来说通常都是这种情况吗?)
其他答案非常好,大多数用户应该能够使用它们。 但是,我发现接受的答案有点麻烦,而其他答案不够灵活。 中间的 VPN 服务器也给我造成了麻烦,因为我无法确定 IP 地址。
因此,我使用的解决方法是在我的.bashrc
文件中使用以下 function 在远程系统上生成所需的scp
命令:
function getCopyCommand {
echo "scp user@remote:$(pwd)/$1 ."
}
如果本地系统几乎是远程服务器的镜像(包括用户名)并且我还需要复制目录结构,我发现rsync
会更有用。
function getCopyCommand {
echo "rsync -rvPR user@remote:$(pwd)/$1 /"
}
然后将生成的 scp 或 rsync 命令简单地粘贴到我的本地终端上以检索文件。
您需要在您的计算机上运行本地ssh服务器,然后您可以:
scp [-r] local_content your_local_user@your_local_machine_ip:
无论如何,您不需要关闭远程连接来制作远程复制,只需打开另一个终端并在那里运行scp。
在您的本地计算机上:
scp root @ remotemachine_name_or_IP:/ complete_path_to_file / local_path
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.