sshの使い方

今回はsshの簡単な仕組みや使い方について学んだことを簡単に記そうと思います。
自分のパソコン(Mac)でやったことの紹介が中心になるのであんまり一般性はないかもしれません。
間違ってることがあったらコメントしていただけると助かります。

sshとは

まず、sshとはSecure SHellの略です。
遠くにあるコンピュータにログインしていろいろできる仕組みです。
暗号化した情報だけがネットワーク上を流れるのでかなり安全です。

使い方

とりあえずsshはインストールされているものとします。
ホームディレクトリの直下に.sshというディレクトリがあると思うのでそこに移動すると、
ssh-keygen
というコマンドが使え、公開鍵と秘密鍵、その他を自動で生成してくれます。
このとき
ssh-keygen -t dsa
というコマンドを使うと、生成される鍵の暗号方式がRSAではなくDSAになります。
RSAよりもDSAの方が強力な暗号です。DSAでやっとけばいいと思います。
生成するキーの名前をどうするか最初に聞かれますが、何も入力せずにreturnを押すと、
id_dsaとid_dsa.pub
が生成されます。名前をつけた場合はconfigファイルを作って接続に利用するキーの名前を設定するか、接続するときに指定しければならないので、そのままにしといた方が楽だと思います。
ここまでで鍵の生成が終了で、この作業は実際どこでやってもかまいません。
ですが、生成された鍵の最後に作った場所が書かれるので、クライアント側で作った方がいいでしょう。それに名前の通り秘密鍵は他人にばれたら行けませんから移動するべきじゃありません。

鍵が準備できたら公開鍵を接続先(リモートホスト)のホームディレクトリの直下の.sshにauthorized_keysという名前でコピーしましょう。なぜkeysなのかは次章でわかります。
公開鍵をこっち(クライアント側)に残していても意味はないですが残しておきましょう。また他のパソコンに接続したいときに使えるからです。

これで準備は完了です。 ssh "リモートホスト名" で最初は何か聞かれるかもしれないですがyesにしておいて、パスフレーズを入力すれば接続できるでしょう。

正しくauthorized_keysが設定されているかのチェック方法として、ローカルホストからローカルホストにログインしてみるという方法をお薦めします。ローカルホストの公開鍵をそれ自身のauthorized_keysに書き込んでから自分自身にログインしてみて下さい。

複数のホストを使うとき

ここでは複数のパソコンからどこにでもログインできるようにしたいときの方法を記します。

たとえばA、B、Cのホストがあった場合にA→Bも、A→Bも、B→Cも、C→Bも、C→Aも、A→Cも、自由にログインできた方が便利ですよね。
ログインに必要なのは秘密鍵と公開鍵のペアだけです。
やるべきことはクライアントの秘密鍵に対応した公開鍵をすべてのリモートホストに置くことです。この作業をすべてのクライアントで行えばいいだけです。
リモートホストの公開鍵に対応した秘密鍵をすべてのクライアントにコピーする方法も考えられますが、秘密鍵をコピーするのは危険なのでだめですね。
複数の端末から接続される場合でも.sshにはauthorized_keysにまとめて公開鍵を保存しておくことができます。複数の公開鍵を保存するからkeysなんですね。
authorized_keysに新しい公開鍵を書き込むときは後ろに付け足せばいいだけです。catなんかを使って連結すればいいと思います。

新しいホストをそのログインしあえるグループに追加したいとき、またすべてのホストのauthorized_keysをこつこつ書き換えるのは2つや3つならまだしも、それ以上になると面倒ですよね。
そこでおすすめな方法があります。
まず代表のホストを決めて、そこにkeysというファイルを用意して、新しいホストはまずそこに公開鍵の入ったファイルを置きます。
その代表のホストで公開鍵をauthorized_keysに書き加えた後に、グループのホストすべてにコピーするわけですが、それを勝手にやってくれるプログラムを書いておけば、かなり楽になります。
ソースコードはこんな感じです。

#!/bin/sh

cd $HOME/.ssh
cat keys/* > authorized_keys

for host in www dhcp-62-16
do
scp $HOME/.ssh/authorized_keys $host:.ssh
done

先に代表のホストから新しいホストにsshで接続できるようにしてから、実行する前にホスト"for host in ~"のところに新しく加わるホストを書き足しておくとより楽かもしれません。

便利な使い方

sshリモートホストIPアドレスやログイン名なんかを毎回入力するのは面倒です。
そんなことをしなくてすむようにしたり、使う鍵を指定したりすることができるのがconfigファイルです。
詳しい使い方はここを見るとわかりやすいです。
例えば
Host lab
HostName 192.168.11.4
User imura
と書いておくと
ssh lab と書けば ssh imura@192.168.11.4 と書いたのと同じことになります。

sshでログインするときやscpをfor分で回すときなんかにいちいちパスフレーズを入力するのは耐えられませんよね。
そういうときはssh-agentを使います。これもここに比較的詳しく書いてあります。

またssh-agentをコントロールしてくれる?ようなアプリケーションがあります。
SSH Agent」です。
ここからダウンロード。フリーソフトです。
使い方はよくわかりませんが、楽です。