2020-10-03

VT端末で使われるLK201キーボードを意識したRLoginにおけるキー配置

OpenVMS Alpha 8.4-2L1にRLoginを用いてSSH接続することが出来るようになりました。コマンドラインで普通にキー入力している分には問題になりませんが、エディタを使おうとすると多少厄介な問題があります。


OpenVMSはDEC製なので、端末もDEC製のVTシリーズが利用されます。VTシリーズで使われる標準的なキーボードLK201はファンクションキー等の配置がPCで使われているキーボードとは異なります。両者の違いをどのように吸収して配置するかを考えなければなりません。


まずLK201のファンクションキーは20個ですが、PCは12個しかありません。そこでPCのファンクションキーF1~F10を使って対応付けます。

  1. PCのF1~F10を、LK201のF1~F10に対応させます。
  2. PCのF1~F10を「ALT」キーと共に押した場合、LK201のF11~F20に対応させます。

LK201はテンキーの上の段の4個をPF1~PF4として扱います。このようなものはPCのキーには存在しません。そこでPCのF1~F4に割り当てることにします。これでは上述したファンクションキーと重なってしまうように思えます。しかしVTではF1~F5は特殊目的に使われているので、問題ないでしょう。

VTではF15を「Help」、F16を「Do」として扱います。エディタでも良く使われます。そこでこの2個をF11とF12に割り当てることにしました。当然ながらALTを押しながらF5やF6を押しても同等のはずです。


以上のような方針でRLoginのキー配置を変更します。デフォルトではVT52に対応させる設定が入っていますが、全て削除しました。 

TTSSH.LOGを生成する方法

Tera TermでSSH接続時の詳細情報は「TTSSH.LOG」に記録されるようです。Tera Termの設定ファイルで「TTSSH が TTSSH.LOG に記録するログのレベルを設定します。」のような記述があります。ここで疑問が生じます。そのファイル「TTSSH.LOG」は「何処に」出来るのでしょうか? 


設定ファイルで出力先ディレクトリを指定するのでしょうか?もしそうであるなら、その指定をおこなうためのキーワードは何でしょうか?


いろいろと調べてみたら、ログファイル「TTSSH.LOG」は、実行ファイル「ttermpro.exe」のあるディレクトリに作成されるそうなのです。そのディレクトリは「C:\Program Files (x86)\teraterm」ですが、ファイルはありません。いったいどうなっているのでしょう。


もしかすると書き込み権限が悪さをしていてファイルが出来ていないのかもしれません。そこでTera Termを管理者権限で実行させてみました。すると「TTSSH.LOG」が出来ていました。やはり権限の問題なのでしょう。


管理者権限でなくてもログファイルが出来るようにするため、ディレクトリに権限を与えておきたいと思いましたが、どうしたら良いか分かりません。これは将来の課題としておきます。

Tera TermでOpenVMSにSSH接続する

Tera Term 4.105(Tera Term Secure Shell extension 2.91)でOpenVMSにSSH接続しようとしましたが、最終的に接続できませんでした。Windows10附属ssh.exeやRLoginでは接続できていますし、同じ鍵を使っているので接続できるはずだと思いますが駄目でした。


Windows10でTera Termを使っているだけでは、何が悪くて接続できないのか、さっぱり分かりません。SSHで接続しようとした際のログファイルを確認する必要があります。

  • Tera Term側のログは「C:\Program Files (x86)\teraterm\TTSSH.LOG」にあります。
  • OpenVMS側のログは「SYS$SYSDEVICE:[TCPIP$SSH]TCPIP$SSH_RUN.LOG」にあります。

ログを確認すると、Tera Term側から「SSH2_MSG_DISCONNECT」を送っているようです。その前後のログは以下のようになっていました。
2020-10-03 06:05:05.656Z [27016] ssh2_kex_finish: SSH2_MSG_NEWKEYS was sent. 2020-10-03 06:05:05.677Z [27016] SSH2_MSG_IGNORE was received. 2020-10-03 06:05:05.677Z [27016] SSH2_MSG_NEWKEYS was received(DH key generation is completed). 2020-10-03 06:05:05.696Z [27016] Server reports supported authentication method mask = 65580 2020-10-03 06:05:05.696Z [27016] Entering secure mode 2020-10-03 06:05:05.696Z [27016] User authentication will be shown by 0 method. 2020-10-03 06:05:05.902Z [27016] CRYPT_set_random_data: RAND_bytes call 2020-10-03 06:05:05.906Z [27016] finish_send_packet_special: built packet info: aadlen:0, enclen:32, padlen:10, datalen:52, maclen:20, mode:E&M 2020-10-03 06:05:05.906Z [27016] SSH2_MSG_SERVICE_REQUEST was sent at do_SSH2_userauth(). 2020-10-03 06:05:05.906Z [27016] SSH2_MSG_IGNORE was received. 2020-10-03 06:05:05.906Z [27016] SSH2_MSG_SERVICE_ACCEPT was received. service-name=ssh-userauth 2020-10-03 06:05:05.906Z [27016] CRYPT_set_random_data: RAND_bytes call 2020-10-03 06:05:05.916Z [27016] finish_send_packet_special: built packet info: aadlen:0, enclen:48, padlen:4, datalen:68, maclen:20, mode:E&M 2020-10-03 06:05:05.917Z [27016] SSH2_MSG_USERAUTH_REQUEST was sent do_SSH2_authrequest(). (method 0) 2020-10-03 06:05:05.927Z [27016] SSH2_MSG_IGNORE was received. 2020-10-03 06:05:05.927Z [27016] SSH2_MSG_USERAUTH_BANNER was received. 2020-10-03 06:05:05.927Z [27016] Banner len: 69, Banner message: Welcome to OpenVMS (TM) Alpha Operating System, Version V8.4-2L1 . 2020-10-03 06:05:05.927Z [27016] Banner ltag len: 2, Banner Language Tag: en 2020-10-03 06:05:27.859Z [27016] CRYPT_set_random_data: RAND_bytes call 2020-10-03 06:05:27.859Z [27016] finish_send_packet_special: built packet info: aadlen:0, enclen:48, padlen:6, datalen:68, maclen:20, mode:E&M 2020-10-03 06:05:27.859Z [27016] SSH2_MSG_DISCONNECT was sent at SSH_notify_disconnecting(). 2020-10-03 06:05:27.876Z [27016] SSH2_MSG_IGNORE was received. 2020-10-03 06:05:27.876Z [27016] SSH2_MSG_USERAUTH_FAILURE was received.
OpenVMS側では以下のようなログを出しています。
debug( 3-OCT-2020 15:05:54.30): Ssh2Transport/TRCOMMON.C:2832: >TR packet_type=50
debug( 3-OCT-2020 15:05:54.31): SshUnixUser/SSHUNIXUSER.C:3122: ovms_pw->pw_dir:KAZ$USER:[FURUSAWA]  unix_passwd.pw_dir:/dka100/user/furusawa/ 
debug( 3-OCT-2020 15:05:54.31): Sshd2/SSHD2.C:1655: user 'furusawa' service 'ssh-connection' client_ip '192.168.1.31' client_port '53402' completed ''
debug( 3-OCT-2020 15:05:54.32): Sshd2/SSHD2.C:2108: output: publickey
debug( 3-OCT-2020 15:05:54.32): Ssh2Transport/TRCOMMON.C:1139: Sending packet with type 2 to connection
debug( 3-OCT-2020 15:05:54.32): Ssh2Transport/TRCOMMON.C:1139: Sending packet with type 53 to connection
debug( 3-OCT-2020 15:05:54.32): Ssh2Transport/TRCOMMON.C:1139: Sending packet with type 2 to connection
debug( 3-OCT-2020 15:05:54.32): Ssh2Transport/TRCOMMON.C:1139: Sending packet with type 51 to connection
debug( 3-OCT-2020 15:06:16.25): Ssh2Transport/TRCOMMON.C:2832: >TR packet_type=1
debug( 3-OCT-2020 15:06:16.25): Ssh2Common/SSHCOMMON.C:180: DISCONNECT received: authentication cancelled
Sat 03 15:06:16 INFORMATIONAL: Remote host disconnected: authentication cancelled
debug( 3-OCT-2020 15:06:16.25): Sshd2/SSHD2.C:760: locally_generated = FALSE
Sat 03 15:06:16 INFORMATIONAL: disconnected by application in remote: 'authentication cancelled'

Tera Termを使わなくてもRLoginならばOpenVMSにSSH接続できるので、実害はありません。この場合、Tera Term側が「SSH2_MSG_DISCONNECT was sent」となっており、OpenVMS側が「Remote host disconnected」となっているので、Tera Term側が接続を断っているように見えます。他のSSHクライアントであれば接続できているので、Tera Term側の問題であることが疑われます。

RLoginでOpenVMSにSSH接続する

RLogin 2.25.5(2020/09/25)でOpenVMSにSSHで接続する設定を行いました。


普通にSSH接続のための設定をおこなうことで無事に接続できて、それは良かったのですが、ログアウトしようとすると問題がおきました。 


ログアウトすると「ssh Receive 'CBuffer Get32Bit'」というダイアログが出てきて接続が閉じません。仕方ないのでメニューから[ファイル]>[接続を閉じる]をおこなうと「現在、接続中です。接続を閉じますか?」というダイアログが出てきます。ここで「はい」を選べば、接続は閉じますが、釈然としません。

C:\Windows\System32\OpenSSH\ssh.exeでOpenVMSにSSH接続する

C:\Windows\System32\OpenSSH\ssh.exeでOpenVMSにSSH接続しようとしたらエラーが出ました。

C:\Users\FURUSAWA\.ssh>ssh -i id_rsa furusawa@192.168.1.161

Unable to negotiate with 192.168.1.161 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1

C:\Users\FURUSAWA\.ssh>


エラーメッセージを頼りにWebを検索したら「macでssh接続をしたときno matching key exchange method found. Their offer: diffie-hellman-group1-sha1と言われて接続できない」という情報が見つかりました。この記事によるとファイル「config」を作成すれば良いようです。その通りにしたところ、無事に接続できました。

C:\Users\FURUSAWA\.ssh>type config

KexAlgorithms +diffie-hellman-group1-sha1

C:\Users\FURUSAWA\.ssh>ssh -i id_rsa furusawa@192.168.1.161


 Welcome to OpenVMS (TM) Alpha Operating System, Version V8.4-2L1

Enter passphrase for key 'id_rsa':


    Last interactive login on Saturday, 3-OCT-2020 15:20:29.27


$ logout

Connection to 192.168.1.161 closed.-2020 15:21:03.67

C:\Users\FURUSAWA\.ssh>


2020-10-02

OpenVMS Alpha 8.4-2L1のSSH設定

OpenVMS Alpha 8.4-2L1に対してWindows10からSSH接続できました。設定する上で注意が必要な点が幾つかありました。

C:\Users\FURUSAWA\.ssh>ssh -i id_rsa furusawa@192.168.1.161

 Welcome to OpenVMS (TM) Alpha Operating System, Version V8.4-2L1

Enter passphrase for key 'id_rsa':


    Last interactive login on Friday, 2-OCT-2020 11:03:16.17


$ logout

Connection to 192.168.1.161 closed.-2020 12:05:27.60

C:\Users\FURUSAWA\.ssh>


最も注意しておくべきなのは、TCP/IP Services for OpenVMSにおけるSSHはOpenSSHではないことです。Webを検索した場合、OpenSSHを前提とした情報が多く見つかるので、それを鵜のみにして設定作業をおこなっても、うまくいかないでしょう。設定作業の参考になったのはWebで見つけた記事「SSH public key authentication on OpenVMS」でした。


OpenVMSで使える鍵にED25519は利用できません。最近のOpenSSHではED25519が使えるので、他のサイトに入るための鍵に僕はED25519を使っています。それとは別にRSAなどで鍵を準備しなければなりません。


最近のWindows10では標準でOpenSSHが入っているようです。

C:\Users\FURUSAWA\.ssh>C:\Windows\System32\OpenSSH\ssh.exe -V

OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5


これを使ってRSA鍵を作ります。このままではOpenSSH形式なので、SECSH形式に変換します。

C:\Users\FURUSAWA\.ssh>ssh-keygen

(略)

C:\Users\FURUSAWA\.ssh>ssh-keygen -f id_rsa.pub -e > id_rsa.secsh


OpenVMS側には、Windows10で作成したSECSH形式の公開鍵を置きます。ファイル名は変えなくても構いません。しかしOpenSSHでは~/.ssh/authorized_keysに公開鍵が格納されるのでファイル名を気にする必要がありませんでしたが、OpenVMSでは独立したファイルとして置かれるため、秘密鍵のあるサイトを連想しやすい名前にしておいた方が(必須ではありませんが)無難です。

$ dir/sec

Directory KAZ$USER:[FURUSAWA.SSH2]

AUTHORIZATION.;1     [FURUSAWA]                       (RWED,RWED,RE,)

FURUSAWA-WINDOWS.PUB;1

                     [FURUSAWA]                       (RWED,RWED,RE,R)

Total of 2 files.

$ type authorization.;

KEY FURUSAWA-WINDOWS.PUB


以上の設定で、Windows10からOpenVMSにSSHでログインできました。

2020-09-29

RLoginでOpenVMSに接続した際の端末タイプの設定方法

先日インストールしたOpenVMS Alpha 8.4-2L1にRLoginで接続すると、端末タイプが「VT500相当」になります。VT500相当ではいけないという事ではありませんが、VT100などにはならないのか、そもそも任意に変更できるのか、不明でした。

$ show term

Terminal: _OPA0:      Device_Type: VT500_Series  Owner: SYSTEM


RLoginのWebサイトにある「エスケープシーケンス一覧」によると、「DA1」の応答はTermID設定によって変化すると書かれています。その「TermID設定」とは「3.6.1 ESC/CSI/DCSの設定」によれば次のように書かれています。

各種IDでは、DA1,DA2,DA3で応答する番号の初期値を設定できます。


試してみたところ、次のように変化しました。

  1. TermIDを「10」とした場合「VT500_Series」になる。
  2. TermIDを「9」とした場合「VT400_Series」になる。
  3. TermIDを「7」か「8」とした場合「VT300_Series」になる。
  4. TermIDを「5」か「6」とした場合「VT200_Series」になる。
  5. TermIDを「2」か「3」か「4」とした場合「VT102」になる。
  6. TermIDを「0」か「1」とした場合「VT100」になる。

OpenVMSに接続する場合、どのVT互換として利用すれば良いのかは、迷うところです。VT220などのキーボードは、IBM-PCのキーボードとは(似ていますが)重要なキー(DOキーなど)に差異があります。このハンドリングをRLoginで対応できるのかを、見極めなければならないと思います。