PowerVS IBM i 日記(30): PowerVS IBM i 初期設定まとめ － ssh 鍵認証と日本語環境

# PowerVS IBM i 初期設定まとめ － ssh 鍵認証と日本語環境

これまで、試行錯誤で環境を作ってきました。
手順をあちらこちらに書き散らしているので、自分でも新規インスタンスを作成するのに、困っていました。

そこで、今回は新規インスタンスを作成後に、環境を日本語化するまでの手順をまとめることとしました。

パブリックネットワークを持つ PowerVS IBM i のインスタンスを作成し、SRC が 0000-0000 になって起動していることを前提としています。

## クライアントで ssh のキーベアを作成する

クライアント側はユーザーのホームディレクトリーでの実行を想定しています。
Windows であれば、通常「C:\Users\ユーザー名」です。
現在の Windows 10 では ssh-keygen、ssh や scp が標準で利用できます。

ssh-keygen で ssh のキーベアを作成します。
ホームディレクトリーの「.ssh」に鍵ペアが作成されます。

```
ssh-keygen -t rsa -b 4096
```

## IBM i コンソールからユーザー作成と sshd の起動

ポータルからコンソールに接続します。

QSECOFR/QSECOFR で接続します。
QSECOFR のパスワードを変更します。
ライセンス条項を許諾します。

9 文字や 10 文字のユーザー名で ssh 接続したい場合は、下記を sshd の開始前に実行します。

```
ADDENVVAR ENVVAR(PASE_USRGRP_LIMITED) VALUE('N') LEVEL(*SYS)
```

ssh 接続用のユーザーを作成します。

```
CRTUSRPRF USRPRF(yourUser) PASSWORD(yourPssword) HOMEDIR('/home/yourUser')
MKDIR DIR('/home/yourUser')
CHGOWN OBJ('/home/yourUser') NEWOWN(yourUser)
```

sshd を起動します

```
STRTCPSVR SERVER(*SSHD)
```

## クライアントから鍵認証の設定

公開鍵を scp で IBM i にコピーします。パスワードで認証します。
この scp は Windows 10 標準のものです。

```
scp .ssh\id_rsa.pub yourUser@[パブリックIP]:/home/yourUser/id_rsa.pub
```

ssh で接続します。パスワードで認証します。
この ssh も Windows 10 標準のものです。

```
ssh yourUser@[パブリックIP]
```

接続した ssh のセッションで鍵認証の設定をします。
「pwd」ではホームディレクトリーが正しく「/home/yourUser」か確認します。

```
pwd
mkdir .ssh
cat id_rsa.pub >> .ssh/authorized_keys
chmod 700 .
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
exit
```

再度、ssh で接続します。パスワード無しで接続されることを確認します。

```
ssh yourUser@[パブリックIP]
```

## IBM i コンソールから ssh のパスワード認証を除外

現在 ssh はパスワード認証が可能になっています。
ssh のパスワード認証を除外します。

設定ファイルを開きます。

```
EDTF '/QOpenSys/QIBM/UserData/SC1/OpenSSH/etc/sshd_config' 
```

設定ファイル内に「PasswordAuthentication no」を設定します。

```
PasswordAuthentication no
```

sshd を再起動します。

```
ENDTCPSVR SERVER(*SSHD)
STRTCPSVR SERVER(*SSHD)
```

これでパスワードでの認証ができなくなり、安全になりました。

## IBM i コンソールから Telnet の接続準備

Telnet 5250 で接続できるように、IBM i 側の設定をします。

端末の自動構成を可能にし、*SECOFR レベルの接続を可能にします。

```
CHGSYSVAL SYSVAL(QAUTOCFG) VALUE('1') 
CHGSYSVAL SYSVAL(QAUTOVRT) VALUE(10)
CHGSYSVAL SYSVAL(QLMTSECOFR) VALUE('0')
```

**--- 2023/03/26 追記 ここから---**
7.4 のストックイメージからデプロイしたところ上記の CHGSYSVAL は「CPF18C0 System value &1 cannot be changed.」のエラーで実行できませんでした。
実行するためには DST/SST での設定変更が必要です。
詳しくは[「PowerVS IBM i 日記(51): 新しいポータル GUI での PowerVS IBM i のデプロイ-8-コンソールへのアクセス・外部からのアクセス」](https://qiita.com/6onoda/items/f220dd9c11aa406f5abf)をご覧ください。
**--- 2023/03/26 追記 ここまで---**


Telnet サーバーを起動します。

```
STRTCPSVR SERVER(*TELNET)
```

## クライアントから ssh トンネル接続 (ACS の場合)

Windows 標準の ssh は 1024 以下のポートからのトンネルができないので Putty や Tera Term で ssh トンネル接続を設定します。

今回は、Tera Term を使います。

ユーザー名を指定し、秘密鍵にはホームディレクトリーの「.ssh\id_rsa」を指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/21f837e2-bf7e-f9f4-c728-19a81e62d28d.png)


ACS で Telnet 接続する場合、下記の 5 つのポートに対して ssh トンネルの設定をします。

Telnet のポート 23 には任意のローカルポートを、それ以外はそのままのポートを指定します。

23 - Telnet
449 - Server Mapper
8470 - License Management
8475 - Remote Command
8476 - Signon Verification

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/fb4cd914-b2ba-ed6d-80fd-512624fd6d54.png)

ACS で localhost のポート 23 に対応付けたポートに接続します。 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/d41ce707-8c3c-448e-d3db-865f7d54924d.png)

5250 画面が表示されました。これでコンソールを使わずに作業ができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/fcefcb45-8d60-c1f2-33ce-57a52926536e.png)

## クライアントからssh トンネル接続 (PCOMM の場合)

ACS ではなく PCOMM の場合は、ポート 23 へのトンネルのみで接続できます。
Windows 標準の ssh コマンドで Telnet のポート 23 に任意のローカルポートからの転送を指定するだけです。
Tera Term や Putty を使う必要はありません。

```
ssh yourUser@[パブリックIP] -L 50000:localhost:23
```

PCOMM では localhost ポート 23 に対応付けたポートに接続します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/460308ba-6329-8f53-2149-6ef51d2397e5.png)

接続されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/86e7c23d-f510-b516-e0d7-9a956802990f.png)

## 日本語環境用システム値の変更

日本語環境用にシステム値を変更します。

```
CHGSYSVAL SYSVAL(QCCSID) VALUE(1399)
CHGSYSVAL SYSVAL(QCNTRYID) VALUE(JP)
CHGSYSVAL SYSVAL(QDATFMT) VALUE(YMD)
CHGSYSVAL SYSVAL(QTIMZON) VALUE(QP0900JST)
```

## QINTER を 2次言語 2930 日本語に設定

コンソールは 1 次言語 2924 英語のまま、それ以外は 2930 日本語で接続出来るように設定します。

QINTER のサインオン画面は英語のままにしてありますが、お好みで QSYS2930/QDSINGON にしてもよいでしょう。

```
CHGSYSVAL SYSVAL(QCTLSBSD) VALUE('QCTL QSYS') 
CHGSBSD SBSD(QINTER) SYSLIBLE(QSYS2930)
```

## sshd と Telnet サーバーの自動起動

IPL 時に sshd と Telnet サーバーが自動起動するように設定します。

```
RUNSQL SQL('update QUSRSYS/QATOCSTART set AUTOSTART = ''*YES'' where SERVER in (''*TELNET'',''*SSHD'')') COMMIT(*NONE)
```

## 再起動して確認

再起動します。

```
PWRDWNSYS OPTION(*IMMED) RESTART(*YES) CONFIRM(*NO) 
```

サインオン後、メインメニューが日本語であることが確認できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184930/9437321f-d36e-c226-3eaf-ee1729ca66c3.png)

ここまで実行したらブートイメージにしておくとよいでしょう。

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

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