我的ssh脚本:
include('Net/SSH2.php');
set_include_path(getcwd());
$ssh_host = "myserver.com";
if($ssh_host != null){
$ssh_user = globals::$ssh_logins[$ssh_host];
$ssh = new Net_SSH2($ssh_host);
//$ssh->enablePTY();
if (!$ssh->login($ssh_user['username'], $ssh_user['password'])) {
echo $ssh->isConnected() ? 'bad username or password' : 'unable to establish connection';
}
echo $ssh->exec('sudo bash /myscript.sh');
}else{
echo "no host: " . $ssh_host;
}
致电时:
echo $ssh->exec('sudo bash /myscript.sh');
我得到了输出:
stdin: is not a tty
sudo: sorry, you must have a tty to run sudo
如何在phpseclib上启用tty? Sudo也是必要的,检索输出也很重要。我的脚本返回多行。
答案 0 :(得分:1)
您与$ssh->enablePTY()
一起走上正轨,但一旦您这样做,您就需要$ssh->read()
。没有PTY $ssh->exec()
将返回命令输出。如果您执行$ssh->enablePTY()
,则需要$ssh->read()
才能获得输出。
这样做的原因在于,可以将数据发送到shell或从shell发送,而不能在没有PTY的情况下发送。没有PTY,你得到的输出是你得到的输出,没有输入可以改变,因为你不能发送输入。使用PTY输入可以改变输出。
同样相关,phpseclib的文档谈论用sudo
做它。来自http://phpseclib.sourceforge.net/ssh/examples.html#sudo:
<?php
include('Net/SSH2.php');
$ssh = new Net_SSH2('www.domain.tld');
if (!$ssh->login('username', 'password')) {
exit('Login Failed');
}
echo $ssh->read('username@username:~$');
$ssh->write("sudo ls -la\n");
$output = $ssh->read('#[pP]assword[^:]*:|username@username:~\$#', NET_SSH2_READ_REGEX);
echo $output;
if (preg_match('#[pP]assword[^:]*:#', $output)) {
$ssh->write("password\n");
echo $ssh->read('username@username:~$');
}
如果您的帐户没有密码,我想这并不重要,但如果您有密码,那么您需要执行上述操作。