kmiya-culti / RLogin

RLoginは、Windows上で動作するターミナルソフトです
http://nanno.bf1.jp/softlib/man/rlogin/
MIT License
464 stars 16 forks source link

[BUG?] Cannot cancel login #1

Closed ghost closed 6 years ago

ghost commented 6 years ago

[version] RLogin 2.22.6 windows10 x64

[procedure]

  1. Create new SSH connect setting without PASSWORD.
  2. Open server select window, and select above one, press OK.
  3. Open input password window, and press CANCEL.

[expected] Cancel login.

[actual] Cannot cancel and send any packet to server.

kmiya-culti commented 6 years ago

RLoginでは、空のパスワードを許しています。 オプションの「サーバー・ユーザー・パスワード/フレーズの入力」チェックボックスを有効にされるとご期待の動作になると思います。

=== Automatic translation === RLogin allows empty passwords. I think that it will be expected behavior if the option "input of server user password / phrase" is enabled.

ghost commented 6 years ago

Thank you for your reply, solved the problem.

But I cannot understand that behavier. I suggest that CANCEL means canceling connection during login sequense.

Regards.

kmiya-culti commented 6 years ago

SSHでは、複数の認証方式をサポートしています 1つが失敗しても別の認証方式を試すことが出来ます パスワード認証をキャンセルしても次の方式を試します

=== Automatic translation === SSH supports multiple authentication methods If one fails you can try another authentication method Even if you cancel password authentication, try the following method

ttdoda commented 6 years ago

これに関連して、気になる動作が幾つかあります。

  1. パスワード認証でのパスワード入力時のキャンセルの動作

パスワード認証でのパスワード入力時、キャンセルボタンや ESC キーでキャンセルした時に空パスワードで認証が行われます。 余計な認証が行われる事で認証試行可能回数が減るので、キャンセルの時は認証要求を出さないようにできないでしょうか。

  1. パスワード認証以外が使えない状況でキャンセルした時にループしているように見える

パスワードの入力をキャンセルした時は次の認証方式に進みますが、パスワード認証のみが使える状況の時は他に使える方式が無いため、再度パスワード認証のパスワード入力が求められます。 元の質問もこの動作が原因でキャンセルが行えていないと認識したのだと思いますが、確かに判り辛いのでもう少し判り易い挙動にできないでしょうか。

  1. keyboard-interactive 認証でのパスワード入力時のキャンセルの動作

keyboard-interactive 認証でのパスワード入力時、キャンセルボタンや ESC キーでキャンセルした時に以下のメッセージが出て切断されます。

SSH2 Recive Packet Error Type=60 Status=0004 Send Disconnect Message...

Type=60 なのと処理のタイミングから SSH_MSMG_USERAUTH_INFO_REQUEST の処理が行えなかった(キャンセルされた)という事だと思いますが、このメッセージ、およびパスワード認証でのキャンセルと動作が違うのは判りづらいと思います。

あと細かい点ですが、メッセージの Receive に typo が有ります。

  1. keyboard-interactive 認証のパスワード入力で、SSH_MSG_USERAUTH_INFO_REQUEST の各プロンプトの echo フラグが無視される。

SSH_MSG_USERAUTH_INFO_REQUEST メッセージでは各プロンプト毎に入力内容をマスクするかを制御する echo フラグがありますが、echo フラグが 1 のプロンプトでも常に入力が * でマスクされます。 echo フラグが 1 の時は RFC 通りにパスワードをマスクせずそのまま表示するようにできないでしょうか。

この挙動は Tera Term も間違っているのに、RLogin は直してくれというのは気が引けますが……

ttdoda commented 6 years ago

2 の問題に対する挙動の変更案です。

案1. 認証方式が一つしか使えない時は、キャンセルで接続を切る 案2. 認証方式を一通り試した時は、再度先頭の認証方式から試すか確認するメッセージを出す 案3. 認証関連の試す順番を変更する

案3ですが、現状は以下のように認証を試行しています。

  1. 認証方式 A を試行する
  2. 認証失敗、またはキャンセルした時は次に進む
  3. 認証方式 B を試行する
  4. 認証失敗、またはキャンセルした時は次に進む
  5. 使用可能な認証方式の数だけ上記を繰り返す
  6. 認証方式を全て試した時は 1 に戻る

これを、以下のように変えるという物です。

  1. 認証方式 A を試行する
  2. 認証失敗時は 1 に戻り、キャンセル時は次に進む
  3. 認証方式 B を試行する
  4. 認証失敗時は 3 に戻り、キャンセル時は次に進む
  5. 使用可能な認証方式の数だけ上記を繰り返す
  6. 認証方式を全て試した時は切断する
kmiya-culti commented 6 years ago

パスワード認証でのパスワード入力時、キャンセルボタンや ESC キーでキャンセルした時に空パスワードで認証が行われます。

それは、行っていないはずです。たぶん最初に保存されたパスワードで試みている分だと思います。 保存されたパスワードで暗黙的に認証(password/keyboard-interactive)を行ってエラーがあると入力を求めている部分と オプションの「パスワード入力」のチェックで行われるパスワード入力ダイアログが同じなのでややこしいと以前にも指摘されました。

keyboard-interactive 認証でのパスワード入力時、キャンセルボタンや ESC キーでキャンセルした時に以下のメッセージが出て切断されます。

キャンセル時に意図しない切断処理を行っていました。

keyboard-interactive 認証のパスワード入力で、SSH_MSG_USERAUTH_INFO_REQUEST の各プロンプトの echo フラグが無視される。

処理しているつもりでしたが不十分でした。

認証方式 A を試行する 認証失敗時は 1 に戻り、キャンセル時は次に進む 認証方式 B を試行する 認証失敗時は 3 に戻り、キャンセル時は次に進む 使用可能な認証方式の数だけ上記を繰り返す 認証方式を全て試した時は切断する

そうですね。そのような挙動になるように修正してみようと思います。 動作としては、passwordとkeyboard-interactiveのみキャンセルで次に進むでしょうか・・・ publickeyでもキャンセルで次ぎの鍵に進むがいいかもしれませんがややこしい動作になりそうです。

ttdoda commented 6 years ago

それは、行っていないはずです。たぶん最初に保存されたパスワードで試みている分だと思います。

理解しました。確かにパスワード入力の前に空パスワードでの認証のログが出ていました。

動作としては、passwordとkeyboard-interactiveのみキャンセルで次に進むでしょうか・・・ publickeyでもキャンセルで次ぎの鍵に進むがいいかもしれませんがややこしい動作になりそうです。

そうですね。それでいいと思います。条件をあまり複雑にすると動作が判り辛いですし。

今回は関連する話だったのでこのissueにコメントしましたが、以降バグ報告をする場合は掲示板とGithub issuesのどちらがいいでしょうか?

kmiya-culti commented 6 years ago

今回は関連する話だったのでこのissueにコメントしましたが、以降バグ報告をする場合は掲示板とGithub issuesのどちらがいいでしょうか?

こちらの方が便利だと思います。 英語の場合は、多少閉口しますが・・・