Answers:
您可以为此使用SSH隧道。
使用隧道,您可以将TCP端口从本地计算机转发到远程计算机,或者从远程计算机转发到本地计算机。我经常使用它来将SMTP或IMAP端口从防火墙后面的远程计算机转发到本地计算机(然后在本地访问服务,就像它们在本地运行一样)。
要将端口22(SSH)从本地计算机转发到远程计算机,请尝试以下操作:
ssh -R12345:localhost:22 yourremoteuser@remotemachine
(请注意,localhost是指远程计算机的本地名称)
运行此命令后,您应该可以使用以下命令将其返回ssh:
ssh -p12345 yourlocaluser@127.0.0.1
使用scp时,您将执行以下操作(scp具有用于端口转发的大写字母P):
scp -P12345 filename 127.0.0.1:/tmp/filename
在另一个方向(从远程到本地)的端口转发使用-L而不是-R。
以上命令假定您正在使用终端ssh客户端。图形客户端(如Windows的PuTTY)也支持隧道
在远程计算机上的命令行中尝试以下操作,您可能需要在路由器上启用端口转发。
scp <file on remote machine> ${SSH_CLIENT%% *}:<directory on local machine>
来源:轻松将文件解析回您要从其连接的主机(commandlinefu.com)
${SSH_CLIENT%% *}
输出本地计算机的IP。因此,整个命令打开了从远程计算机到本地计算机的scp会话以进行文件传输。仅当您可以从远程计算机SSH到本地计算机时才能执行此操作。
export ME="${SSH_CLIENT%% *}"
在shell rc文件中添加类似内容来进一步改进 。然后,您可以简单地使用scp <file> $ME:<local path>
提出了这个问题,这也是我想轻松实现的。
这里是相关的答案:当我不在家庭网络之外时,如何从远程计算机到本地计算机进行SCP?
您需要允许从网络外部访问ssh。这是通过将宽带路由器上的端口转发到服务器的局域网来完成的。但是,从外部允许ssh访问存在一些安全问题,因此您可能还想研究保护ssh(尤其是基于密钥的身份验证)和完全禁用密码身份验证的方法。
一种解决方案是挂起本地计算机上的ssh会话,在本地计算机上执行复制,然后在上次中断的地方恢复ssh会话。
例如,假设我已连接到myuser @ remote,并且要将文件lol.txt复制到本地计算机。首先,我想在本地计算机上挂起ssh。通常,您将使用Ctrl- Z挂起,但这在ssh中将不起作用,因为它将被发送到远程shell。相反,您必须使用ssh转义序列Enter~。因此要暂停ssh,请按Enter~ Ctrl- Z。现在您可以在本地计算机上运行命令,并且可以执行
user@localmachine:~$ scp user@remote:/path-to-file/lol.txt /dest-path/lol.txt
复制文件,然后完全返回到ssh所在的位置
user@localmachine:~$ fg