用phpseclib从github拉远程

时间:2018-03-18 11:02:16

标签: github ssh phpseclib

我正在尝试从远程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时,它可以工作 谢谢你的帮助

2 个答案:

答案 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");