このページの対象Linuxディストリビューションは次のものです。

サイト内リンク


2011/02/16 作成
2012/04/13 更新

sshクライアントの使い方と設定


目標

暗号鍵による認証でログインできるところまで設定する。

方針

クライアント側で暗号鍵のペアの生成を行う。

作業

インストール

多くの環境では最初から入っている。
その場合はインストールする必要はない。
もし入っていない場合はインストールする。

debian、ubuntuの場合

$ sudo apt-get install openssh-client

CentOS、fedoraの場合

$ sudo yum install openssh-clients

動作確認

PWログインで接続してみる。
コマンドの使用方法はIPv4の場合

ssh ユーザー@アドレス

となる。
アドレスは名前解決が出来るならホスト名でもよい。
ユーザーがdummyuser、サーバのホスト名がsampleの場合は以下になる。

$ ssh dummyuser@sample

初めて接続するサーバの場合、まだ認証していない事と、サーバのfingerprint(指紋)を表示する。
そしてこのまま接続を続けるかを聞いてくる。

The authenticity of host 'sample (192.168.0.16)' can't be established.
RSA key fingerprint is d0:a7:69:d7:11:9e:3a:d5:bc:18:7e:f5:9b:03:86:4f.
Are you sure you want to continue connecting (yes/no)?

yesと答えると以下の表示を行いPWを聞いてくる。

dummyuser@sample's password:

次のログインからはPWだけを聞いてくる。

IPv6の場合

ssh ユーザー@アドレス#インターフェース

となる。
インターフェースはeth0とかeth1を指定する。
注意すべきなのはサーバ側のインターフェースではなくクライアント側のインターフェースだということ。
クライアントのインタフェースがeth0、サーバのアドレスがfe80::20c:29ff:fe01:44a0の場合以下になる。

$ ssh dummyuser@fe80::20c:29ff:fe01:44a0%eth0

IPv4、IPv6ともにユーザー@を省略するとクライアント側のユーザーと同じユーザーとしてログインすることになる。

ログインできない場合はサーバ側がPWログインを禁止している可能性がある。
またファイヤーウオールの設定でログインできない可能性もある。
アドレスを間違えていたり、アカウントが存在しなければもちろんログインできない。

暗号鍵ペア(OpenSSH形式)を生成する

CentOS 6.2の場合、CentOSインストール直後はssh-keygenを使用するとファイルアクセスでPermission deniedになり失敗する。
sudo yum updateでシステムをアップデートすることで改善する。

$ ssh-keygen

暗号鍵のファイル名(と生成場所)、パスフレーズが聞かれる。
ファイル名はデフォルトで良いのでEnter。
パスフレーズはパスワードとは別のものを入力するのがセオリーだと思う。
入力せずにEnterを押せばパスフレーズなしの秘密鍵を生成する。
出力画面は以下の内容になる。このほかに鍵のfingerprintが表示される。

Generating public/private rsa key pair.
Enter file in which to save the key (/home/dummyuser/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/dummyuser/.ssh/id_rsa.
Your public key has been saved in /home/dummyuser/.ssh/id_rsa.pub.

生成された公開鍵をサーバ側にSCPで送る。
SCPを行うにはサーバ側にもクライアント側のパッケージがインストールされている必要がある。

$ scp ~/.ssh/id_rsa.pub dummyuser@sample:

パスワードが聞かれるから答える。
これでsampleホストのdummyuserのホームにコピーした。
ユーザー@の部分を省略するとクライアント側のユーザと同じユーザのホームにコピーする。

scpでIPv6のアドレスを使用する場合はアドレスを'['と']'で囲む。
以下のように指定する。

$ scp ~/.ssh/id_rsa.pub dummyuser@[fe80::20c:29ff:fe01:44a0%eth0]:

サーバ側の設定は「sshサーバを設定する ユーザー側作業」 「sshサーバを設定する(fedora 14 x86_64)ユーザー側作業」に記述してある。

サーバ側の設定が済んだら接続してみる。
今度はパスワードではなくパスフレーズが聞かれる。

Enter passphrase for key '/home/dummyuser/.ssh/id_rsa':

パスフレーズを入力すると接続できる。


2011/02/22 作成
2012/04/13 変更

ssh-agentの使用


ssh-agentは認証エージェントだ。
秘密鍵を保持しサーバとの認証を代わりに行ってくれる。
パスフレーズの入力は認証エージェントに秘密鍵を登録するための1回でよくなる。
ssh-agentはシェルに表示を行う。
この表示された内容を実行すると環境変数が設定される。
環境変数を利用しsshやssh-addはssh-agentを見つける。
ssh-agentプロセスはPPIDが1で実行される。
ssh-agentプロセスは意図的にkillするかOSが終了しない限り終了することはない。
つまりログアウトしても終了しない。

目標

認証エージェントを使用しログインする。

方針

ssh-agentが起動していなければ.bashrcの中で起動する。
ssh-agentが出力する内容は.ssh/envとして記録する。
.bashrcでこのファイルを実行する。
秘密鍵の登録は自動で行わない。

作業

.bashrcを編集する。

$ nano ~/.bashrc

下記のスクリプトを最後に追加する。

if [ -z "`ps -u $USER | grep ssh-agent`" ]; then
    ssh-agent > ~/.ssh/env
fi

if [ -f ~/.ssh/env ]; then
    source ~/.ssh/env > /dev/null
fi

/dev/nullに出力をリダイレクトないとログインする毎にAgent pid ~を表示する。
これを表示しているとscpがエラーになってしまう。
scp実行時に問題が発生しないために出力を/dev/nullにリダイレクトする。

適用する。

$ source ~/.bashrc

秘密鍵を登録する。

$ ssh-add

これで認証は認証エージェントが行う。

このスクリプトはssh-agentプロセスのPIDと環境変数で設定するPIDが一致するか確認していない。
矛盾が生じた場合は動かない。
その場合ssh-addを実行すると以下のエラーとなる。
Could not open a connection to your authentication agent.
しかし意図的にそのような状況を作り出さない限り矛盾が生じる可能性は低い。


リンク

関連

参考


[Top][Page Top]


サイト全体のアクセスカウンタ


はてなブックマークに追加 Tweet