SSH公開鍵認証手続き

(1)ssh公開鍵の手続きについて
 (1)−1 UNIX(Linux) 版
 (1)−2 Windows 版
(2)scp,sftpについて


2005.11.16 WinSCPでSCPプロトコルを選択した場合の注意事項追記
2005.8.9 WinSCPでRSA1鍵を使用する場合の注意事項追加
2005.8.9 サーバーのホームのモードが「755」以下である必要があることを追記


(1)ssh公開鍵の手続きについて

 公開鍵による認証手続きとは、ユーザー端末で、公開鍵と秘密鍵のペアを作成し、公開鍵をリモートホスト(サーバー側、ここではLHD数値解析システム)の所定の場所におきます。ログイン時にはこの公開鍵と秘密鍵とを使って認証します。付加的ですがログイン時のパスフレーズ入力もセキュリテイ強化に有効です。
 ここで紹介するsshのバージョンはバージョン1のRSA1と、バージョン2のRSAとDSAです。下の手順を参考にして、皆さんの環境に合わせて、適当なバージョンを選択してください。

(1)−1 UNIX(Linux) 版

■ssh公開鍵認証手順(Unixマシンから)

1. 鍵ペアの作成
 opensshがインストールされているLinux等で、ssh-keygenコマンドを使用して以下のいずれかの鍵ペアを作成します。

 ・RSA1鍵(ssh version1)

% ssh-keygen -t rsa1 -C "任意のコメント"
 作成される秘密鍵: ~/.ssh/identity
 作成される公開鍵: ~/.ssh/identity.pub

 ・RSA鍵(ssh version2)

% ssh-keygen -t rsa -C "任意のコメント"
 作成される秘密鍵: ~/.ssh/id_rsa
 作成される公開鍵: ~/.ssh/id_rsa.pub

 ・DSA鍵(ssh version2)

% ssh-keygen -t dsa -C "任意のコメント"
 作成される秘密鍵: ~/.ssh/id_dsa
 作成される公開鍵: ~/.ssh/id_dsa.pub

(注意)
 秘密鍵は、以下のようにファイルのモードが「600」(オーナのみ読み書き可能)、または「400」(オーナのみ読み取り可能)となっている必要があります。

% ls -l ~/.ssh/identity
-rw------- 1 test test 541 Jul 17 2005 identity

2. 公開鍵の設置
 作成したいずれかの公開鍵を、ログインしたいサーバの ホームディレクトリ配下.sshディレクトリのファイル名「authorized_keys」へ追加します。

remotehost> cd ~/.ssh
remotehost> cat identity.pub >> authorized_keys (RSA1鍵)
remotehost> cat id_rsa.pub >> authorized_keys (RSA鍵)
remotehost> cat id_dsa.pub >> authorized_keys (DSA鍵)

 ※公開鍵は一行のテキストなのでvi等での追加も可能
  公開鍵は複数登録可能

 ※利用者コードを初めて取得した方の公開鍵登録は、LHD数値解析システム作業班が行いますので、公開鍵を送付して下さい。それ以後の公開鍵追加は、ユーザ側でお願いします。

(注意)
 ホームのモードが「755」以下になっている必要があります。

(鍵作成実行例)
鍵ファイル名を指定した作成例

% ssh-keygen -t dsa -C "test@hoge.hoge"
Generating public/private dsa key pair.
Enter file in which to save the key (/home/test/.ssh/id_dsa): /home/test/.ssh/id_dsa_test
Enter passphrase (empty for no passphrase): (パスフレーズ入力)
Enter same passphrase again: (パスフレーズ入力)
Your identification has been saved in /home/test/.ssh/id_dsa_test.
Your public key has been saved in /home/test/.ssh/id_dsa_test.pub.
The key fingerprint is:
f3:40:3c:7f:4d:2f:f5:ce:7e:10:bf:8c:17:78:05:25 test@hoge.hoge

3. ログイン
 sshコマンドに鍵指定オプション「-i」を使用してログイン

(実行例)gatesxへRSA秘密鍵でログイン

% ssh -i ~/.ssh/id_rsa_j999 -l test gatesx.nifs.ac.jp
The authenticity of host 'gatesx.nifs.ac.jp (133.75.2.100)' can't be established.
RSA key fingerprint is dc:7c:3f:8b:fe:53:4c:d4:4e:78:3d:40:10:6e:e2:0e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'gate2.nifs.ac.jp,133.75.2.103' (RSA) to the list of known hosts.
Enter passphrase for key '/home/j999/.ssh/id_rsa_j999':
[j999@gate2 ~]$

(実行例) apsrv1へRSA1秘密鍵でログイン
 デフォルトでssh version2 が使用される場合、「-1」オプションでversion1にて実行

% ssh -1 -i ~/.ssh/identity apsrv1
WARNING: RSA key found for host apsrv
in /home/j999/.ssh/known_hosts:5
RSA key fingerprint 20:20:17:86:f9:32:2b:0f:ec:91:52:2e:75:09:11:d2.
The authenticity of host 'apsrv1 (133.75.2.111)' can't be established
but keys of different type are already known for this host.
RSA1 key fingerprint is 2e:23:02:6f:3a:24:26:9e:d6:c1:51:94:0b:60:54:7f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'apsrv,133.75.2.110' (RSA1) to the list of known hosts.
Enter passphrase for RSA key './identity':
[j999@apsrv1 ~]$

 ※初めてリモートホストへ接続するとそれぞれの鍵タイプにてホスト認証をします。
  「yes」と入力しリモートホスト情報をローカルホストに保存しログインします。
  その後はssh接続の際リモートホスト情報に変更がある場合エラーとなります。
  (セキュリティチェック)

●パスフレーズの変更
 パスフレーズを変更するには、ssh-keygenに-p オプションを指定して実行します。秘密鍵ファイルの問い合わせと古いパスフレーズの入力を求められ、その後、新しいパスフレーズを入力し、変更します。

% ssh-keygen -p

   パスフレーズを変更した後、「公開鍵」をリモートマシンに送り直す必要はありません。

 (実行例)

% ssh-keygen -p
Enter file in which the key is (/home/test/.ssh/id_rsa): /home/test/.ssh/id_rsa_test
Enter old passphrase:
Key has comment '/home/test/.ssh/id_rsa_test'
Enter new passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved with the new passphrase.

 戻る


(1)−2 Windows 版

■ssh公開鍵認証手順(Windowsマシンから)

●Windowsツール
 Windowsでssh公開鍵認証可能なツールはいくつかありますが、
 ・鍵作成ツール「puttygen」
 ・TeraTermの後継ツール「UTF-8 TeraTerm」
 ・ファイル転送ツール「WinSCP」
 についての簡単な手順を記します。

 ツールに共通する注意点は、以下です。
 ・LHD数値解析システムへSSHサービスに接続するポート番号は「22」であること
 ・RSA1鍵を使用する場合SSH1を使用する設定とすること
 ほとんどのツールはデフォルトポート「22」なので問題ないと考えられますが、SSHバージョン2に対応したツールはデフォルトSSHバージョン「2」が多いため注意が必要です。

 以下にTTSSHを使う場合と、UTF-8 TeraTerm Proを使う場合の注意点を記します。

【TTSSHを使う場合】
 TeraTerm Proのインストールはすでにされているとします。
 TeraTermのインストールディレクトリ(デフォルトは C:\Program Files\TTERMPRO)へ、TTSSH関連ファイル(TTSSH.EXEなど全てのファイル)を置きます。
 TTSSH.EXEを実行させれば、TTSSHが起動します。

【UTF-8 TeraTerm Proを使う場合】
 インストーラーの指示に従ってインストールします。
 UTF-8 TeraTermを起動して、ターミナル設定「Setup」-「Terminal」は、デフォルトでは「Kanji (receive)」「Kanji (transmit)」が UTF-8 になっているので「EUC」へ変更します。

1. 鍵ペア作成
 puttygen.exe で鍵ペアを作成します。TeraTermで利用する場合は秘密鍵は変換処理が必要です。
 ・puttygen.exeを起動
 ・下の「Parameters」で作成したい鍵の種類(SSH1 RSA・SSH2 RSA・SSH2 DSA)をチェック
 ・「Generate」ボタン押下。
 ・マウスを動かす(マウスポインタの位置が乱数の基数となるため)
 ・鍵作成が完了したらパスフレーズを入力
 ・「Save public key」,「Save private key」ボタンをそれぞれ押下し鍵ファイル名を指定して保存
  (公開鍵名は 〜.pub とすると分かりやすい。秘密鍵には自動的に 〜.ppk となる)
 ・「Public key for pasting into OpenSSH authorized_keys file」に表示されている公開鍵文字列(一行の文字列)をテキストファイルに保存(ファイル名public.txtとする)

 →SSH2 RSA, DSA鍵をTeraTermで使用するにはさらに作業を実施します。

2. 秘密鍵の変換 (SSH1 RSAでは必要ありません)
  ・puttygen.exe を起動
  ・「load」ボタン押下し変換したい秘密鍵を選択
  ・「Conversions」の「Export OpenSSH key」選択
  ・ファイル名を指定して秘密鍵を変換し保存

3. 公開鍵の設置
 public.txtに保存した公開鍵の内容をリモートホストの ~/.ssh/authorized_keys へ追加します。

※注意
 ホームのモードが「755」以下になっている必要があります。

※注意
・authorized_keysに登録する公開鍵は、鍵の種類によらず、一つにつき一行です。
 (一つの鍵文字列に改行を入れない)
・利用者コードを初めて取得した方の公開鍵登録は、LHD数値解析システム作業班が行いますので、公開鍵を送付して下さい。それ以後の公開鍵追加は、ユーザ側でお願いします。

4. ログイン
 UTF-8 TeraTerm Proおよび TTSSH は鍵認証に関してはほとんど同じ操作ですのでまとめて説明します。
 ・TeraTermを起動後リモートホストを指定し、「サービス(Service)」の「SSH」をチェックする
 ・UTF-8 TeraTermで、RSA1鍵を使用する場合は「SSH1」を選択する
 ・「OK」を押下する
 ・「ユーザ名(User)」ログインするアカウント名、「パスフレーズ(Passphrase)」鍵作成時の
  パスフレーズを入力する
 ・「RSA鍵を使用(Use RSA key to log in)」をチェックし「個人鍵(Private key file):」
  ボタンを押してパスフレーズに対応する秘密鍵ファイルを選択する
 ・「OK」を押下しリモートホストへログインする

●パスフレーズを変更する場合
 puttygen.exe を起動して指定した秘密鍵のパスフレーズを入力しなおし、保存します。公開鍵を作成し直す必要はありません。
 ・puttygen.exe を起動
 ・「load」ボタン押下しパスフレーズを変更したい秘密鍵ファイル選択
 ・「Key passphrase」および「Confirm passphrase」に新しいパスフレーズを入力
 ・「Save private key」ボタンを押下し秘密鍵を同名で保存(別名にしてもよい)
 ・作成した秘密鍵をTeraTermで使用できるようExportする

■ファイル転送(Windowsマシンから)

【WinSCP】
 WinSCP公式サイトから Multilanguage installation package(winscp374setupintl.exe)を取得します。インストーラを起動したら指示に従ってインストールします。

 ここでは、リモートホストの登録とログイン手順を説明します。言語を「Japanese」でインストールしリモートホストに公開鍵を登録済みと想定しています。

1. リモートホスト登録
 ・WinSCPを起動したら「新規」ボタンをクリック。
 ・「ホスト名」「ユーザ名」および「秘密鍵」(PuTTY用秘密鍵)を指定します。
 ・「ポート番号」は 22 です。
 ・「プロトコル」はSCP, SFTPどちらでも結構です。

 ※RSA1鍵を使用する場合には、以下3項目が必要です。
  ・左メニューのSSH をクリックし「プロトコルオプション」の
   「プロトコルの優先順位」にて「1」をチェックします。
  ・「セッション」にて「プロトコル」をSCP にします。
  ・「環境」-「SCP」にて上にある「シェル」設定で
   「入力」をチェックしてボックスに「/usr/bin/sh」と入力します。
   (RSA1鍵で接続する場合、WinSCPでサーバ側の既定のパス
    /usr/lib/sftp-server, /usr/local/lib/sftp-server等を探して起動する
    必要がありますが、gatesx, apsrv1,2では異なるパスのためです)

 ※プロトコルでSCPを選択した場合、鍵の種類によらず
   「環境」-「SCP」にて上にある「シェル」設定で
   「入力」をチェックしてボックスに「/usr/bin/sh」と入力して下さい。

 ・「保存」ボタンを押下しセッション名を指定して保存します。
 ・セッションの設定を変更する場合は「保存したセッション」メニューで「読込」ボタンを
   押下して保存したセッション情報を読み込み、各設定を変更し「保存」します。

2. ログイン手順
 ・左メニューの「保存したセッション」にて使用するセッション名をダブルクリックする
 ・パスフレーズを聞かれるので入力しログインします

【その他のツール】
 簡単ですがPuTTYについて紹介します。

 戻る


(2)scp,sftpについて

■sftp公開鍵認証手順(Unixマシンから)

公開鍵はログイン先リモートホストに登録済みと想定しています。

●sftpアクセス手順
 sftpでのアクセスは、必要な場合はリモートホストのアカウント指定・秘密鍵ファイルの指定を行います。また、さらに必要な場合はリモートホストのsftpサーバ指定を行います。
 以下の例は、リモートホストのログインアカウントは「test」です。

例1) RSA1鍵

% sftp -1 -s /usr/local/openssh/libexec/sftp-server -oIdentityFile=~/.ssh/identity_j999 j999@apsrv.nifs.ac.jp
Connecting to apsrv.nifs.ac.jp...
Enter passphrase for RSA key '/home/j999/.ssh/identity_j999':
sftp>

例2) DSA鍵

% sftp -s /usr/local/openssh/libexec/sftp-server -oIdentityFile=/home/j999/.ssh/id_dsa_j999 j999@apsrv.nifs.ac.jp
Connecting to apsrv.nifs.ac.jp...
Enter passphrase for key '/home/j999/.ssh/id_dsa_j999':
sftp>

・オプション説明
 -1 : RSA1鍵を使用する場合は指定。RSA鍵, DSA鍵では不要。
 -s sftp-server指定 : ログイン先(gatesx, apsrv)のsftpサーバ指定
 -oIdentityFile=秘密鍵ファイル : 鍵ファイル名がユーザ端末のssh既定ファイル名と異なる場合指定

 ※ -s /usr/local/openssh/libexec/sftp-server オプションは必須です。
  (ユーザ端末のssh設定にてsftpサーバが同じ場合は不要)

・既定の秘密鍵ファイル名
 鍵を作成すると、既定では「ホームディレクトリ/.ssh/鍵ファイル」に設置されます。

 RSA1鍵: ~/.ssh/identity
 RSA鍵 : ~/.ssh/id_rsa
 DSA鍵 : ~/.ssh/id_dsa

●sftpの使用
・ワイルドカード指定
 sftpは ftpとほぼ同じコマンドが使用可能ですが、複数ファイル転送の「mput」「mget」はありません。その代わり、ワイルドカード指定が可能です。

sftp> get file*
Fetching /home/j999/file1 to file1
Fetching /home/j999/file2 to file2
Fetching /home/j999/file3 to file3
Fetching /home/j999/file40 to file40

sftp> get file?
Fetching /home/j999/file1 to file1
Fetching /home/j999/file2 to file2
Fetching /home/j999/file3 to file3

・終了
 exit で終了します。

 また、sftpはftpと似ていますが、アスキーモード、バイナリモードといった転送モードの区別はありません。

■scp公開鍵認証実行例(UNIXマシンから)

 公開鍵はログイン先リモートホストに登録済みと想定します。
 sftpと同じように、RSA1鍵とRSA鍵・DSA鍵の違いでSSHバージョンを指定します。
 パスフレーズを入力し認証に成功するとファイルを転送します。
 scpでは転送率が表示されます。
 以下の例は、リモートホストのログインアカウントは「test」です。

例1) RSA1鍵認証で「FILE」をリモートホストのホームディレクトリへコピー

% scp -oProtocol=1 -i ~/.ssh/identity_j999 FILE j999@apsrv.nifs.ac.jp:~
Enter passphrase for RSA key '/local/eincen/.ssh/identity_j999':
FILE   100% 297KB 297.5KB/s  00:00

例2) DSA鍵認証で「FILE」を「FILE2」としてリモートホストのホームディレクトリへコピー

% scp -i ~/.ssh/id_dsa_j999 FILE j999@apsrv.nifs.ac.jp:~/FILE2
Enter passphrase for key '/local/j999/.ssh/id_dsa_j999':
FILE   100% 297KB 297.5KB/s  00:00

・オプション説明
 -oProtocol=1 : RSA1鍵を使用する場合指定。RSA鍵, DSA鍵では不要。
 -i 秘密鍵ファイル : 鍵ファイル名がユーザ端末のssh既定ファイル名と異なる場合指定

 戻る



研究部トップ > LHD数値解析システム > 資料 > ssh公開鍵認証手続き