我知道只要我可以使用 ssh 客户端,我就可以使用 scp 命令并复制任何文件。
但让我们更详细地看一下。假设我已经使用 ssh 客户端登录。这意味着我已经输入了服务器名称、用户名和密码。还假设我做了一些cd
操作。这意味着我已经进入了目标目录。
我不想再次输入这些数据。我只是觉得没有必要重复做任何工作。
现在我想将一些文件上传到我已经在的那个地方。
可以这样做吗?
在电话调制解调器时代,有几种协议允许服务器启动客户端的文件上传。如果我输入一些命令,我的终端客户端就会打开文件选择对话框,然后我就可以选择要上传的文件。
几十年过去了。在 21 世纪,这还可能实现吗?
答案1
我不知道这种方法是否更轻松而不仅仅是使用 scp,我将对您使用的 ssh 客户端以及源计算机和目标计算机的操作系统做出许多假设。我只是希望这会有所帮助。
如果您已经登录到机器,并且想要传输一个文件而不必再次登录,您可以像这样打开隧道:
- 在命令行中输入~C,你将进入ssh的命令控制台:
ssh>
- 键入 -L 4444:localhost:4444 将本地计算机上的端口 4444 转发到远程计算机上的端口 4444
ssh> -L 4444:localhost:4444 Forwarding port.
- 当您再次在远程机器上看到提示符时,输入:
nc -l 4444 > my_file.txt
这将监听端口 4444 并将输出发送到 my_file.txt
- 现在,在您的本地机器上,您可以执行以下操作:
nc localhost 4444 < my_file.txt
这会通过 ssh 转发隧道将 my_file.txt 发送到远程计算机,netcat(nc 命令)会将其通过管道传输到远程计算机中的文件。如果要传输整个目录,请使用tar
并重定向到标准输入并从标准输出重定向。(man tar
是您的朋友)。
答案2
如果您使用的是 SecureCRT (Windows) 或 iTerm2 (Mac) 之类的程序,则可以使用 Zmodem 来回传输文件,而无需使用 scp/nc/等。我使用它来快速来回移动文件,而无需打开第二个会话。Unix 服务器需要安装 lrzsz 包 - 有些发行版默认安装了它,有些则没有。
如果您使用的是 SecureCRT,则只需运行“sz filename.txt”,传输就会自动开始;运行“rz”将弹出文件选择框。如果您使用的是 iTerm2,则必须进行一些配置才能使其工作,首先安装 lrzsz 包(通过 Homebrew 或其他包管理器),然后配置 iTerm2 以监听 Zmodem 字符序列。具体描述如下:https://github.com/aurora/iterm2-zmodem