有没有办法从通过 ssh 连接的远程服务器获取文件,只需get file
在 ssh 会话中运行命令即可?有没有方法或预先存在的工具可以做到这一点?将路径复制并粘贴到另一个终端的 sftp 命令中很慢,因此最好有像这样的快速方法。
答案1
如果您可以通过 SSH 连接到原始客户端主机,则可以使用该scp
命令复制文件。示例会话可能如下所示。
barry@earth:~$ ssh pi@raspberrypi
pi@raspberrypi:~$ scp secrets.txt barry@earth:secrets.txt
pi@raspberrypi:~$ exit
barry@earth:~$ ls secrets.txt
secrets.txt
barry@earth:~$
当然,由于您似乎关心速度和简便性,您可以使用别名或其他东西来做一些花哨的事情,将调用包装scp
成一些令人难忘的东西。
答案2
没有。SSH 没有像 RDP 那样的“客户端文件系统访问”通道。
不过,可能有些终端内置了对古老 BBS 文件传输协议(如 Xmodem/Zmodem)的支持(超级终端就是其中之一,但它不是一个很好的终端仿真器;我认为有支持 Xmodem 的 PuTTY 分支)。sz
在服务器上运行该命令将启动文件传输在航站楼,终端会识别它并询问您将文件保存在哪里。
可能有一个自定义get
命令可以连接回客户端计算机(通过另一个 SSH 会话)并且上传将文件从远程系统传输到本地系统,例如通过从 $SSH_CONNECTION 获取您的 IP 地址或使用准备好的“远程转发”-R
隧道,但作为通用解决方案,这并不十分方便。(它在特定环境中有效,例如您自己的个人系统,但在通过 SSH 连接到各种随机客户服务器时无效。)
不要忘记sftp
Linux 上的客户端支持远程路径的制表符补全。您可能更喜欢lftp
,这是另一个 SFTP 客户端,它具有一些方便的功能,例如“edit”命令(它会自动获取文件、运行本地编辑器,然后将其放回)。
涉及(SFTP 作为文件系统)的不同工作流程sshfs
可能是一种解决方案。例如,如果您经常在本地使用 SFTP 文件只是为了编辑它们并将它们放回原处,那么可以通过直接通过 sshfs 挂载编辑文件来代替。(或者,当然,在本地编辑所有内容,然后仅通过 Git 部署到服务器...)
您的 Linux 桌面环境可能在图形文件管理器中使用 URL 支持 SFTP sftp://
,以便您可以直接导航到所需的文件、为该位置添加书签等。(在 GNOME 中甚至可以在“当前位置”启动交互式 SSH 终端。)
在个人系统之间,也可以使用 NFS(双向 - 在本地编辑服务器文件,并让服务器将文件复制回客户端)。例如,在我的个人环境中,我已/n/<hostname>
在所有机器上设置了自动 NFS 安装到主目录,因此我只需将cp foo /n/laptop
它显示在笔记本电脑的主目录中即可。(在公司环境中不起作用,但想想很有趣。)
(后者实际上类似于 RDP 的文件重定向的工作方式 - 如果您通过 RDP 进入服务器,则可以访问\\tsclient\C
通向客户端 C:驱动器的特殊网络共享,并搭载 RDP 连接。不幸的是,SSH 中没有这样的东西。)
答案3
我还想知道为什么 SSH 缺少一些内置文件传输功能。
如果我需要对相当小的文件进行这样的操作,我会怎么做(在某些情况下无法使用 scp 或 sftp):
我将文件传输到 base64:
base64 < 文件
(复制看似垃圾的文本)
然后,在另一个终端、另一台机器上:
base64-d > 文件
(粘贴上面的编码内容)
然后:ctrl-d
完毕。
我有该文件的副本。
当然,也可以使用其他编码,但 base64 足够紧凑,可以容忍行尾差异、空格和字符集、复制粘贴伪影等。
它确实有效。