Phpseclib SSH2 未执行 Shell 脚本
Phpseclib SSH2 not executing Shell Scripts
目前正在尝试创建一个 PHP 网络应用程序来 运行 各种 Shell 脚本来处理网站生成和删除时的清理。
这是我的 deletePropertyProcess.php 的片段:
$ssh = new Net_SSH2($server);
if(!$ssh->login("username", "password")) {
$result['result'] = 'ERROR';
$result['message'] = 'Login failed to server ' . $server;
} else {
$result = $ssh->exec("cd /var/www/sites ; sudo /usr/local/bin/delete_property_folder.sh -c $comp -p $prop");
echo $result;
}
其中 delete_property_folder.sh
是我远程服务器上的 bash 脚本,-c $comp -p $prop
是我的脚本 options/parameters.
有趣的是,所有这些都可以通过 Putty 完美运行。 运行 此功能来自 PHP 通过 Ajax returns Shell 脚本的退出状态和 Ajax 的预期输出,但 none 由我的 Shell 脚本处理的更改已实际应用。
就像我说的,这个 运行 完全来自 Putty,所以我怀疑问题出在 Shell 脚本上,但无论如何:
#!/bin/bash
function fix_file_permissions() {
chown -Rf username:username /
echo $?;
}
function delete_specified_folder() {
rm -rf /
echo $?;
}
##Main Script Body
POSITIONAL=()
while [[ $# -gt 0 ]]
do
key=""
case $key in
-c|--company)
COMPANY=""
shift
shift
;;
-p|--property)
PROPERTY=""
shift
shift
;;
*) #unknown option
POSITIONAL+=("") #save it in an array for later
shift
;;
esac
done
set -- "${POSITIONAL[@]}" #restore positional parameters
PERMISSIONS_FIXED=$(fix_file_permissions $COMPANY $PROPERTY)
if [ $PERMISSIONS_FIXED -eq 0 ]; then
FOLDER_DELETED=$(delete_specified_folder $COMPANY $PROPERTY)
echo $FOLDER_DELETED
exit
fi
echo 1
在这一点上,任何建议都会有用。如果您需要更多信息,请告诉我。
我已经设法通过 --STDIN 将 sudo 密码提供给 Shell 脚本的完整路径,使用以下命令使其工作:
$result = $ssh->exec("cd /var/www/sites; echo 'password' | sudo -S /usr/local/bin/delete_property_folder.sh -c $comp -p $prop");
echo
-使用 sudo -S
设置密码允许您通过管道将密码传递到 sudo shell 脚本执行中。
目前正在尝试创建一个 PHP 网络应用程序来 运行 各种 Shell 脚本来处理网站生成和删除时的清理。
这是我的 deletePropertyProcess.php 的片段:
$ssh = new Net_SSH2($server);
if(!$ssh->login("username", "password")) {
$result['result'] = 'ERROR';
$result['message'] = 'Login failed to server ' . $server;
} else {
$result = $ssh->exec("cd /var/www/sites ; sudo /usr/local/bin/delete_property_folder.sh -c $comp -p $prop");
echo $result;
}
其中 delete_property_folder.sh
是我远程服务器上的 bash 脚本,-c $comp -p $prop
是我的脚本 options/parameters.
有趣的是,所有这些都可以通过 Putty 完美运行。 运行 此功能来自 PHP 通过 Ajax returns Shell 脚本的退出状态和 Ajax 的预期输出,但 none 由我的 Shell 脚本处理的更改已实际应用。
就像我说的,这个 运行 完全来自 Putty,所以我怀疑问题出在 Shell 脚本上,但无论如何:
#!/bin/bash
function fix_file_permissions() {
chown -Rf username:username /
echo $?;
}
function delete_specified_folder() {
rm -rf /
echo $?;
}
##Main Script Body
POSITIONAL=()
while [[ $# -gt 0 ]]
do
key=""
case $key in
-c|--company)
COMPANY=""
shift
shift
;;
-p|--property)
PROPERTY=""
shift
shift
;;
*) #unknown option
POSITIONAL+=("") #save it in an array for later
shift
;;
esac
done
set -- "${POSITIONAL[@]}" #restore positional parameters
PERMISSIONS_FIXED=$(fix_file_permissions $COMPANY $PROPERTY)
if [ $PERMISSIONS_FIXED -eq 0 ]; then
FOLDER_DELETED=$(delete_specified_folder $COMPANY $PROPERTY)
echo $FOLDER_DELETED
exit
fi
echo 1
在这一点上,任何建议都会有用。如果您需要更多信息,请告诉我。
我已经设法通过 --STDIN 将 sudo 密码提供给 Shell 脚本的完整路径,使用以下命令使其工作:
$result = $ssh->exec("cd /var/www/sites; echo 'password' | sudo -S /usr/local/bin/delete_property_folder.sh -c $comp -p $prop");
echo
-使用 sudo -S
设置密码允许您通过管道将密码传递到 sudo shell 脚本执行中。