phpseclib を使用して cisco SF308 スイッチに接続しようとしています。このライブラリを使用して一部の HP スイッチに正常に接続していますが、何らかの理由で、cisco では機能しません。コードは次のとおりです。
set_include_path(get_include_path() . PATH_SEPARATOR . '/var/www/phpseclib');
include('/var/www/phpseclib/Net/SSH2.php');
define('NET_SSH2_LOGGING', NET_SSH2_LOG_COMPLEX); //add near include lines
$cisco = new Net_SSH2('10.10.10.10');
if (!$cisco->login('username', 'password')) {
exit('Login Failed');
}
echo $cisco->write('\n');
echo $cisco->write('help');
echo $cisco->read('/([0-9A-Z\-])*(#)(\s*)/i', NET_SSH2_READ_REGEX);
echo $cisco->data;
echo $cisco->getLog();
echo $cisco->disconnect();
ログイン失敗エラーメッセージで常に停止します。
NET_SSH2 ライブラリ自体にいくつかのデバッグ ステートメントを追加しようとしましたが、'NET_SSH2_MSG_USERAUTH_FAILURE' として定義されているエラー番号 51 で終了しました。
hp スイッチとこの cisco の違いの 1 つは、手動で接続する場合、hp は最初の ssh コマンドからユーザー名を取得するのに十分「スマート」であることです。たとえば、コマンド プロンプトでこれを行う場合:
ssh username@10.10.10.10
次にEnterキーを押すと、ユーザー名として「ユーザー名」が選択され、パスワードの入力のみが求められます。cisco スイッチ (SF302-08 がモデル) では、ユーザー名とパスワードの両方を求めるプロンプトが引き続き表示されます。もう一度ユーザー名を入力してからパスワードを入力すると、スイッチに接続できます。
これが問題の原因かどうかはわかりませんが、2 つのスイッチ間で明らかに異なるものです。これを変更する方法があるかどうか、または最初の接続要求でユーザー名を取得する方法があるかどうかを確認するために、cisco のドキュメントを探しています。でも他におすすめがあれば教えてください!ぜひ聞きたいです。
ありがとう。
編集1
複雑なログを有効にして、失敗した場所の完全な詳細を取得しました。これが役立つ場合があります。これが私の最新のコードです:
set_include_path(get_include_path() . PATH_SEPARATOR . '/var/www/phpseclib');
include('Net/SSH2.php');
define('NET_SSH2_LOGGING', true); //turn on logging.
$ssh = new Net_SSH2('10.10.10.10'); //starting the ssh connection to localhost
if (!$ssh->login('username', 'password')) { //if you can't log on...
echo('Login Failed');
echo 'Error message is: <br>';
$log = $ssh->getLog(NET_SSH2_LOG_COMPLEX);
foreach ($log as $logitem) {
echo $logitem.'<br>';
}
これにより、次の出力が返されます。
Login FailedError message is:
<-
->
<- NET_SSH2_MSG_KEXINIT (0.0118s)
-> NET_SSH2_MSG_KEXINIT (0s)
-> NET_SSH2_MSG_KEXDH_INIT (0s)
<- NET_SSH2_MSG_KEXDH_REPLY (0.7912s)
-> NET_SSH2_MSG_NEWKEYS (0s)
<- NET_SSH2_MSG_NEWKEYS (0s)
-> NET_SSH2_MSG_SERVICE_REQUEST (0s)
<- NET_SSH2_MSG_SERVICE_ACCEPT (0.4927s)
-> NET_SSH2_MSG_USERAUTH_REQUEST (0s)
<- NET_SSH2_MSG_USERAUTH_FAILURE (0.0059s)
したがって、スイッチに接続していますが、最初の投稿で述べたように、ユーザー名/パスワードの認証に失敗しています。