ホスト名指定するだけでSSH接続がしたい!


目標

$ ssh <HostName>

だけでSSH接続がしたい! という記事だよ。

この記事の対象者(自己紹介)

  • Linuxコマンドはある程度わかる。
  • SSHって、あの、あれでしょ? なんか別マシンにログインするtelnetの安全なヤツ的な...
  • 突然SSHでログインしろって言われました。しかもユーザ名とかパスワードとか入力せずに、ホスト名指定だけでログインできるようにしろって...
  • ググったけど、接続元と接続先ってどっちがどっちだかわからなくなってきた...このコマンドどっちのマシンで打てばいいんだかもわからない...
  • 秘密鍵と公開鍵って、どっちのマシンにどっちを置けばいいんだこれ...

登場人物

AlphaServer
接続元(クライアント)のマシン。
初めにログインしている方。
SSHコマンドを打つ方。
Alice
Alphaのユーザ。
初めにこのユーザにログインしてる。
BravoServer
接続先(ホスト)のマシン。
SSHでログインされる方。
Bob
Bravoのユーザ。
SSHでこのユーザにログインする。
  • AlphaServer/ BravoServerはいずれもLinux。SSHはインストール済み。

結論

  1. 鍵ペアファイルを作成する
  2. 秘密鍵ファイルをAliceのホームディレクトリに設定する
  3. Bobのホームディレクトリに公開鍵ファイルを配置する
  4. BobAliceによるSSHログインを受け入れるよう設定する
  5. AliceのホームディレクトリにSSHログイン簡略化のためconfigファイルを配置する

以上だ!
これでAlice

[Alice@AlphaServer]
$ ssh BravoServer

と打つだけで、Bob@BravoServerにログインできるぞ!

各工程の詳解

鍵ペアファイルを作成する

[Alice@AlphaServer]
$ 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.keypublic.keyにリネームして、AliceがSSHでBobにログインする際に使用する、ということも問題なくできるぞ!
  • 秘密鍵は門外不出だぞ! 生成するだけして、以降決して手を触れるんじゃない!
    移動したりコピーしたりし始めたら、なんか間違ってると思って立ち止まってくれ!
    Alice@AlphaServerで鍵ペアの生成を行ったのはこのためだ!
  • 公開鍵は別に秘密でも何でもないぞ! 外部に漏れたって平気だ! というかそのためのものだ!
  • 公開鍵はBob@BravoServerには必要だが、Alice@AlphaServerにとってはもはや不要だ! どこかにバックアップしておけば削除しても構わん!

秘密鍵ファイルをAliceのホームディレクトリに設定する

生成した秘密鍵を、Alice~/.ssh/id_rsa に配置するんだ!
基本的には、鍵ペアを生成した時点でこの工程は完了しているな!

本当はAliceが参照できる場所ならどこでもいいんだが、説明がややこしくなるからおとなしくホームディレクトリに配置しよう。

Bobのホームディレクトリに公開鍵ファイルを配置する

[Alice@AlphaServer]
$ ssh-copy-id -i ~/.ssh/id_rsa.pub Bob@BravoServer

これでBob@BravoServer~/.ssh/id_rsa.pubAlice@AlphaServer~/.ssh/id_rsa.pub がコピーされるぞ!
ついでに後の工程である「BobAliceによるSSHログインを受け入れるよう設定する」も一緒に実施されるぞ!
要するに、Bob@BravoServerに一度もログインすることなく全工程が完了してしまうのだ! らくちん!

ssh-copy-idコマンドがインストールされていない場合

困ったな!
stfpコマンドを使うなり、scpコマンドを使うなり、フリーソフトのFFFTPを使うなり、何でもいいからAlice@AlphaServer~/.ssh/id_rsa.pubBob@BravoServer~/.ssh/id_rsa.pub にコピーするんだ!

BobAliceによるSSHログインを受け入れるよう設定する

前工程「Bobのホームディレクトリに公開鍵ファイルを配置する」でssh-copy-idコマンドを使ったならこの工程は不要だ! よかったな!

ssh-copy-idコマンドがインストールされていない場合

[Bob@BravoServer]
$ echo ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
$ rm ~/.ssh/id_rsa.pub #やってもやらなくてもいい

を実行するんだ!

ここまでの工程を完了した段階で、AliceからBobにSSHログインすることはできるようになったぞ!
ただし、

[Alice@AlphaServer]
$ ssh Bob@BravoServer -i ~/.ssh/id_rsa -p 22

といろいろ指定する必要があってちょっとめんどくさいぞ!(本当はこの例では、一般的なファイル名およびポート番号であるため、オプションは省略しても勝手に補完してくれる)

AliceのホームディレクトリにSSHログイン簡略化のためconfigファイルを配置する

最後の正念場だ!
以下のファイルをAlice@AlphaServer~/.ssh/config に配置するんだ。

[Alice@AlphaServer]~/.ssh/config
Host BravoServer
    HostName BravoServer
    User Bob
    Port 22
    IdentityFile ~/.ssh/id_rsa

これで設定完了だ!

[Alice@AlphaServer]
$ ssh BravoServer

でログインできるぞ!

以上!