2. OpenSSH を Client で利用する

2.1. 準備

クライアントで利用する場合は、以下のパッケージを使用します。

openssl

必須。暗号化、復号化、認証等を行うライブラリ類が含まれています。

openssh

必須。OpenSSH が使用するディレクトリ、ドキュメント、 および鍵を作成・参照するプログラムとそのマニュアルが含まれています。

openssh-clients

必須。rlogintelnet の代わりになる ssh、 rcp の代わりになる scp、 および ftp の代わりになる sftp と それらのマニュアルを含んでいます。

openssh-askpass

OpenSSH のパスフレーズを入力させるウィンドウを表示させるのに必要な プログラムと、それらのマニュアル、ドキュメントを含んでいます。 これは必須ではありません。

openssh-askpass-gnome

gtk+ で作られた openssh-askpass を使用するのに必要なプログラムと そのマニュアルが含まれています。これも必須ではありません。

2.2. パスワード認証でログインする

パスワード認証でのログインを許可している SSH サーバが稼働している マシンへのログインは、以下のようにしてできます。

% slogin 接続先ユーザ名@接続先マシン名

もしくは

% ssh -l 接続先ユーザ名 接続先マシン名

接続先ユーザ名 などは、各自の環境に合わせて読みかえて下さい。 接続先ユーザ名@ を省略すると、 接続元のマシンと同一のユーザ名でログインを試みます。

初めて SSH でログインする場合は、以下のようなメッセージが表示されます。

The authenticity of host '接続先マシン' can't be established.
RSA key fingerprint is 接続先マシン鍵指紋.
Are you sure you want to continue connecting (yes/no)? 

ここでは、yes を入力して下さい。 2 回目以降はこのメッセージは表示されません。

接続先ユーザ名@接続先マシン名's password:

このように表示されたら、パスワードを入力します。 認証に成功すれば、接続先のマシンのシェルプロンプトが表示されます。

Permission denied, please try again.

のように表示されたら、ユーザ名かパスワードが間違っているか、 もしくは SSH サーバがパスワード認証によるログインを許可しない設定に なっている可能性があります。

2.3. SSH プロトコル 1 対応の RSA 認証でログインする

OpenSSH は、 公開鍵と秘密鍵と言われる認証鍵のペアを用いた RSA 認証を使用できます。

OpenSSH は、SSH プロトコル 1 に対応した RSA 認証だけでなく、 SSH プロトコル 2 に対応した RSA 認証、DSA 認証も使用できますが、 これらの使用方法に大きな差はありませんので、 ここでは、SSH プロトコル 1 対応の RSA 認証の使用方法のみとし、 次章で他の認証の異なる点を説明します。

鍵ペアを用いた認証は、パスワードだけによる認証より安全なだけでなく、 後の章に記す通り、パスフレーズの入力を省略できるなどの利点があります。

2.3.1. 鍵ペアを作成する

まずは、接続元のユーザの鍵ペアを生成します。 以下の作業は、接続元のマシン、かつ接続元のユーザで行って下さい。 鍵ペアの生成をするには、以下のコマンドを入力します。

% ssh-keygen

以下のように表示されて、鍵を生成する場所を尋ねられます。 特に変更する必要がなければ、そのまま Enter を押下して下さい。

Generating public/private rsa1 key pair.
Enter file in which to save the key (/home/接続元ユーザ名/.ssh/identity):

続いて以下のように表示されて、パスフレーズを尋ねられます。 パスフレーズはユーザのパスワードと異なるものを推奨します。 なお、そのまま Enter を押下すると、パスフレーズは空になりますが、 これはあまり推奨できません。

Enter passphrase (empty for no passphrase):

パスフレーズを入力すると、パスフレーズの確認のために、 以下のように表示されてもう一度入力するよう要求されます。

Enter same passphrase again:

再びパスフレーズを入力すると、 秘密鍵と公開鍵が生成され、鍵指紋が表示されます。 生成されるファイルは以下の通りです。

秘密鍵: ~/.ssh/identity
公開鍵: ~/.ssh/identity.pub

これで鍵ペアの生成は終わりです。

2.3.2. 公開鍵を接続先マシンに登録する

鍵ペアによる認証をするには、公開鍵[1] を 接続先のマシンのログインするユーザのホームディレクトリ配下に登録する必要があります。

接続先のマシンが上記のパスワード認証を許可している場合は、 以下のようにすることで公開鍵を登録できます。

$ ssh-copy-id 接続先ユーザ名@接続先マシン名

以下のようにパスワードを尋ねられますので、パスワードを入力して下さい。

接続先ユーザ名@接続先マシン名's password:

接続先のマシンがパスワード認証を許可していない場合は、 接続先の管理者などに公開鍵を登録してもらう必要があります。 接続先の ~/identity.pub に公開鍵をコピーした場合は、 以下のようにすることで登録できます。

% mkdir ~/.ssh
% cat ~/identity.pub >> ~/.ssh/authorized_keys
% chmod 755 ~/.ssh
% chmod 644 ~/.ssh/authorized_keys
% rm ~/identity.pub

2.3.3. 公開鍵で接続先マシンにログインする

ログインの仕方は、パスワード認証と同じです。 RSA 鍵ペアが生成されていれば、自動的に RSA 認証によるログインを試みます。

パスワードの代わりに、以下のようにパスフレーズが尋ねられます。

Enter passphrase for RSA key '/home/接続先ユーザ名/.ssh/identity':

鍵ペアを生成した時に設定したパスフレーズを入力して下さい。 認証に成功すれば、接続先のマシンのシェルプロンプトが表示されます。

なお、RSA 鍵ペアの認証による失敗すると、 引き続いてパスワードによる認証を試みます。

2.4. SSH プロトコル 2 対応の認証でログインする

2.4.1. 鍵ペアを作成する

SSH プロトコル 2 に対応した RSA 鍵ペア、 もしくは DSA 鍵ペアを作成するには、以下のコマンドを入力します。

% ssh-keygen -t rsa
  
SSH プロトコル 2 対応 RSA 鍵ペアの場合

または、

% ssh-keygen -t dsa
DSA 鍵ペアの場合

生成される秘密鍵と公開鍵のファイル名は、以下の通りです。

SSH プロトコル 2 対応 RSA 鍵ペアの場合

  • 秘密鍵: ~/.ssh/id_rsa

  • 公開鍵: ~/.ssh/id_rsa.pub

DSA 鍵ペアの場合

  • 秘密鍵: ~/.ssh/id_dsa

  • 公開鍵: ~/.ssh/id_dsa.pub

2.4.2. 公開鍵を接続先マシンに登録する

% ssh-copy-id -l 公開鍵ファイル名 接続先ユーザ名@接続先マシン名

とすることで、SSH プロトコル 2 対応の公開鍵も登録できます。

接続先の管理者などに公開鍵を登録してもらう場合でも、 コピーする場所は、ログインする接続先のユーザのホームディレクトリの ~/.ssh/authorized_keys です。

2.4.3. 公開鍵で接続先マシンにログインする

SSH プロトコル 2 でもログインの仕方は変わりません。

SSH プロトコル 1、2 両方の鍵ペアを作成している場合、 デフォルトでは SSH プロトコル 2 を用いた認証を行ないます。 SSH プロトコル 1 をデフォルトとしたい場合は、 接続元に ~/.ssh/config というファイルを作成し、 以下のように記述して下さい。

Protocol 1,2

2.5. scp や sftp を利用する

リモートのマシンとの間でファイルのやり取りをするコマンドとして、 scp が用意されています。 scp は通信を暗号化していますが、 rcp と同じ操作で利用することができます。

また、ftp に対応するコマンドとして sftp も用意されています。 これらの詳細については、それぞれのマニュアルを参照して下さい。

2.6. パスフレーズの入力なしで認証できるようにする

ssh-agent を用いて鍵ペアのパスフレーズを保存することで、 認証の度にパスフレーズを入力する手間を省くことができます。

2.6.1. コンソールや端末エミュレータで ssh-agent を使用する

コンソールや、xtermrxvt などで ssh-agent を使用するには、 以下のようにコマンドを入力します。

% eval `ssh-agent`

引き続いて、以下のコマンドを入力します。 秘密鍵ファイル名を省略した場合は、 SSH プロトコル 1 の RSA 秘密鍵 ~/.ssh/identity を指定したことになります。

% ssh-add 秘密鍵ファイル名

ここでパスフレーズを入力すれば、パスフレーズが保存され、 パスフレーズの入力なしで鍵認証ができるようになります。 複数の鍵ペアがある場合は、上記コマンドをそれぞれ入力する必要があります。

保存されたパスフレーズは、ログアウトすると消去されるため、 端末エミュレータを開く度に上記二つのコマンドを入力する必要があります。

2.6.2. X で ssh-agent を使用する

X を利用している場合は、ssh-askpass を使用することで、 WindwManager にログインしてからログアウトするまでの間、 ずっとパスフレーズを保存しておくことができます。

ssh-askpass を利用する場合は、 ~/.xinit.d/hook というファイルを作成し、 以下のように記述して下さい。

ssh-add 秘密鍵ファイル名

複数の鍵ペアがある場合は、それらの秘密鍵ファイル名を全て記述します。

ssh-add 秘密鍵ファイル名1
ssh-add 秘密鍵ファイル名2
以下同様

既に WindowManger にログインしている場合は、 設定後にログインし直して下さい。 ログインした直後に、以下のような画面が表示されます。

ssh-askpass

図 1. ssh-askpass

ここで該当する秘密鍵のパスフレーズを入力するだけで、 パスフレーズを保存することができます。

ssh-askpass-gnome を利用する場合は、 環境変数 SSH_ASKPASS/usr/libexec/ssh/gnome-ssh-askpass を設定して下さい。



[1] identity.pub