研究室に配属されてから卒業する迄に身に付けて欲しいスキル で書いた話に関連した話ですが、SSH が良く分からん人向けの記事を書く事にしました。

なので、学生がメインになるかと思います。

SSH について

SSH がなんぞやって話をしだすと長くなるので、下記のリンクを読んで勉強して下さい。

鍵の作成と設定

SSH は公開鍵と秘密鍵の二つを使用してセキュアな遠隔ログインを可能にする仕組みだと言う事は分かったという前提で話を展開します。良く分かっていない人は、もう一度前述しているリンク先の記事を読み直してから戻って来て下さい。

先ず、鍵の生成方法ですが、ssh-keygen を使用します。Terminal を開いて下記コマンドを入力します。

この時、鍵を作成する端末はリモートでログインしたい端末の上で作成しましょう。ログイン先の端末で作成をすると、秘密鍵を移動させる必要が出てきてセキュアではありません。
移動を行なっても良い鍵は公開鍵です。覚えて下さいテストに出ます。

$ ssh-keygen

僕は Mac で実行しているので表示が異なる場合はありますが、
実行すると、下記の様なメッセージが出ます。

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/biwakonbu/.ssh/id_rsa): /Users/biwakonbu/.ssh/sample_rsa

RSA の鍵のペアを作るんだけど、(…) の中に書いてる通りの場所に、名前を付けて保存しても良い?
という感じの質問をされます。もしこのまま Enter を押すとデフォルトの設定で鍵のペアが作成されます。
デフォルトの場合は id_rsa と id_rsa.pub という鍵が ~/.ssh/ に作成されます。
また、デフォルトで作成される鍵のペアは SSH 使用時にデフォルトで使用されます。
config を設定している場合や、明示的に使用する鍵を指定した場合は指定されたものを使用できます。

この辺を曖昧にしていると後々躓く原因になるので、良く分かっていない場合は鍵の名前を別にしておくのが懸命です。config については後述します。
ここでは sample_rsa という名前で、鍵の場所は絶対 PATH で /Users/biwakonbu/.ssh/ を指定しています。
Linux の場合は大体 /home/biwakonbu/.ssh/ の様な PATH になると思います。
ちなみに、.ssh/ ディレクトリがホームディレクトリ内に存在しない場合はエラーが出ますので気を付けて下さい。

名前を設定した後は、鍵の PASSPHRASE を聞かれます。
これは所謂パスワードです。但し、鍵を使用する際に尋ねられるものです。

設定する時に、なにも文字が画面に表示されませんが、気にせず入力して下さい。
後ろから見られる事の対策です。黒点とかでも文字数が分かってしまいますからね。

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

また、PASSPHRASE は設定しないと鍵の暗号強度が下がる訳では無いですが、
鍵を他者に盗られた際、他人に使用されないようにする為 (絶対安全という訳では無いですが) 設定しましょう。

フレーズを設定すると下記の様なメッセージが出ます。

Your identification has been saved in sample_rsa.
Your public key has been saved in sample_rsa.pub.
The key fingerprint is:
86:00:57:d7:54:9f:86:67:2c:39:88:90:49:f2:c1:3f biwakonbu@RMBP.local
The key's randomart image is:
+--[ RSA 2048]----+
.
.
略
.
.
+-----------------+

~/.ssh/ の中に自分が作成した名前の鍵がある事を確認しましょう。
出来ていれば鍵の作成は完了です。

SSH の鍵を使用したので、後はログインを行なうだけと思いきや、公開鍵の設定が残っています。先程作成した sample_rsa.pub をログイン先のサーバに移動します。USB メモリで移動出来るのならそれでも良いです。リモートのみの場合 (SSH はパスワード認証も許可出来る) は FTP 等を使用してファイルを目的の端末の ~/.ssh/ に設置します。

SSH はサーバ側で設定されている各ユーザの公開鍵ファイルを読む様に設定されています。
その際のファイルは標準では ~/.ssh/authorized_keys を指定しています。

公開鍵を設定する場合、.pub の付いたファイルを authorized_keys に名称変更すれば使用出来る様になります。ただし、この方法では複数の鍵を設定する事は出来ません。
authorized_keys という名前から、ファイル名が複数形になっている事が分かりますが、これは複数の端末から同一のアカウントに対してログインを行なう事を想定した名前となっています。
その為、複数端末でのログインを可能にする為には複数の鍵を設定する必要がある訳です。
公開鍵の中身が authorized_keys の中にあれば参照する事が出来る様になるので、複数個の鍵を設定したい場合は追記を使います。

下記コマンドで .ssh/ に移動してから追記する事が出来ます。

$ cd ~/.ssh/
$ cat sample_rsa.pub >> authorized_keys

これでようやく SSH を使用してリモートログインを行なう事が出来る様になりました。

SSH でリモートログインを行なう

SSH コマンドを使用する際には気を付けるべき事があります。
それは、ログイン時のユーザ名とログイン先 (ホスト) の指定です。

SSH の基本形は下記の様になります。

$ ssh 192.168.1.1

IP アドレスはホストの指定に使用します。
つまり、この状態の指定はパスワード認証を許可している環境か、
id_rsa の名前で鍵を作成しており、ログイン先のホストにそのペアとなる公開鍵を設定している場合に PASSPHRASE を使用してログインする事が出来ます。

鍵の名前を変更している場合は、下記の様になります。

$ ssh -i ~/.ssh/sample_rsa 192.168.1.1

今度の命令には -i ~/.ssh/sample_rsa が追加されました。
-i オプションは鍵の指定の意味があり、鍵の在処を指定する事で使用する鍵を選ぶ事が出来ます。これで、192.168.1.1 のホストに対して SSH を利用してリモートログインを行なう事が出来ます。

但し、未だ問題があります。
それは、SSH を使用するユーザ名が異なる場合です。
例えば、ログイン先のユーザ名が konbu だった場合で、現在ログインしている端末でのユーザ名が biwakonbu だった場合では下記の様にログインユーザを指定する必要があります。

$ ssh -i ~/.ssh/sample_rsa konbu@192.168.1.1

ログイン先のホスト名の前に USER名@ を付ける事で、
どのユーザで対象のホストへログインを行なうのかを指定出来ます。

CUI でログインを行なうだけであれば、とりあえずここ迄の機能で問題は無いと思います。

config を書く

ここまで説明した内容で最低限 SSH を使用する事は出来るのですが、
繰り返し SSH を使用している内に (もしくは最初から)、
鍵とユーザとホストの指定を毎回行なう事が非常に煩わしく感じる様になります。
SSH にはこの煩わしさを回避する為の機能が存在します。
それが config ファイルです。

~/.ssh/config に必要な情報を記述する事で代替の名称でアクセス出来る様になります。

~/.ssh/config

Host SampleHost
        HostName 192.168.1.1
        User           konbu
        IdentityFile  ~/.ssh/sample_rsa

上記の様に HostName に ホスト名、User にユーザ名、IdentityFile に使用する鍵を指定します。Host には自分が接続する際に使用したい名前を記述して下さい。

上記の様な設定を行なうと、下記の様な記述でログイン出来る様になります。

$ ssh SampleHost

config ファイルには複数のサーバへの接続方法を記述し、運用する事が出来ますので有効活用して脳味噌の省力化に貢献しましょう。

まとめ

最後に、今回の話では、192.168.1.1 というローカル IP を使用していますが、この部分は適宜 SSH が利用出来るサーバのグローバル IP やドメイン名に変更して利用して下さい。
勿論、LAN 環境においてはこの限りではありません。

それでは良い SSH ライフをお楽しみ下さい。