我经常遇到这种情况:我遇到了远程服务器并运行了一些程序,我想将他们的输出文件复制回我的本地机器.我所做的是记住远程机器上的文件路径,然后退出连接scp user@remote:filepath .
显然这不是最佳的.我正在寻找的是一种方法,让我scp文件回到本地机器而不退出连接.我做了一些搜索,几乎所有的结果都告诉我如何从我的本地机器上做scp,我已经知道了.
这可能吗?更好的是,是否可以不需要知道我本地机器的IP地址?
afe*_*ter 28
假设您sshd在本地计算机上运行,则可能并且您不需要知道您的传出IP地址.如果启用了SSH端口转发,即使已经打开ssh连接并且没有终止它,也可以打开安全隧道.
假设您与某个服务器有ssh连接:
local $ ssh user@example.com
Password:
remote $ echo abc > abc.txt # now we have a file here
Run Code Online (Sandbox Code Playgroud)
好了,现在我们需要将该文件复制回本地服务器,由于某种原因我们不想打开新连接.好的,让我们通过按Enter ~C(Enter,然后是tilde,然后是大写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
Run Code Online (Sandbox Code Playgroud)
这就像常规-L/R/D选项一样.我们需要-R,所以我们Enter ~C再次点击并键入:
ssh> -R 127.0.0.1:2222:127.0.0.1:22
Forwarding port.
Run Code Online (Sandbox Code Playgroud)
在这里,我们将远程服务器的端口2222转发到本地机器的端口22(这里是您需要在端口22上启动本地SSH服务器的地方;如果它正在侦听其他端口,请使用它而不是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
Run Code Online (Sandbox Code Playgroud)
我们完了!
remote $ exit
logout
Connection to example.com closed.
local $ cat abc.txt
abc
Run Code Online (Sandbox Code Playgroud)
棘手,但如果你真的不能scp从另一个终端运行,可以提供帮助.
我发现SU 上的这一行解决方案比公认的答案要简单得多。由于它使用本地IP地址的环境变量,我认为它也满足了OP预先不知道它的要求。
基于此,这里有一个 bash 函数来“下载”文件(即从 SSH 会话推送到本地计算机上的设定位置)
function dl(){
scp "$1" ${SSH_CLIENT%% *}:/home/<USER>/Downloads
}
Run Code Online (Sandbox Code Playgroud)
dl somefile.txt现在,我可以在通过 SSH 连接到远程时进行调用,并somefile.txt显示在我的本地下载文件夹中。
额外:
注意:这需要从远程通过 SSH 访问本地计算机(任何人都经常遇到这种情况吗?)
| 归档时间: |
|
| 查看次数: |
14416 次 |
| 最近记录: |