首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从php执行shell脚本

从php执行shell脚本
EN

Stack Overflow用户
提问于 2016-03-17 00:22:03
回答 2查看 74关注 0票数 1

我正在尝试让一些命令在远程设备上执行。我使用公钥和私钥连接到远程设备。

在我的服务器上,我只需输入: ssh username@distant_device命令,我就会得到结果。所以我想通过php页面来做这件事。

我尝试了不同的方法,但对我来说都不起作用。

1-

代码语言:javascript
复制
 $cmdline = escapeshellcmd("ssh username@distant_device command");
 system($cmdline);

2-在服务器中执行shell脚本

script.sh:

代码语言:javascript
复制
#!/bin/bash

output=$(ssh username@distant_device command)
echo "$output" >> test.txt

exit 0

php代码:

代码语言:javascript
复制
passthru('./script.sh',$result);
echo $result ;

我得到了我的脚本发送的结果,但没有其中的ssh命令的结果。当我直接执行脚本时,我得到了结果。

3-

代码语言:javascript
复制
system ("ssh username@distant_device command > test.txt");
system ("ssh -i /home/nagios/.ssh/id_rsa -o 'StrictHostKeyChecking no' username@distant_device command' > test.txt");

文本文件保持为空

我做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2016-03-18 02:00:06

我找到了一个解决方案,如下所示:

代码语言:javascript
复制
$host = "ip_address"; 
$port = 22; 
$conn = ssh2_connect($host, $port); 
$username = "username"; 
$pub_key = "/path/to/key/.ssh/id_rsa.pub"; 
$pri_key = "/path/to/key/.ssh/id_rsa"; 
if(ssh2_auth_pubkey_file( 
    $conn, 
    $username, 
    $pub_key, 
    $pri_key)) 
{ 
    echo "Authentication succeeded";
    $stdout_stream = ssh2_exec($conn, 'ping ip_address rapid routing-instance XXXXXXXXX');
    sleep(1);
    stream_set_blocking($stdout_stream, true);
    $stream_out = ssh2_fetch_stream($stdout_stream, SSH2_STREAM_STDIO);
    echo '<pre>';
    echo stream_get_contents($stream_out);
    echo '</pre>';

} 
else 
{ 
   echo "Authentication failed "; 
} 
票数 1
EN

Stack Overflow用户

发布于 2016-03-17 00:32:58

例如,您可以使用shell_exec()

代码语言:javascript
复制
$output = shell_exec('./deploy.sh');
echo "<pre>".$output."</pre>";

Php上有一个很好的文档http://php.net/manual/en/function.shell-exec.php希望它能有所帮助:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36041362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档