我正在用 C 语言编写一些自动化 API,通过 SSH 与远程文件系统一起使用。
主机运行 Ubuntu-Linux,其中一台目标计算机运行安装了 OpenSSH 的 Windows 7。
我遇到问题的具体功能是列出远程 Windows 系统中的文件。特别是那些名称中带有空格的文件和文件夹。例如:“Foo BAR”
我的命令的格式如下
sshpass -p [pwd] ssh [account]@[ip_addr] dir PATH
如果我做:
sshpass -p [pwd] ssh -v [account]@[ip_addr] dir C:\"FOO BAR"
使用详细(-v)选项,它给我以下响应(片段):
debug1: Sending command: dir C:"Foo BAR
Volume in drive C has no label.
...
File Not Found
如果我做:
sshpass -p [pwd] ssh -v [account]@[ip_addr] dir C:\\\"FOO BAR\"
它返回:
debug1: Sending command: dir C:\\"FOO BAR"
Volume in drive C has no labe.
...
File Not Found
当我通过自动化运行它时,它将返回:
sh: 1: Syntax error: Unterminated quoted string
我的 API 非常适合那些中间没有空格的文件名。似乎对 Windows 系统发送命令有限制。有什么想法如何解决这个问题吗?
谢谢!
11/14 更新:
谢谢回复沃克!我不知道这个 SSHFS,先尝试一下。
按照您提供的链接,在此步骤中:
sudo sshfs -o allow_other,defer_permissions [email protected]:/ /mnt/droplet
我收到以下错误:
fuse: unknown option `defer_permissions`
询问google后,我将其更改为:
sudo sshfs -o allow_other,default_permissions [email protected]:/ /mnt/droplet
然后我遇到了以下错误:
read: Connection reset by peer
我遵循了这个对等方使用 sshfs 重置连接并做了:
sudo usermod -a -G fuse [my_user_name]
但我仍然遇到同样的问题,有什么想法吗?
答案1
为了避免引用问题,您可以以 base64 传递参数并在 Linux 服务器上对其进行解码。
但是为什么要在有 SSHFS 的地方创建自己的 api 呢?请参阅以下链接寻求帮助