当前位置: 首页 > 知识库问答 >
问题:

如何使用PHP在远程服务器上运行本地bash脚本

公孙向荣
2023-03-14

我将bash脚本存储为db中的字符串,我需要根据用户需求调用它。脚本应该从PHP级别在远程机器上执行。我找到了以下主题:

关于ssh连接和调用远程脚本的两个主题:

  1. 如何使用SSH在远程计算机上运行shell脚本
  2. https://serverfault.com/questions/241588/how-to-automate-ssh-login-with-password

以及在php中使用它的两种方法:

  1. 从PHP运行Bash命令
  2. 从ssh2_exec得到结果,http://php.net/manual/en/function.ssh2-exec.php

我尝试在symfony2应用程序中使用以下代码:

第一次尝试:

$connection = ssh2_connect('IP_ADDRESS', 22);
ssh2_auth_password($connection, 'user', 'password');
$stream = ssh2_exec($connection, "'bash -s' < ".$script);
stream_set_blocking($stream, true);
$stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);
$output = stream_get_contents($stream_out);
//result => output = empty string

第二:

$old_path = getcwd();
chdir('/path_to_script_directory');
$output = shell_exec("ssh user@server 'bash -s' < test");
chdir($old_path);

or

$old_path = getcwd();
chdir('/path_to_script_directory');
$output = shell_exec("ssh user@server 'bash -s' < ".$script);
chdir($old_path);
//result => output = null

就像上面的例子一样,我用测试脚本和字符串脚本($cript变量)尝试了两种情况。第二种选择是由我决定的。两个案例都包含简单的脚本:

#!/bin/bash

ifconfig

提前谢谢你!

共有1个答案

程枫
2023-03-14

下面是一个在远程服务器上为您提供真实bash shell的项目:https://github.com/merlinthemagic/MTS

安装并运行以下命令:

//login to the remote server and get a shell:

$shellObj       = \MTS\Factories::getDevices()->getRemoteHost('ip_address')->setConnectionDetail('username', 'password')->getShell();

//rather than executing your script, just run the command:

$returnData = $shellObj->exeCmd("ifconfig");

echo $returnData; //string containing the interface config of the remote server.
 类似资料:
  • 问题内容: 我正在调试一些必须在我的虚拟机上运行的python脚本。而且,我更喜欢在本地(虚拟机外部)编辑脚本。因此,我发现每次都将脚本修改为虚拟机 很繁琐。谁能提出一些有效的方法? 特别是,我想知道是否可以在远程PVM上执行python脚本。像这样: 问题答案: 可以使用ssh。Python接受连字符(-)作为执行标准输入的参数, 运行 python –help 以获得更多信息。

  • 问题内容: 我已经写了一个bash脚本foo.sh 我想在我的远程服务器上执行它。我尝试了,它起作用了。 之后,我像这样更改了test.sh文件 现在,我想传递一个本地参数以与我的脚本一起执行,但是当我键入它时会返回一个错误。 如何通过脚本传递参数? 问题答案: 使用该选项,该选项强制(或任何POSIX兼容外壳程序)从标准输入而不是从第一个位置参数命名的文件中读取其命令。而是将所有参数都视为脚本的

  • 问题内容: 我刚刚开始学习Python,现在我很迷路。我想在通过hosting24.com托管的服务器上运行脚本。他们的常见问题解答说他们支持Python,但是我不知道将脚本放在哪里运行。 我的根目录中有一个名为cgi-bin的文件夹,我猜这是我放置脚本的位置吗?有人可以向我解释这是如何工作的吗? 问题答案: 很简单,您可以将Python脚本重命名为“ pythonscript.cgi”。将其发布

  • 问题内容: 我有一个持续集成服务器(Jenkins),它可以构建代码(检查编译错误)并运行测试,然后将文件部署到远程服务器(不是war文件,而是实际的文件结构),我使用Jenkins插件,它允许我每晚通过samba传输文件。 现在,我需要做的是在远程服务器上运行ant命令。之后,我需要在远程服务器上启动应用程序服务器,然后通过从命令行运行.bat文件来启动应用程序服务器。 我完全不知道如何实现此目

  • 问题内容: 如何在 根用户 (具有所有权限)而不是 没人 用户(php默认用户)下从PHP运行bash脚本? 在sudo visudo之后,多数民众赞成在我的输出: 问题答案: 您可以使用sudo: 您应该允许在没有密码提示的情况下执行脚本。在控制台中运行,并将以下字符串添加到末尾: 您必须正确设置文件模式,以确保没有人可以修改此脚本并将危险内容放入该脚本(在根控制台中):

  • 问题内容: 我想尝试使用npm为Web应用程序运行各种构建任务。我知道我可以这样添加一个字段来做到这一点: 当您使用带有许多选项的更复杂的命令时,这变得很笨拙。是否有可能将这些命令移至bash脚本或类似的东西?就像是: 在文件中的哪里执行命令? 阅读这篇文章似乎是这样,但是我不清楚我应该在哪里放置文件或者丢失了什么。 问题答案: 完全有可能… 另外,请确保在bash文件的顶部放置一个哈希爆炸 还请