我通过 ssh 连接到远程主机。要将某些内容从远程主机复制到本地主机,我可以使用 scp 进行复制。
但是,这需要输入远程主机上文件的完整路径。我已经位于 ssh 连接上的文件目录中。是否存在一种方法可以使用远程主机上当前打开的连接将文件复制回我的连接主机(即我的本地计算机)?
我发现这已经回答了。然而,这需要连接主机有可路由的 IP。我没有那个。
答案1
是否存在一种方法可以使用远程主机上当前打开的连接将文件复制回我的连接主机(即我的本地计算机)?
当然!但我们需要深入了解串行线路连接的古老世界……那时,您和远程计算机之间唯一的东西就是铜线,并且“IP 地址”并不存在(对于大多数人来说) ),因此没有任何选项可以与远程主机建立某种带外连接。
我们当时使用的许多工具都保留到了现代,并且一路上拾取了各种网络技巧,因为串行连接不是唯一的选择......但他们保留了其余的功能集,包括对“的支持”内联”文件传输协议(即在现有连接上运行的传输协议,而不是打开新连接)。
这里有两种解决方案可以满足您的需求;在这两种情况下,您都需要在本地安装软件和远程主机。
使用克米特
安装克米特在本地和远程主机上。
用于
kermit
建立到远程主机的 ssh 连接:kermit -EC 'ssh remotehost.example.com'
在远程主机上使用
kermit
来启动文件传输:remotehost$ kermit -s somefile.txt
观看本地 Kermit 自动进入接收模式并接收文件。您将看到它显示在本地当前工作目录中。
使用屏幕+lrzsz
你可以使用类似的方法屏幕和罗志祥包,其中包括一个调制解调器执行。
本地安装
screen
。lrzsz
在本地和远程主机上安装。编辑您的内容
~/.screenrc
以包括:zmodem catch
启动一个新
screen
会话并连接到远程主机:screen -e '' ssh remotehost.example.com
使用
sz
命令传输文件:remotehost$ sz somefile.txt
rz
这将在屏幕底部弹出一个命令,只需按 即可<return>
。观看文件传输到本地系统的情况。和以前一样,您将在本地当前工作目录中找到该文件。
使用 zssh + lrzsz
咩咩是理解 Zmodem 转义的 ssh 包装器。该过程看起来几乎与上一节完全相同,但您使用zssh
而不是屏幕:
lrzsz
在本地和远程主机上安装。连接到远程主机:
localhost$ zssh remotehost
启动文件传输:
remotehost$ sz somefile.txt
键入
CTRL-SPACE
以进入文件传输模式并键入rz
(然后<return>
)。
我在 Fedora 36 上运行,这里提到的所有内容(kermit、screen、lrzsz、zssh)都可以作为软件包提供;要获得“以上所有内容”,您可以运行:
sudo yum install screen ckermit zssh lrzsz
在其他发行版上,您可能需要手动安装。