当我尝试 sftp 到虚拟机的 IP 地址时,它运行良好(我能够执行 sftp 提供的所有操作)。但是当我尝试使用 zsh 的 zftp 获取相同的 IP 地址时,连接被拒绝。我尝试了不同风格的命令,但都不起作用。这是一个示例:
❯ autoload -U zfinit ; zfinit
❯ zftp open 10.211.55.8
zftp open: connect failed: connection refused
我尝试过的其他命令风格:❯ zftp open '10.211.55.8'
、 和zftp open '[10.211.55.8]'
注意:两台机器上都安装了 zsh 5.8。 zftp 在任何一台机器上都不起作用,sftp 在尝试连接到另一台机器的任何一台机器上都可以工作。
系统信息:我尝试连接的虚拟机是 Arch Linux(它安装了 zsh 并作为我的默认 shell 运行)。我尝试连接的机器是 macOS 11.6,它也将 zsh 作为其默认 shell。
答案1
zsh/zftp
是一个文件传输协议客户。sftp
是一个SFTP客户。 FTP 和 SFTP 是完全不同的协议。 SFTP 是基于 SSH 的文件传输协议,但它不是基于 SSH 的 FTP。
zftp open 10.211.55.8
仅当 10.211.55.8 上有 FTP 服务器时才有效,而sftp 10.211.55.8
适用于大多数具有 SSH 服务器的非嵌入式系统(这是 OpenSSH 的一项功能,通常默认启用)。 FTP 与 rsh 一样,很大程度上已被 SSH 取代1,2。
zftp
开发主要是由于 FTP 的相对复杂性。对 SFTP 做类似的事情没有多大意义。通常,如果您具有 SFTP 访问权限,那么您还具有 SSH shell 访问权限和 SCP 访问权限,并且可以使用它scp
来复制文件(zsh 将提供补全功能,因此您不需要ls
太多)。
为了使 SFTP 更加无缝,您可以使用SSHFS将远程服务器的目录树挂载到本地。它需要在服务器上启用 SFTP 并且保险丝在客户端上。通常,只需安装发行版的sshfs
软件包即可。
sudo pacman -S sshfs
mkdir -p ~/net/vm
sshfs 10.211.55.8: ~/net/vm
ls ~/net/vm/somedir
cp somefile ~/net/vm/somedir
1 FTP 过去通常在没有身份验证的情况下使用,但现在已基本被 HTTP(S) 取代。
2 有一个将 TLS 与 FTP 结合使用的标准,称为FTPS,但它从未真正发生过。