首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将命令行SSH工具替换为PHP web调用?

如何将命令行SSH工具替换为PHP web调用?
EN

Stack Overflow用户
提问于 2009-09-22 22:24:29
回答 2查看 367关注 0票数 0

我正在构建一个web控件,它将让我们的初级IT员工管理我们LifeSize手机上的固件。目前,我们通过将新固件上传到中央服务器,然后对每个要升级的电话运行此命令来完成此操作

代码语言:javascript
复制
cat new_firmware.cramfs | ssh -T cli@1.1.1.1 "upgrade all"

这会要求我输入密码,然后上传固件。像冠军一样工作,但它需要一个人熟悉CLI工具,SSH访问此服务器,并耐心查找所有电话的所有IP。

看起来我们被密码登录卡住了,使用证书进行测试是灾难性的。被操作的设备并不是一台功能齐全的计算机,而是一部运行微型、专有嵌入式操作系统的电话。

我正在编写一个PHP脚本,它可以遍历所有的手机,但基本上复制了这个函数。这就是我到目前为止所知道的:

代码语言:javascript
复制
<?php
$firmware_filename = "new_firmware.cramfs";
$firmware_stream = fopen($firmware_filename,"rb");

$ssh_connection = ssh2_connect("1.1.1.1", 22);
ssh2_auth_password($ssh_connection, "cli", "password");
$ssh_stream = ssh2_exec($ssh_connection,'upgrade all');
$written = stream_copy_to_stream($firmware_stream,$ssh_stream,-1);

if($written != filesize($full_filename)){
 echo "The file is " . filesize($firmware_filename) . " bytes, I only wrote $written" . PHP_EOL;
}else{
 echo "All Good" . PHP_EOL;
}
?>

但这总是会返回

代码语言:javascript
复制
The file is 26988590 bytes, I only wrote 8192

并且升级不能正常进行。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-22 22:30:43

嗯,你可以简单地调用

代码语言:javascript
复制
system('cat new_firmware.cramfs | ssh -T cli@1.1.1.1 "upgrade all"');

然后用你的vars替换:

代码语言:javascript
复制
system('cat ' . $firmware . ' | ssh -T ' . $username . '@' . $host . ' "upgrade all"');

这对你来说是一个解决方案吗?

您可以通过将证书文件放入.ssh目录来自动执行ssh访问。阅读有关SSH login without password的信息。

问候

票数 1
EN

Stack Overflow用户

发布于 2009-09-22 22:35:56

您可以尝试以下几种方法:

  1. 首先复制文件,然后在现在的本地文件上运行命令。
  2. 假设您正在填充8k的缓冲区,请尝试循环写入,直到成功写入整个文件为止
  3. 采取简单的方法,只需设置ssh密钥,这样您就不需要输入密码,并直接从script

执行shell命令

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

https://stackoverflow.com/questions/1462957

复制
相关文章

相似问题

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