[英]php - ssh2_exec failed allocating pty
使用PHP,我需要使用SSH在Draytek 2925路由器上定期执行远程命令。
我已经可以在Linux上使用标准的“ ssh”命令连接到路由器,但是在进行身份验证之后,我收到“通道0上的PTY分配请求失败”的信息。 但是,尽管有该消息,我仍然可以发送命令。
当我尝试使用PHP进行相同操作时,我得到2个结果中的1个,但都没有返回我需要的结果。
我的代码如下:
<?
if (!($connection = ssh2_connect('my.router.local', 22)))
die('CONN');
else if (!ssh2_auth_password($connection, 'admin', 'password'))
die('AUTH');
else
{
$stream = ssh2_exec($connection, 'sys version');
stream_set_blocking($stream, true);
$stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);
echo stream_get_contents($stream_out);
exit();
}
?>
PHP在ssh2_exec()处失败。 如果指定第三个参数(pty),则会得到以下结果:
Warning: ssh2_exec(): Failed allocating 1 pty at 80x25 characters
但是,不指定第三个参数会导致:
Warning: ssh2_exec(): Unable to request command execution on remote host
即使我输入@ ssh2_exec(),也不会收到警告,但也不会得到结果。
如果PHP不可行,我尝试以相同的方式使用sshpass,但是结果如下:
# sshpass -f sshpwd -v ssh admin@my.router.local 'sys version'
SSHPASS searching for password prompt using match "assword"
SSHPASS read: admin@my.router.local's password:
SSHPASS detected prompt. Sending password.
SSHPASS read:
exec request failed on channel 0
#
我最终只需要进行身份验证,发送命令并返回结果。 我做错了什么吗?还是有更简单的方法?
我已经改用TELNET解决了我的查询。 是的,它不像SSH一样安全,但是由于它是通过LAN内部使用的,因此没有关系。
对于感兴趣的任何人,我都使用Net_Telnet和以下代码:
<?php
require_once "Net/Telnet.php";
$router = 'my.router.local';
$password = 'password';
try
{
$t = new Net_Telnet($router);
$t->connect();
$t->login([
'login_prompt' => 'Account:',
'login_success' => ' User login successful, expired time is "Unlimited".',
'login_fail' => '% Access denied',
'login' => 'admin',
'password' => $password,
'prompt' => "{$router}>",
]
);
echo $t->cmd('sys version');
$t->disconnect();
// catch any buffered data
echo $t->get_data();
echo "\n";
} catch (Exception $e)
{
echo "Caught Exception ('{$e->getMessage()}')\n{$e}\n";
}
exit();
?>
结果是:
# php -f telnet.php
sys version
Router Model: Vigor2925n Version: 3.8.4 English
Profile version: 3.0.0 Status: 1 (0x48245e4c)
Router IP: 0.0.0.0 Netmask: 255.255.255.0
Firmware Build Date/Time: Dec 15 2016 17:26:01
Router Name: my.router.local
Revision: 61327 V384_2925
>
#
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.