除了拼写错误之外,你没有做错什么:应该是.该函数仅返回连接失败的 false;当使用了错误的凭据时,回调只是尚未启动。array('hostkey', 'ssh-rsa')
array('hostkey' => 'ssh-rsa')
ssh_connect()
有解决方案(例如,正如下面的rubo77所建议的),但我找到的一个可以给你最大的控制权,并允许你做你想做的事情(例如跟踪MAC错误),是使用phpseclib库(http://phpseclib.sourceforge.net/ssh/intro.html)进行ssh连接和控制。它可以对命令进行非常精细的控制,还包括日志记录。
这不是最简单的解决方案,但您可以像直接在键盘/终端上一样精细地进行控制。
您可以控制超时,并且可以对命令使用回调。但是,如果您想要更好的控制,请使用并可以监视断开连接或其他问题。查看有关使用 phpseclib 进行日志记录的文档:您可以记录并解析日志,也可以调用 。read()
write()
getLastError()
例如,日志文件将显示在断开连接时,但也会告诉您是否在登录时使用不受支持的身份验证模式等。'Connection closed by server'
或者更多,请阅读代码:例如,这里是断开连接的原因:
$this->disconnect_reasons = array(
1 => 'NET_SSH2_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT',
2 => 'NET_SSH2_DISCONNECT_PROTOCOL_ERROR',
3 => 'NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED',
4 => 'NET_SSH2_DISCONNECT_RESERVED',
5 => 'NET_SSH2_DISCONNECT_MAC_ERROR',
6 => 'NET_SSH2_DISCONNECT_COMPRESSION_ERROR',
7 => 'NET_SSH2_DISCONNECT_SERVICE_NOT_AVAILABLE',
8 => 'NET_SSH2_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED',
9 => 'NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE',
10 => 'NET_SSH2_DISCONNECT_CONNECTION_LOST',
11 => 'NET_SSH2_DISCONNECT_BY_APPLICATION',
12 => 'NET_SSH2_DISCONNECT_TOO_MANY_CONNECTIONS',
13 => 'NET_SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER',
14 => 'NET_SSH2_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE',
15 => 'NET_SSH2_DISCONNECT_ILLEGAL_USER_NAME'
);