IBM Cloud の IBM Power Systems Virtual Server で IBM i を構築する(3)-ACSからの5250接続
前回 は、コンソールでメイン・メニューを出すところまで進みました。
前回は、ssh トンネルを使ってIBM Personal Communications (PCOMM) で接続しました。
今回は ACS から接続したいと思います。
実ははまっています。
ACS はもっとたくさんのポートが必要
前回は、単純化のためにサーバーのポート 23 だけを、トンネルの対象にしました。
しかし、ACSを接続するには、もっとたくさんのポートの転送が必要になります。
PCOMM のライセンス管理をIBM iは行わないのでポート 23 だけに接続できれば Telnet 5250 接続が可能です。
しかし、ACS では Telnet 5250 接続をするためにライセンスサーバーやコマンドサーバーにも接続する必要があります。
そのため、IBM のガイドはたくさんのポートを転送するようになっています。
ssh -L 50000:localhost:23 -L 2001:localhost:2001 -L 2005:localhost:2005 -L 449:localhost:449 -L 8470:localhost:8470 -L 8471:localhost:8471 -L 8472:localhost:8472 -L 8473:localhost:8473 -L 8474:localhost:8474 -L 8475:localhost:8475 -L 8476:localhost:8476 -o ExitOnForwardFailure=yes -o ServerAliveInterval=15 -o ServerAliveCountMax=3 <myuser>@<myIPaddress>
しかも、ポート番号を変えてないとことは、ユーザーで任意に構成するのが困難なポートであることを示しています。
例えば、このあたりは、IBM Navigator for i 周りですね。
-L 2001:localhost:2001 -L 2005:localhost:2005
IBM i の ポート 2001 にアクセスすると、以前は ポート 2005 のIBM Navigator for i の https に転送されて、HTTPAdminとか DCMとか ポート 2001 で動くサーバーの機能を要求すると、2001 に転送する仕様ですね。
現在は、https の 2005ではなく、http の 2004 が標準では使われるので、2004 も追加して欲しい...というのは、置いておいて、複数のポートを組み合わせて使う...その組み合わせ先ポートをユーザーが簡単に指定できないという場合、複数サーバーを sshd トンネルで同時に管理できないという制約になります。
先に述べた通り、ACS の Telnet 5250 も ポート 23 の前に複数ポートにアクセスする必要があるので、同時に複数サーバーに接続するのは素直にはいかないはずです。
PCOMM の通信を切断し、「$」で待機している ssh トンネルのセッションを「exit」で終了します。
では、IBM のガイドの通りに ssh を実行しましょう。
C:\Users\YASUHIROOnoda>ssh -L 50000:localhost:23 -L 2001:localhost:2001 -L 2005:localhost:2005 -L 449:localhost:449 -L 8470:localhost:8470 -L 8471:localhost:8471 -L 8472:localhost:8472 -L 8473:localhost:8473 -L 8474:localhost:8474 -L 8475:localhost:8475 -L 8476:localhost:8476 -o ExitOnForwardFailure=yes -o ServerAliveInterval=15 -o ServerAliveCountMax=3 admin@158.175.XXX.XXX
Privileged ports can only be forwarded by root.
root でないと、特権ポートを転送できないとエラーになりました。ポート449 の as-servermap
が該当しているようです。
Windows ではもちろん root にはなれません、管理者権限でコマンド・プロンプトを起動してもダメでした。
こちらによると、Windows 用 ssh の制約で、Windows 用 の ssh 7.8 で、この制約はなくなった模様です。
一方、標準で導入されていたのは、7.7 です。
C:\Users\YASUHIROOnoda>ssh -V
OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5
制約のないポートは変更できるか
as-servermap が起動するポートを変更してしまえばいいはずです。
「ホスト・サーバーのポート番号」を見ると、こうあります。
サーバー・マッパーは、他のホストサーバーがどのポートで起動しているかをクライアントのい伝える役割を持ち、サービステーブルの「as-svrmap」のエントリーできづおっポートを変えられそうです。
Access for Windows の場合は、「接続」タブの「リモートポートをルックアップする場所」でどのポートにつなぐかを、指定できるようです。だた、サーバーごとには指定できないのですが...
1 「ローカル」が選択されている場合には、PC 上の SERVICES ファイルに System i Access のホスト・システムの項目を必ず含むようにしてください。これを実行する場合の援助については、ネットワーク管理者に連絡してください。SERVICES ファイルは、Windows がインストールされているディレクトリー内の system32\drivers\etc にあります。System i Access ホスト・システムのサービス名および標準ポート番号については、Information Center の「ホスト・サーバーのポート番号)」にあります。SERVICES ファイル中の項目はシステムごとに入力することはできません。したがって、ローカル・ポート探索を使用するすべての接続は、同じポート番号を使用して接続します。
ACS の「接続」には、そのような設定はありませんね。
結局 PuTTY で ssh トンネル
Windows 標準でない ssh に更新はしたくありません。
ACS で変更後の任意のポートに接続できるか、ちょっと不明なので、今回は IBM のガイド通り putty で行いましょう。
Telnet 自体ば ポート 23 を利用しますが、それ以外のポートも必要です。
「TCP/IP Ports Required for IBM i Access and Related Functions」にACSで使うポートが一覧されています。
注目するのは、ここです。
The following ports are common to most IBM i Access Client products such as ODBC, Telnet and other specific functions:
Port 449 is used to look up service by name and return the port number.
Ports 8470 and 9470(TLS/SSL) are used for host code page translation tables and licensing functions.
Ports 8475 and 9475(TLS/SSL) are used to check for application administration restrictions.
Ports and 9476(TLS/SSL) are used for checking signon verification to authenticate.
depending on your needs you may only need the above ports and the port(s) for your function/application.
今回は TLS/SSL を使いません。それでも 449、8470、8475、8476 のトンネルが 23 の他に最低でも必要です。
必要に応じて、さらにトンネルのポートを追加します。
宛先が「localhost:xxxxx」となっているのは、ssh 接続先(つまり出口)から、さらにどこに接続するかを設定するためです。
pytty で接続すると、ポートが LISTENING になります。
TCP 127.0.0.1:449 0.0.0.0:0 LISTENING
TCP 127.0.0.1:8470 0.0.0.0:0 LISTENING
TCP 127.0.0.1:8475 0.0.0.0:0 LISTENING
TCP 127.0.0.1:8476 0.0.0.0:0 LISTENING
TCP 127.0.0.1:50000 0.0.0.0:0 LISTENING
localhost:50000 に接続します。
ユーザー/パスワードのプロンプトがでるの対応するとサインオン画面が出ます。
なお。IBM i 側に、こんなエラーが出ていました。
WRKLININF で確認すると。Usage limit が 0 でした。、
「*NOMAX」に変更します。
IBM i にとって、この接続は localhost からの接続になります。
DSPDEVD で確認したとこと、IPv6 のlocalhost からとして接続されていました。
IPv4 での接続に固定したいなら転送先を「localhost:23」ではなく「127.0.0.1:23」にすればいいでしょう。
実は、今回、ハマって遠回りしました。
PuTTY のトンネルでも PCOMM はつながるのに ACS ではつながらないのです。
原因はトンネル設定で、サインオンサーバーへの転送を「localhost:8476」ではなく「localhots:8476」とスペルミスをしたためでした。
分かってしまえば単純なのですが、わからない時は、わからないものです。
当日記のIndexはこちらです。
許可の無い転載を禁じます。
この記事は筆者の個人的な責任で無保証で提供しています。
当記事に関してIBMやビジネスパートナーに問い合わせることは、固くお断りします。