Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SSHでユーザー名、パスワードを UTF-8 で扱うよう修正する #276

Closed
zmatsuo opened this issue Aug 18, 2024 · 6 comments
Closed
Assignees
Labels
enhancement New feature or request
Milestone

Comments

@zmatsuo
Copy link
Member

zmatsuo commented Aug 18, 2024

SSHでのユーザー名、パスワードは UTF-8 と定められています。

この仕様通りにUTF-8で送信するよう修正します。

従来は日本語Windowsのときは、Shift_JISでホストに送ります。
(Shift_JISに変換できない文字は"?"で送られます)

SSHでユーザー名/パスワードに
漢字(=Unicode固有の文字,大雑把にアルファベット+数字+記号以外、漢字や絵文字など)が
使用できるかどうかは、次のレイヤ全てが対応する必要があります。

  • ターミナル、TeraTermを含むターミナルソフト
  • SSHサーバー
  • SSHサーバーが動作しているOS(ユーザー/パスワードを管理しているDB)

linux上ではユーザー名に漢字は使用できないことが多いのではないでしょうか。

$ sudo adduser 漢字
adduser: To avoid problems, the username should consist only of
            letters, digits, underscores, periods, at signs and dashes, and
            not start with a dash (as defined by IEEE Std 1003.1-2001). For
            compatibility with Samba machine accounts, $ is also supported
            at the end of the username.  (Use the `--allow-all-names' option
            to bypass this restriction.)
$ cat /etc/os-release | grep PRETTY_NAME
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"

Windowsでは漢字ユーザー名が使用できるので使用できるかもしれません。

zmatsuo added a commit that referenced this issue Aug 18, 2024
- sshプロトコル上の文字コードはUTF-8
  - 修正前はACP(日本語WindowsではShift_JIS)で扱っていた
@zmatsuo
Copy link
Member Author

zmatsuo commented Aug 18, 2024

修正ブランチをpushしました 7609e4d

基本的には良いと思うのですが、問題がある環境があるかもしれません。
(#define の修正で従来の動作に戻せるようにしてあります)

問題があったらインパクトが大きいので main へのマージを躊躇しています。
ご意見いただけないでしょうか。

@zmatsuo zmatsuo self-assigned this Aug 18, 2024
@zmatsuo
Copy link
Member Author

zmatsuo commented Aug 18, 2024

Windows上でOpenSSHサーバーを動かしてテストしてみました。
従来通り(US-ASCII)のユーザー/パスワードだとログインできました。

漢字のユーザー名はログインできず、Tera Term上で文字化けが出ました。

表示の修正とどんなパケットをやり取りしているか調べます。

@nmaya nmaya added the bug Something isn't working label Aug 19, 2024
zmatsuo added a commit that referenced this issue Aug 19, 2024
- auth.c のユーザー名設定を修正
- UTF-8文字列設定/取得を分離 win32helper_u8.cpp,h
@zmatsuo
Copy link
Member Author

zmatsuo commented Aug 19, 2024

ダイアログの表示の文字化けを修正しました。

SSH2_MSG_USERAUTH_REQUEST
ユーザー名 "漢字", パスワード "password" を送信して
(e6 bc a2 e5 ad 97 が UTF-8 で "漢字" です。)

SSH2_MSG_USERAUTH_FAILURE が返ってきていました。
(okの場合はSSH2_MSG_USERAUTH_SUCCESSが返ってきます)

SSH2_MSG_USERAUTH_REQUEST was sent do_SSH2_authrequest(). (method 3)
send teraterm\ttssh2\ttxssh\ssh.c:6617 do_SSH2_authrequest() len=53
00000000 : 00000006 E6BCA2E5 AD970000 000E7373     .....シ「.ュ.....ss
00000010 : 682D636F 6E6E6563 74696F6E 00000008     h-connection....
00000020 : 70617373 776F7264 00000000 08706173     password.....pas
00000030 : 73776F72 64                             sword
SSH2_MSG_USERAUTH_FAILURE was received.
receive teraterm\ttssh2\ttxssh\ssh.c:6894 handle_SSH2_userauth_failure() len=45
00000000 : 00000027 7075626C 69636B65 792C7061     ...'publickey,pa
00000010 : 7373776F 72642C6B 6579626F 6172642D     ssword,keyboard-
00000020 : 696E7465 72616374 69766500 09           interactive.
User authentication will be shown by 3 method.

↑手もとで修正したコードでログを出した結果です。

Windows 10 の OpenSSH サーバーは漢字ユーザー名を使用できないようです。

zmatsuo added a commit that referenced this issue Aug 21, 2024
@nmaya
Copy link
Member

nmaya commented Aug 21, 2024

このあたりの記事を見ると、漢字ユーザ名でもサーバを立てられそうな雰囲気はあります。

https://ascii.jp/elem/000/001/573/1573187/

Microsoft版OpenSSHでは、漢字の内部ユーザー名も利用可能だが

https://lecture.ecc.u-tokyo.ac.jp/JOHZU/joho/Y2023/RemoteShell/

ssh-keygenコマンドはユーザ名と同じ漢字のホームディレクトリに アクセスできず (snip) 作成後に~/.sshディレクトリに移動すれば良いでしょう

→ssh-keygen はだめでも、そのようにすればログインは可能なように思えます。

他のSSHクライアントでは、漢字ユーザでログインできるでしょうか?

@nmaya nmaya mentioned this issue Aug 21, 2024
20 tasks
@zmatsuo
Copy link
Member Author

zmatsuo commented Aug 22, 2024

"漢字"ユーザーでを作ってからWindowsに一度もログインしていませんでした。
Windowsに"漢字"ユーザーでログインして
("漢字"ユーザーのユーザーデータを初期化して?)から
sshで接続したところokでした。

ssh-utf8

パスワード入力(editboxの伏字設定)では、キーボードから漢字を入力できません。
でも、クリップボードからペーストができます。
"パスワード" にパスワードを設定してログインできました。

mainにマージしてよさそうです。

zmatsuo added a commit that referenced this issue Aug 22, 2024
ssh認証時にユーザー名、パスワード(パスフレーズ)をUTF-8で扱う #276
@zmatsuo
Copy link
Member Author

zmatsuo commented Aug 22, 2024

マージしました。
クローズします。

@zmatsuo zmatsuo closed this as completed Aug 22, 2024
@nmaya nmaya added this to the 5.3 milestone Aug 22, 2024
@nmaya nmaya added enhancement New feature or request and removed bug Something isn't working labels Aug 22, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants