我使用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的值從不讓該代碼獲得該點。 –