如何将答案传递给PHP proc_open函数?

时间:2013-09-02 16:35:50

标签: php

我正在尝试制作将执行scp命令并传递一些文件的php脚本。问题是命令需要回答“是/否”问题和密码。我无法理解如何从脚本中传递它。

我的代码:

$command = "scp $filename {$config['Username']}@{$config['Server']}:{$config['Basedir']}";
echo $command;

$descriptorspec = array(
   0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
   1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
   2 => array("file", sys_get_temp_dir() . "/error.txt", "w"),  // stderr is a file to write to
);

$cwd = sys_get_temp_dir();
$env = array();
$process = proc_open($command, $descriptorspec, $pipes, $cwd, $env);
fwrite($pipes[0], "yes\n");
fwrite($pipes[0], $config['Password'] . "\n");
proc_close($process);

它不起作用。脚本问我“你确定要继续连接(是/否)?”每一次。

1 个答案:

答案 0 :(得分:1)

这是一个安全确认,因为您连接到已知主机文件中未列出的远程服务器。请手动打开ssh或scp连接。 ssh会要求您接受远程服务器上的密钥。之后你的命令应该工作。

还有一些选项可以帮助您进行ssh批处理。

-oStrictHostKeyChecking=[yes|no]
-oUserKnownHostsFile=[/dev/null]

我不推荐这个。 ssh问你一个非常好的理由!