我正在尝试从远程git repo自动更新网站。由于它是在共享主机上,我在github上使用webhook& phpseclib 1.0。这是我的代码:
$ssh = new Net_SSH2(SITE_DOMAIN);
$key = new Crypt_RSA();
$key->loadKey(file_get_contents('/home/'.SSH_USERNAME.'/.ssh/'.KEYPAIR_NAME));
if (!$ssh->login(SSH_USERNAME, $key)) {
throw new Exception('Failed to login');
exit('Login Failed');
}
echo $ssh->write("cd ~/source\n");
echo $ssh->write("git pull origin master\n");
git命令不会运行。但是,当我从终端手动执行git pull时,它可以工作 谢谢你的帮助
答案 0 :(得分:0)
从你的代码:
echo $ssh->write("cd ~/source\n");
echo $ssh->write("git pull origin master\n");
通常使用交互式shell,您需要在发送下一个命令之前等待提示。尝试这样的事情:
$ssh->read('#[prompt]#');
echo $ssh->write("cd ~/source\n");
$ssh->read('#[prompt]#');
echo $ssh->write("git pull origin master\n");
有时候确定提示是什么很容易 - 有时它不那么容易。就像提示中有彩色文本一样,这意味着提示不是你想象的那样。
答案 1 :(得分:0)
这是适合我的解决方案
$ssh->setTimeout(2);
echo $ssh->write("cd ~/source\n");
$ssh->read();
echo $ssh->write("git pull origin master\n");