PowerVS IBM i 日記(3): IBM Cloud の IBM Power Systems Virtual Server で IBM i を構築する(3)－ACSからの5250接続

#  IBM Cloud の IBM Power Systems Virtual Server で IBM i を構築する(3)－ACSからの5250接続
[前回](https://qiita.com/6onoda/items/21c01c868b7284fe6e47) は、コンソールでメイン・メニューを出すところまで進みました。
前回は、ssh トンネルを使ってIBM Personal Communications (PCOMM) で接続しました。
今回は ACS から接続したいと思います。
実ははまっています。

## ACS はもっとたくさんのポートが必要

[前回](https://qiita.com/6onoda/items/21c01c868b7284fe6e47)は、単純化のためにサーバーのポート 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 で、この制約はなくなった模様です。

https://github.com/PowerShell/Win32-OpenSSH/issues/1350

一方、標準で導入されていたのは、7.7 です。

```
C:\Users\YASUHIROOnoda>ssh -V
OpenSSH_for_Windows_7.7p1, LibreSSL 2.6.5
```
### 制約のないポートは変更できるか

as-servermap が起動するポートを変更してしまえばいいはずです。

「[ホスト・サーバーのポート番号](https://www.ibm.com/support/knowledgecenter/ja/ssw_ibm_i_72/rzajr/rzajrmstsvrprtnum.htm)」を見ると、こうあります。

サーバー・マッパーは、他のホストサーバーがどのポートで起動しているかをクライアントのい伝える役割を持ち、サービステーブルの「as-svrmap」のエントリーできづおっポートを変えられそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/76496813-7aa3-c75a-9c98-2e3f0992227b.png)

Access for Windows の場合は、「接続」タブの「リモートポートをルックアップする場所」でどのポートにつなぐかを、指定できるようです。だた、サーバーごとには指定できないのですが...

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/b846aff9-76f2-ae28-b974-32b2ab3e5b2e.png)

> 1 「ローカル」が選択されている場合には、PC 上の SERVICES ファイルに System i Access のホスト・システムの項目を必ず含むようにしてください。これを実行する場合の援助については、ネットワーク管理者に連絡してください。SERVICES ファイルは、Windows がインストールされているディレクトリー内の system32\drivers\etc にあります。System i Access ホスト・システムのサービス名および標準ポート番号については、Information Center の「ホスト・サーバーのポート番号)」にあります。SERVICES ファイル中の項目はシステムごとに入力することはできません。したがって、ローカル・ポート探索を使用するすべての接続は、同じポート番号を使用して接続します。

ACS の「接続」には、そのような設定はありませんね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/256797f7-4da2-d778-77fa-b2dfecfbfb9a.png)

### 結局 PuTTY で ssh トンネル

Windows 標準でない ssh に更新はしたくありません。
ACS で変更後の任意のポートに接続できるか、ちょっと不明なので、今回は IBM のガイド通り putty で行いましょう。

Telnet 自体ば ポート 23 を利用しますが、それ以外のポートも必要です。

「[TCP/IP Ports Required for IBM i Access and Related Functions](https://www.ibm.com/support/pages/tcpip-ports-required-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 接続先(つまり出口)から、さらにどこに接続するかを設定するためです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/d3ecee29-4d01-e443-4677-18ff85226a33.png)

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 に接続します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/718643c5-eed5-a933-3c1e-7ff1e33be71c.png)

ユーザー/パスワードのプロンプトがでるの対応するとサインオン画面が出ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/3582bf29-3e86-07a5-f58c-63471d7b53c1.png)

なお。IBM i 側に、こんなエラーが出ていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/334bbf78-7f4b-5aa9-cd52-bab5107d7801.png)

WRKLININF で確認すると。Usage limit が 0 でした。、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/cbaa641d-97fc-a393-966a-4591f038dc8e.png)


「*NOMAX」に変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/49b44563-0cd1-2e78-ea98-f0b4d85d9c01.png)

IBM i にとって、この接続は localhost からの接続になります。
DSPDEVD で確認したとこと、IPv6 のlocalhost からとして接続されていました。
IPv4 での接続に固定したいなら転送先を「localhost:23」ではなく「127.0.0.1:23」にすればいいでしょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/f3607d89-368c-b7fc-695c-663c29bb6996.png)


実は、今回、ハマって遠回りしました。
PuTTY のトンネルでも PCOMM はつながるのに ACS ではつながらないのです。
原因はトンネル設定で、サインオンサーバーへの転送を「localhost:8476」ではなく「localhots:8476」とスペルミスをしたためでした。
分かってしまえば単純なのですが、わからない時は、わからないものです。

---
当日記のIndexは[こちら](https://qiita.com/6onoda/items/f146c78c0c1bbe905a42)です。

---
許可の無い転載を禁じます。
この記事は筆者の個人的な責任で無保証で提供しています。
当記事に関してIBMやビジネスパートナーに問い合わせることは、固くお断りします。