【问题标题】:Executing ssh command in c program using popen()使用 popen() 在 c 程序中执行 ssh 命令
【发布时间】:2013-11-19 13:02:17
【问题描述】:

当我尝试使用 popen 执行此操作时,它会返回此错误,但当我在终端中运行此操作时,它可以工作!

 popen("ssh -n -f *.*.*.* 'sshfs -o nonempty *.*.*.*:/home/foo/bar/ /foo1/foo2/foo3'", "r");

错误:

ssh_exchange_identification: Connection closed by remote host

我使用公钥和私钥在没有密码的情况下进行 ssh,并且它们可以正常工作,因为此命令在终端中完美运行。

我改成这样了:

popen("ssh -n -f *.*.*.* `sshfs -o nonempty *.*.*.*:/home/foo/bar/ /foo1/foo2/foo3`", "r");

它也会返回错误。

错误:

fuse: bad mount point `/foo1/foo2/foo3': No such file or directory
Cannot fork into background without a command to execute.

我也尝试以这种方式隐藏内部""\" \",但它挂起!

【问题讨论】:

  • 如果除了*.*.*.*:/home/foo/bar/ 部分之外,省略单引号会怎样?
  • 澄清一下:popen 调用的第二个变体在本地执行 sshfs ... 的命令替换 - 将其输出传递给 ssh 命令并且它找不到安装目录 -而popen 的第一个变体正在传递命令以在另一台服务器上执行。 -f 选项到 ssh 意味着 -n BTW。尝试将-vv 添加到ssh 命令以进行更多调试。

标签: c shell ssh popen ssh-keys


【解决方案1】:

将 ssh 替换为 /usr/bin/ssh,对其他命令执行相同操作,例如 sshfs。指定命令的完整路径,/usr/sbin/foo 或任何可能的情况。 popen 不一定使用与命令行相同的 shell 来执行命令。检查您的文档。

【讨论】:

  • 我发现它正在工作,虽然那个错误 ssh_exchange_identification: Connection closed by remote host 所以我只是将 stderr 重定向到一个文件。
猜你喜欢
  • 1970-01-01
  • 2014-11-15
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
  • 2014-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多