SSH(TTSSH)の設定方法



●sshとは

sshとは、パスワードや通信路の暗号化を行って安全な通信を保証する、telnet/rloginの代替機能です。sshを使用すればパスワードが平分でネット上を流れることはありませんし、デフォルトで通信路も暗号化されます。さらにLinux/Unixにインストールした場合にはscpというコマンドが作成されますが。これを安全なrcpとして使用することができます。

●TTSSHとは

TTSSHは、Windows 95/98/NT上で動作するsshクライアント機能です。フリーのtelnetクライアントであるTera Term Proのアドインとして実装されています。Windows環境からインターネット経由でLinuxサーバのメンテナンスを行いたい場合には。必須のツールと言えるでしょう。

ここでは、sshdをインストールしてLinux同士の接続を行い、さらにWindowsからLinuxに対してセキュアな通信を確立するまでの手順について述べます。

まず、以下のようにrpmfind.net等からダウンロードしてきた最新版のsshのrpmファイルをインストールします。
  # rpm -ivh openssl-0.9.5a-1vl3
  # rpm -ivh openssh-1.2.3-1vl1
  # rpm -ivh openssh-askpass-1.2.3-1vl1
  # rpm -ivh openssh-askpass-gnome-1.2.3-1vl1
  # rpm -ivh openssh-clients-1.2.3-1vl1
  # rpm -ivh openssh-server-1.2.3-1vl1
src形式のファイルは以下からダウンロード可能です。

openssl-0.9.5a-1vl3.src.rpm
openssh-2.5.1p2-0vl1.src.rpm

●sshd(ホストキー)の設定

  $ su -c "ssh-keygen -b 1024 -f /etc/ssh/ssh_host_key  -N ''"
と入力すると、以下のようにパスワードの入力を問い合わせてきますので、パスワードを入力します。
  Password:(パスワードを入力)
  Generating RSA keys:  ............................ooooooO......................ooooooO
  Key generation complete.
  Your identification has been saved in /etc/ssh/ssh_host_key.
  Your public key has been saved in /etc/ssh/ssh_host_key.pub.
  The key fingerprint is:
  1024 f7:10:97:8c:5c:e4:80:fe:0c:8c:16:70:7f:54:1c:a7 root@test.os.******.**.jp
/etc/ssh/ssh_host_key /etc/ssh/ssh_host_key.pubが作成されているか確認する。
  $ ls -l /etc/ssh
  -rw-r--r--    1 root     root          962 Aug 10  2000 ssh_config
  -rw-------    1 root     root          550 Aug 13 11:57 ssh_host_key
  -rw-r--r--    1 root     root          354 Aug 13 11:57 ssh_host_key.pub
  -rw-------    1 root     root         1118 Aug 10  2000 sshd_config
問題なく作成されているようです。

●config(sshd_config)ファイルの設定
  # This is ssh server systemwide configuration file.
  Port 22  ←  sshdが待ち受けを行うポート番号の指定します。
               デフォルトは22番です。
  ListenAddress 0.0.0.0  ←  待ち受けに使うネットワーク・インターフェースのIPアドレスを指定します。
                             デフォルトは0.0.0.0、すなわち全てのインターフェースです。
  #ListenAddress ::
  HostKey /etc/ssh/ssh_host_key  ←  ホストRSA鍵ファイルの位置をフルパスで指定します。
  ServerKeyBits 768  ←  sshdが乱数により発生させる鍵のビット長を指定。
                         512ビット以上であることが必要です。デフォルトでは768ビットです。
  LoginGraceTime 600
          ↑  ログイン・プロンプトを表示してから、ログインが成功するまでの制限時間を指定します。
              デフォルトは600秒です。
  KeyRegenerationInterval 3600
          ↑  サーバはsshコマンドからの接続を処理するごとに使い捨ての鍵を再生成します。
              また、これとは別に一定時間使われなかった、すなわち、一定時間sshコマンドからの
              接続要求がこなかった場合にも鍵を再生成します。この命令を使うと、
              使われなかった鍵の再生成間隔を秒単位で指定できます。デフォルトは3600秒です。
  PermitRootLogin yes  ←  スーパーユーザのログインを許可するかどうかを指定します。
                           nopwdを指定すると、パスワード認証でのログインを禁止します。
                           デフォルトはyesです。
  #
  # Don't read ~/.rhosts and ~/.shosts files
  IgnoreRhosts yes  ←  /etc/hosts.equivと/etc/shosts.equivを認証に使用するかどうかを指定します。
                        デフォルトはyesです。
  # Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
  #IgnoreUserKnownHosts yes  ←  RhostsRSAAuthenticationにsshdがユーザの$HOME/.ssh/known_hostsを
                                 無視するべきかどうか指定します。
                                 デフォルトはnoです。
  StrictModes yes  ←  sshの関連ファイルのファイルモードが正しく設定されているかどうかチェックします。
                       デフォルトはyesです。
  X11Forwarding no  ←  Xプロトコルを転送するかどうかを指定します。
                        デフォルトはnoです。
  X11DisplayOffset 10  ←  sshdによって転送されるXサーバのディスプレイ番号の差分を指定します。
                           Xサーバは複数のディスプレイを管理できるように設計されており、
                           それぞれのディスプレイはディスプレイ番号で区別されます。
                           ディスプレイが1つしかない場合、ディスプレイ番号は0です。
                           sshを使ってXプロトコルを転送すると技術的には
                           複数のディスプレイを持つことになります。
                           1つはXプロトコルの転送を始める前から使っていた本当のディスプレイ、
                           残りはsshが作り出した仮想のディスプレイです。
                           例えば、altairをいう計算機でXを利用している場合、Xクライアントが
                           接続するXサーバはaltair:0で表されます。
                           altair:のあとの0がディスプレイ番号です。
                           sshを使ってXプロトコルを転送する場合、altair10というように、
                           異なるディスプレイ番号が割り付けられます。
                           ディスプレイ番号10はsshが作り出した仮想ディスプレイであり、
                           仮想ディスプレイへの接続は暗号化された通信路を通ります。
                           X11DisplayOffset命令では本当のディスプレイと
                           仮想ディスプレイの番号の差を指定できます。
                           デフォルトは10です。
  PrintMotd yes  ←  /etc/motdを表示するかどうかを指定します。
                     デフォルトはyesです。
  KeepAlive yes  ←  接続中の計算機の存在確認パケットを一定時間ごとに送信するかどうかを指定します。
                     デフォルトはyesです。
  # Logging
  SyslogFacility AUTH  ←  syslogのファシリティを指定します。
                           ファシリティを指定することで、ログ出力先を内容によって
                           振り分けることができます。
                           例えば、デーモン・プロセスはDAEMONファシリティを指定してログを出力します。
                           それぞれのファシリティに対応するログの出力先の振り分け規則は
                           /etc/syslog.confで設定します。
                           詳しくは、syslog及びsyslog.confのマニュアルを参照してください。
                           SyslogFacility命令では、DEAMON、USER、AUTH、
                           LOCAL0〜LOCAL7から選択できます。
                           デフォルトはAUTHです。
  LogLevel INFO  ←  sshdからのメッセージを記録する場合に使用されるレベルを与えます。
                     可能な値は次のとおりです:QUIET、FATAL、ERROR、INFO、VERBOSEおよびDEBUG。
                     デフォルトはINFOです。
  #obsoletes QuietMode and FascistLogging
  RhostsAuthentication no  ←  rhosts認証を使うかどうかを指定します。
                               rhosts認証は安全でないため、デフォルトはnoです。
  #
  # For this to work you will also need host keys in /etc/ssh_known_hosts
  RhostsRSAAuthentication no  ←  ホストRSA認証付きrhosts認証を使うかどうかを指定します。
                                  デフォルトはnoです。
  #
  RSAAuthentication yes  ←  RSA認証を使うかどうかを指定します。
                             デフォルトはyesです。
  # To disable tunneled clear text passwords, change to no here!
  PasswordAuthentication yes  ←  パスワード認証を使うかどうかを指定します。
                                  デフォルトはyesです。
  PermitEmptyPasswords no  ←  パスワードとして空文字列を認めるかどうかを指定します。
                               デフォルトはnoです。
  # Uncomment to disable s/key passwords
  #SkeyAuthentication no  ←  s/key認証を使うかどうか指定します。
  # To change Kerberos options
  #KerberosAuthentication no  ←  Kerberos認証を使うかどうか指定します。
  #KerberosOrLocalPasswd yes  ←  Kerberos認証によるパスワード認証が失敗した場合に、/etc/passwd
                                  あるいはSecurIDのような任意の付加的なローカルのメカニズムによる
                                  認証を有効にするかどうか指定します。
  #AFSTokenPassing no  ←  AFSトークンのサーバへの転送を許可するかどうかを指定します。
  #KerberosTicketCleanup no
          ↑  ログアウト時にユーザのチケットを自動的に破棄するかどうかを指定します。
  # Kerberos TGT Passing does only work with the AFS kaserver
  #KerberosTgtPassing yes  ←  Kerberos TGTのサーバへの転送を許可するかどうかを指定します。
  CheckMail no  ←  sshdが対話的ログイン時に新着メールのチェックをするかどうかを指定します。
                    デフォルトはnoです。
  UseLogin no  ←  loginを使用するかどうかを指定します。
                   デフォルトはnoです。
その他のオプション・スイッチはman sshdで参照してください。

最低限、許可するホストを追加しておかないといけません。以下はホスト192.168.0.2からのアクセスを許可するように設定を加えます。

AllowHosts 192.168.0.2

また、rootでのログインは外しておいた方がいいでしょう。

PermitRootLogin no

他の設定については、自分の環境に合わせて設定してください。

●sshdの起動

configファイルを設定後、linuxconf等を使用してsshdを(再)起動してください。また、リブート時にも自動起動するようにしておいてください。
  # ps -ef | grep sshd
と入力し、
  root       607     1  0    Aug07 ?        00:00:00 /usr/sbin/sshd
のように返ってくれば、動作しています。

●RSA認証キーの作成

sshdがインストールされている任意のLINUXマシンにsshでログインしたいアカウントでログインし、ssk-keygenコマンドを実行します。プロンプトに対して適切なパスフレーズを入力すると、~/.ssh/以下にidentity及びidentity.pubという2つのファイルが作成されます。
  $ ssh-keygen
  Generating RSA keys:  ..............................ooooooO...ooooooO
  Key generation complete.
  Enter file in which to save the key (/home/public/.ssh/identity):[Enter]
  Created directory '/home/public/.ssh'.
  Enter passphrase (empty for no passphrase):(パスフレーズ)
  Enter same passphrase again:(パスフレーズ)
  Your identification has been saved in /home/public/.ssh/identity.
  Your public key has been saved in /home/public/.ssh/identity.pub.
  The key fingerprint is:
  1024 68:d9:4d:20:de:7c:c3:6a:a4:e2:1b:48:7b:ad:55:d8 public@test.os.******.**.jp
identityとidentity.pubの2つのファイルが作成されているかどうかを確認します。
  $ ls -sl .ssh
  合計 8
     4 -rw-------    1 public    public         551 Aug 14 11:36 identity
     4 -rw-rw-r--    1 public    public         355 Aug 14 11:36 identity.pub
●公開鍵

identity.pubが公開鍵です。これを同じディレクトリにauthrized_keysという名前でコピーしておきます。もし、ログインしたいLinuxマシンにまだ自分のアカウントがない場合には、そのマシンのシステム管理者にお願いして自分のアカウントを作ってもらい、生成したidentity.pubauthrized_keysという名前で$HOME/.ssh/にコピーしてもらっておきます。

ここで、authorized_keysのモードを確認します。
  $ ls -asl
  合計 24
     4 -rw-rw-r--    1 public    public         355 Aug 20 09:42 authorized_keys
     4 -rw-------    1 public    public         551 Aug 20 09:41 identity
     4 -rw-rw-r--    1 public    public         355 Aug 20 09:41 identity.pub
authorized_keysのモードが -rw------- 以外であると、Linux同士で接続できても、TTSSHから上手く接続できませんので、以下のようにしてモード変更しておいてください。
  $ chmod 600 $HOME/.ssh/authorized_keys
確認して
  $ ls -asl
  合計 24
     4 -rw-------    1 public    public         355 Aug 20 09:42 authorized_keys
     4 -rw-------    1 public    public         551 Aug 20 09:41 identity
     4 -rw-rw-r--    1 public    public         355 Aug 20 09:41 identity.pub
と変更されていれば問題ありません。
 既にsshサーバが起動している場合、公開鍵を転送し、更にauthorized_keysに登録する必要があります。
 公開鍵を転送するには下記のようにします。
$ scp /home/[user名]/.ssh/id_rsa.pub [リモートユーザー]@[リモートサーバーのホスト名]:~/.ssh
 リモートで公開鍵を登録するには下記のようにします。
$ ssh-copy-id ~/.ssh/id_rsa.pub
 公開鍵がリモートの~/.ssh/authorized_keysに登録される。
 クライアントPCから公開鍵認証でリモートにSSH接続できることを確認します。
$ ssh -i id_rsa [リモートユーザー]@[リモートサーバーのホスト名]
 「-i」オプションは、id_rsaは秘密鍵が.sshに置いてあることが前提となっています。保管先が別ならパスで指定すること
 保管先が異なる場合、パスで指定する必要があります。
 公開鍵認証方式で接続できることが確認後、パスワード認証を無効にしてセキュリティーを高めます。
PasswordAuthentication no
 その後、sshを再起動すると反映されます。
# systemctl restart sshd


●秘密鍵

identityが公開鍵です。これはこのままのしておきます。これは文字通り秘密な鍵なので。ホームページやanonymouse ftpなどで公開しないでください。
また、identityのモードにも注意し、-rw-------になっていることを確認してください。このモードになっていないとLinux同士で接続したときに、以下のような警告が表示されます。
  $ slogin ***.***.***.***
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    Bad ownership or mode(0664) for '/home/public/.ssh/identity'.
    It is recommended that your private key files are NOT accessible by others.
    Enter passphrase for RSA key 'public@test.os.******.**.jp':
この警告が出力されている間は、たとえ正しいパスフレーズを入力しても拒否されます。

●Linux同士でログイン

ここまでくると、Linux同士でログインが可能になります。条件としては以下の通りです。
現在ログインしているマシン   $HOME/.ssh/identityがあること
リモートログインしたいマシン  $HOME/.ssh/authrized_keysがあること
  $ slogin test.os.******.**.jp
  The authenticity of host 'test.os.******.**.jp' can't be established.
  Key fingerprint is 1024 31:1a:46:c4:93:75:31:bb:d0:45:51:8e:93:a5:63:9f.
  Are you sure you want to continue connecting (yes/no)? yes
  Warning: Permanently added 'test.os.******.**.jp' to the list of known hosts.
  Enter passphrase for RSA key 'public@test.os.******.**.jp':(パスフレーズ)
  Last login: Wed Aug 22 15:35:15 2001 from test1.os.******.**.jp
  $
●Tera Term Pro(tterm23.zip)のインストール

Tera Term Proは、寺西高氏が作成したWindows上でもっとも定評のあるtelnetクライアントです。SSHはTera Term Proの拡張DLLとして実装されていますので、まずはTera Term Proをインストールします。

作者のホームページ(Tera Term Home Page )またはここからtterm23.zipをダウロードし、展開後、setup.exeを起動して、C:\Program Files\Ttermproにインストールします。

Tera Term Proを日本語化したければ、Tera Term Pro for Windows 95/98/Me/NT 4.0/2000 日本語版またはここからttrmp2315j.zipをダウロードします。展開後、Tera Term Pro をインストールしたディレクトリにコピーして上書きして下さい(元に戻せるよう,オリジナルは保存されることをお薦めします)。

●TTSSH(ttssh15411j-build136.zip)のインストール

TTSSHはWindows上で動作するTELNETクライアント/端末エミュレータTera Term Pro上でSSH1 (Secure SHell protocol version 1)を利用するためのエクステンションです。

TTSSH 日本語版またはここからTTSSH 1.5.4 日本語版 1.1 build 136(ttssh15411j-build136.zip)をダウロード、展開後、解凍したファイルをTera Term Proをインストールしたディレクトリの中にコピーして下さい。なお、Readme.txtはTera Term Proのフォルダ内にも同一のファイルが存在しますので、どちらかのファイル名を変更しておいた方がいいでしょう。

●TTSSHの設定

TTSSH.exeを起動すると、以下のようなウィンドウが現れます。



オリジナルのTeraTermのダイアログとは違い、`Service'に`SSH'が追加されています。早速試してみたい所ですが、いくつか設定を済ませておきましょう。このダイアログを`Cancel'で閉じた後、メニューバーから「Setup->SSH」(「設定(S)->SSH」)を選択します。すると以下のようなダイアログが出ます。



ここの一番上の`Compression level:'の設定によって、通信データをどの程度圧縮するかを選択する事ができますので、自分の環境に合わせて設定します(利用する回線が細く、マシンパワーがあるのなら高圧縮率にする等)。良く分からなければ、デフォルトのまま(無圧縮)でも構いません。
また、`SSH Known Hosts'の`Read/write file:' を指定します。マイドキュメントフォルダか、Tera Term Proをインストールしたフォルダの"ssh_known_hosts"というファイルを指定しておけば良いでしょう。このファイルを指定しておかないと、



のようなエラーが出ることがありますので、必ず指定するようにして下さい。
設定が終ったら「OK」を押し、Tera Term Proのメニューから、「Setup->Save setup...」(「設定(S)->設定の保存(S)...」) を選び、"teraterm.ini" に今の設定を保存しておきましょう。
それでは、接続を試してみましょう。 「File->New Connection...」(「ファイル(F)->新規接続(N)...」) を選び、`Host:'に接続先ホスト名を入力し、`Service'にSSHを選択して「OK」ボタンを押します。



そのホストに初めて接続する場合には、以下のようなダイアログがでますので、`Add this...' をチェックして`Continue'を選択します。



このとき、以下のようなダイアログが現れる場合がありますが、あまり気にせず「OK」を押して先に進みます。(SSH Known Hostsの設定で、Read-only files:を指定し、そのファイルを作成しておくと(空でも良い)、以下のエラーは出なくなります。)



すると、下の図のようなダイアログが現れますので、`Use name:'と`Passphrase:'に接続先ホストのログインネームとパスワードを入力します。また、下の3つの選択肢は、一番上の`Use plain password to log in'を選んで「OK」ボタンを押せば、ホストベース認証、`Use RSA key log in'「OK」ボタンを押せば、RSA認証となります。RSA認証を利用する場合は`Private key file:'をクリックして`identity(秘密鍵)'ファイルの場所を指定してください。くれぐれも秘密鍵は他人に使われないよう十分注意してください。



無事接続できれば、Tera Term Proのウィンドに接続先ホストのshellプロンプトが現れるでしょう。普通のtelnet接続と変わらないように思えますが、パスワード送信部分を含めてすでに暗号化が行われています。実際にSSHによる接続ができていればTera Term Proのタイトルバーのアイコンが鍵のマークに変わり、環境変数SSH_CLIENTやSSH_TTYが定義されますので、確認してみましょう。