目標
$ ssh <HostName>
だけでSSH接続がしたい! という記事だよ。
この記事の対象者(自己紹介)
- Linuxコマンドはある程度わかる。
- SSHって、あの、あれでしょ? なんか別マシンにログインするtelnetの安全なヤツ的な...
- 突然SSHでログインしろって言われました。しかもユーザ名とかパスワードとか入力せずに、ホスト名指定だけでログインできるようにしろって...
- ググったけど、接続元と接続先ってどっちがどっちだかわからなくなってきた...このコマンドどっちのマシンで打てばいいんだかもわからない...
- 秘密鍵と公開鍵って、どっちのマシンにどっちを置けばいいんだこれ...
登場人物
- AlphaServer
- 接続元(クライアント)のマシン。
初めにログインしている方。
SSHコマンドを打つ方。 - Alice
- Alphaのユーザ。
初めにこのユーザにログインしてる。 - BravoServer
- 接続先(ホスト)のマシン。
SSHでログインされる方。 - Bob
- Bravoのユーザ。
SSHでこのユーザにログインする。
結論
- 鍵ペアファイルを作成する
- 秘密鍵ファイルをAliceのホームディレクトリに設定する
- Bobのホームディレクトリに公開鍵ファイルを配置する
- BobがAliceによるSSHログインを受け入れるよう設定する
- AliceのホームディレクトリにSSHログイン簡略化のためconfigファイルを配置する
以上だ!
これでAliceが
$ ssh BravoServer
と打つだけで、Bob@BravoServerにログインできるぞ!
各工程の詳解
鍵ペアファイルを作成する
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (~/.ssh/id_rsa): #鍵ファイル保存場所。そのままEnter
Created directory '~/.ssh'.
Enter passphrase (empty for no passphrase): #パスフレーズ。面倒なのでそのままEnter
Enter same passphrase agein: #パスフレーズ。面倒なのでそのままEnter
... #なんかわちゃーっと出てくるけど気にしない
これで、以下の鍵ペアファイルが生成されるぞ!
ちなみに、ファイルパスの"~"は「ログインユーザのホームディレクトリ」を表しているぞ!
- [Alice@AlphaServer] ~/.ssh/id_rsa
- 秘密鍵ファイル。 →秘密鍵の解説
- [Alice@AlphaServer] ~/.ssh/id_rsa.pub
- 公開鍵ファイル。 →公開鍵の解説
鍵ペアファイルについては、運用上以下のことを意識するんだ!
- 鍵ペアは必ず対で使う。ほかの鍵ペアとはほぼ100%マッチしないぞ!
- 鍵ペアは内容はさておき、ファイルとしてはただのテキストファイルだ!
- 鍵ペアは生成ユーザやマシン、ファイル名なんかは気にする必要がないぞ!
Carol@CharlieServerが生成したtemp_keyとtemp_key.pubを_private.key_と_public.key_にリネームして、AliceがSSHでBobにログインする際に使用する、ということも問題なくできるぞ! - 秘密鍵は門外不出だぞ! 生成するだけして、以降決して手を触れるんじゃない!
移動したりコピーしたりし始めたら、なんか間違ってると思って立ち止まってくれ!
Alice@AlphaServerで鍵ペアの生成を行ったのはこのためだ! - 公開鍵は別に秘密でも何でもないぞ! 外部に漏れたって平気だ! というかそのためのものだ!
- 公開鍵はBob@BravoServerには必要だが、Alice@AlphaServerにとってはもはや不要だ! どこかにバックアップしておけば削除しても構わん!
秘密鍵ファイルをAliceのホームディレクトリに設定する
生成した秘密鍵を、Aliceの ~/.ssh/id_rsa
に配置するんだ!
基本的には、鍵ペアを生成した時点でこの工程は完了しているな!
本当はAliceが参照できる場所ならどこでもいいんだが、説明がややこしくなるからおとなしくホームディレクトリに配置しよう。
Bobのホームディレクトリに公開鍵ファイルを配置する
$ ssh-copy-id -i ~/.ssh/id_rsa.pub Bob@BravoServer
これでBob@BravoServerの ~/.ssh/id_rsa.pub
にAlice@AlphaServerの ~/.ssh/id_rsa.pub
がコピーされるぞ!
ついでに後の工程である「BobがAliceによるSSHログインを受け入れるよう設定する」も一緒に実施されるぞ!
要するに、Bob@BravoServerに一度もログインすることなく全工程が完了してしまうのだ! らくちん!
ssh-copy-idコマンドがインストールされていない場合
困ったな!
stfpコマンドを使うなり、scpコマンドを使うなり、フリーソフトのFFFTPを使うなり、何でもいいからAlice@AlphaServerの ~/.ssh/id_rsa.pub
をBob@BravoServerの ~/.ssh/id_rsa.pub
にコピーするんだ!
BobがAliceによるSSHログインを受け入れるよう設定する
前工程「Bobのホームディレクトリに公開鍵ファイルを配置する」でssh-copy-idコマンドを使ったならこの工程は不要だ! よかったな!
ssh-copy-idコマンドがインストールされていない場合
$ echo ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
$ rm ~/.ssh/id_rsa.pub #やってもやらなくてもいい
を実行するんだ!
ここまでの工程を完了した段階で、AliceからBobにSSHログインすることはできるようになったぞ!
ただし、
$ ssh Bob@BravoServer -i ~/.ssh/id_rsa -p 22
といろいろ指定する必要があってちょっとめんどくさいぞ!(本当はこの例では、一般的なファイル名およびポート番号であるため、オプションは省略しても勝手に補完してくれる)
AliceのホームディレクトリにSSHログイン簡略化のためconfigファイルを配置する
最後の正念場だ!
以下のファイルをAlice@AlphaServerの ~/.ssh/config
に配置するんだ。
Host BravoServer
HostName BravoServer
User Bob
Port 22
IdentityFile ~/.ssh/id_rsa
これで設定完了だ!
$ ssh BravoServer
でログインできるぞ!
以上!