我使用phpseclib,我尝试使用RSA密钥登陆:登录在phpseclib RSA密钥失败(超时)
$ssh = new SSH2('<server_domain_name>');
$key = new RSA();
$key->load(file_get_contents('<private_key_path>'));
if($ssh->login('root',$key)){
echo "Logged In!!!";
} else {
echo "Login failed!";
}
但登录失败!查看SSH2类的内部,我可以看到使用_login_helper()函数登录(如果我错了,则是正确的),由login()函数调用_login()函数调用(在情况下)。
登录() - > _login() - > _login_helper()
但是这一段代码:
if (!($this->bitmap & self::MASK_CONSTRUCTOR)) {
if (!$this->_connect()) {
return false;
}
}
在_login()函数总是返回false并且通过这样执行从未达到_login_helper()函数。上述部分代码返回false的原因是这些变量/常量的默认值:
var $bitmap = 0;
const MASK_CONNECTED = 0x00000002;
我有点沮丧。我错过了什么吗?
编辑:我忘了提几秒钟后登录返回/失败。在_connect()方法中添加几个ECHO我可以看到该方法在等待服务器数据时超时。在这个循环的执行:
while (!feof($this->fsock) && !preg_match('#(.*)^(SSH-(\d\.\d+).*)#ms', $data, $matches))
服务器输出只有一行说:“SSH-2.0-OpenSSH_4.3”,然后(第二次循环执行)超时这里:
if ([email protected]_select($read, $write, $except, $sec, $usec) && !count($read)) {
编辑2:
连接被关闭THE_SSH_SERVER_IP
11月4日23时09分58秒WEB1的sshd [10316]:没有收到identifi,我试图连接到说的一侧的SSH登录阳离子字符串来自TH_ WEB_SERVER_IP
什么更有用的是SSH日志。你可以通过在登录失败后执行'define('NET_SSH2_LOGGING',2)'',然后'echo $ ssh-> getLog()'来获得它们。代替......谁知道。也许PHP由于权限而无法读取您的私钥。也许你的私钥对应于你试图登录的用户的〜/ .ssh/authorized_keys中的公钥。 – neubert
getLog()返回一个空字符串。关键是file_get_contents可读,我可以通过控制台成功使用它。事实上,如果我用这个键使用ssh2_auth_pubkey_file(),它的效果很好。如果使RSA身份验证的功能确实是_privatekey_login(),那么$ bitmask和MASK_CONNECTED的值从不让该代码获得该点。 –