我想实现在远程服务器上具有特定用户的shell上自动登录并执行命令来安装Android应用程序。
我写了一些代码来通过PHP
登录到远程服务器。我使用方法ssh2_connect
连接到服务器,使用公钥进行身份验证并且可以正常运行。现在我想安装一个apk文件。我需要执行以下命令
sudo user
pm install -r /path/to/file/on/remote
用户没有密码。我PHP
中的脚本看起来像
$con = ssh2_connect("xxx.xxx.xx.xxx", "xy", array("hostkey" => "ssh-rsa"));
if(ssh2_auth_pubkey_file($con, "user", $pubKey, $privKey, "password"))
{
$dataToSend = file_get_contents($srcFile);
if($dataToSend === false) throw new Exception("Could not open local file: " . $srcFile);
if(fwrite( $sftpStream, $dataToSend) === false) throw new Exception("Could not send data from file: " . $srcFile);
$shell = ssh2_shell($con, "xterm");
fwrite($shell, "commands to login and install app");
fclose($shell);
echo "passed through!";
}
我没有找到解决问题的解决方案。在我的本地电脑上,它适用于
echo shell_exec("echo <password> | sudo -S <command>");
我必须修改上面的行才能在远程服务器上运行?
如果我编写任何命令并使用某些代码(例如
)访问我的网站$stream = ssh2_exec($con, "cd /path/to/anywhere; mkdir ./test; chmod 444 ./test/");
stream_set_blocking($stream, true);
echo stream_get_contents($stream) . "<br />";
它工作,创建了目录并设置了权限。但是,如果我尝试使用su whatever
这样的东西,我仍然是同一个用户,而不是像示例那样。
命令whoami
始终返回相同的用户。为什么要使用每个命令而不是su xxx
?
远程服务器不支持命令sudo
,但我没有得到任何errpr,也不知道他不知道命令。
评论中提到的远程服务器上不存在sudoers
或其他任何文件。
ssh2_exec($con, "su system pm install -r " . $dstFile . "&");
做我需要的一切。