ushidayの日記

主に「IBMi」のメモに・・・

IBM iのSSH設定その3

前回の続きです。IBM i(※以下AS/400)にSSHサーバーを立てたので、公開鍵認証にします。それから、外部環境からインターネット越しに、SSHで接続して、5250エミュが使えるかやってみました。

sshd_configの変更

まず、パスワード認証やユーザー制限を掛ける為に、SSHデーモンの設定ファイル”sshd_config”を変更します。”sshd_config”は「/QOpenSys/QOpenSys/QIBM/UserData/SC1/OpenSSH/openssh-3.5p1/etc/sshd_config」にあります。

  • 以下の項目を設定します。
# rootでのログインの許可 
PermitRootLogin no
# RSA 認証が成功した時、rhosts を使った認証を許可。
RhostsRSAAuthentication no
# パスワード認証を許可
PasswordAuthentication no
# 空のパスワードを許可
PasswordAuthentication no
# 特定ユーザのみ接続許可をする
AllowUsers user1 user2


SSHクライアントからホストへユーザー名が届く時には、小文字として認識されている様です。
AllowUsersは小文字で登録する必要が有ります。
AllowUsersを使う場合は、SSHクライアントのユーザー名とホームディレクトリ名も完全一致している必要があります。

設定後、SSHデーモンを再起動します。

公開鍵・秘密鍵の作成
  • 公開鍵・秘密鍵を作成するまでの手順は以下の通りです。
    1. 「CALL QP2TERM」でシェルを起動
    2. SSH接続するユーザーのホームディレクトリに「.sshディレクトリを作成
    3. ssh-keygen」コマンドで、公開鍵と秘密鍵を作成
    4. 公開鍵を「authorized_keys」に追加

手順をまとめると以下の通りです。

   $ // ディレクトリ移動
 > cd /home/user1
   $ // 「.ssh」ディレクトリ作成
 > mkdir .ssh
   $ // ディレクトリ移動
 > cd .ssh
   $ // 鍵を作成
 > ssh-keygen -t rsa
    公開 / 秘密  rsa  鍵ペアの生成中。
   Enter file in which to save the key (/home/user1/.ssh/id_rsa):
 > ( 実行キー )
   Enter passphrase (empty for no passphrase): 
 > ( 秘密鍵のパスワード入力 )
   Enter same passphrase again:  識 
 > ( パスワード確認入力 )
    別が  /home/user1/.ssh/id_rsa  に保管されました。                         
    自身の公開鍵が  /home/user1/.ssh/id_rsa.pub  に保管されました。           
 キーの指紋 :
   $ // 公開鍵の登録
> cat id_rsa.pub >> authorized_keys
   $

上記で出来た秘密鍵の「id_rsa」は、クライアント側で厳重に保管します。クライアント側で鍵を作成して、サーバーに登録でも構いません。(今回、githubの時に、cygwinで作成した鍵でも試してみましたが、もちろんOKでした。)。windowsの場合は”TeraTerm”などを使えば、以下の様に簡単に出来ます。

SSHクライアントの実行

今回はTeraTermでやってみました。設定は以下の通りです。

  • 「漢字コード」を”SJIS”にする

  • メニューの[設定(S)]→[SSH認証(A)]で「sshのユーザー」と、「秘密鍵」を設定する。

  • メニューの[設定(S)]→[設定の保存(S)]で設定を保存しておく(次回から設定読込で使えます)

  • メニューの[ファイル]→[新しい接続]でSSHへ接続を行う。(パスフレーズ秘密鍵を作ったときのパスワード。)


ディレクトパーミッション・所有権

実は、ここで少し躓きました。
自分は、ディレクトリ作成、鍵の配置やらを、前述の様にシェルを使って、操作をしたのではなく、実はiナビ(オペナビ)でしていました。その為、パーミッションの設定や、所有権がメタメタで、SSHで接続しても、「Permission denied (publickey,keyboard-interactive).」となってしまいました。最初は、クライアント側の-vオプションで、デバッグしても、「何事か?」と全く解からず、「ならばと」サーバー側のデーモンをデバッグモードの「sshd -d」で動かすと、ようやく「原因は”パーミッション”と”所有権”にある」と気づいたのでした。恥ずかしい...:-p

 +--home
     +--user_home ( 755 )
         +--.ssh ( 700 )
             +--authorized_keys ( 644 )
  • シェルで以下を実行
chmod 755 /home/user_home
chmod 700 /home/user_home/.ssh
chmod 644 /home/user_home/.ssh/authorized_keys
chown user /home/user_home
chown user /home/user_home/.ssh
chown user /home/user_home/.ssh/authorized_keys
ルーターのNATアドレス&ポート変換

外部からルーター越しにSSHが実行できる様にする為、ルーターの22ポートを、SSHサーバーの22ポートへ転送します。

ポートフォワードで5250やVNC

インターネット環境からポートフォワードで5250エミュレータを実行してみます。
Windows環境なので、TeraTermでポートフォワードの設定をしました。

  • メニューの[設定(S)]→[SSH転送(O)]で、クラインアンとの任意ポート(※8881とする)フォワード先のホストとポートを設定します。



  • 5250エミュレータのセッションを設定。リンク・パラメータのホストを「localhost」、ポートを「8881」とします。



これでバッチリ繋がったので、自宅や移動中も5250が使えます。VNCも試しにやったら問題なくOKでした。ただWindwosのリモート・デスクトップは何故か?SSHデーモンからのフォワードでタイムアウト。:-(
↑勘違いでした。ただのタイポでした。最近歳のせいかタイポが多い気がする。ヤバイ...。
またそのうち、チャレンジしてみます。