【SSH接続】公開鍵で「サーバにログインする」設定方法
さて、今回は公開鍵を使ったSSH接続の設定方法を習得しましょう。
開発を行っていると、かなりの頻度でSSH接続設定の場面が出てくるので、覚えておきましょう。
SSH接続にあたってので前提環境
前提環境として、MacOSXからMacOSX上に構築してあるローカル開発環境に対して、SSH接続設定を行っていきます。 以下ローカル開発環境のことを仮想マシンと呼びます。
SSH接続の流れ
Macから仮想マシンにSSH接続をするため、Macで「秘密鍵」「公開鍵」のペアを作る必要があります。 その後、公開鍵を仮想マシンに送付して設置し権限周りを変更し、SSHを試してみます。
- Macで鍵のペアを作成
- 公開鍵を仮想マシンに送付
- 仮想マシンで公開鍵を適切な場所に配置
- 公開鍵の権限を変更
- SSH接続をMacから実行
以上が流れとなります。色々やっているように見えますが、ざっくりいうとMacでファイル作って、仮想マシンに置いているだけです。
SSH接続設定
それでは、実際に手を動かして接続設定を行っていきましょう。
Macで秘密鍵・公開鍵を作成
ターミナルを開いて、鍵を作成するコマンドを実行します。
ssh-keygen -t rsa
このコマンドを実行すると、コマンドライン上で色々聞かれますが、 Enter連打でOKです。鍵にパスワードなどを設定しますか?とか聞かれてますが気にずEnter連打でOKです。
コマンドが実行し終わると、ホームディレクトリの.sshディレクトリ内(~/.ssh/)に以下の2つのファイルが出来ます。
- id_rsa
- id_rsa.pub
id_rsaというのが秘密鍵です。これは絶対に外部に漏らしていけません! id_rsa.pubというのが公開鍵です。pubとついているのでpublic、つまり公開鍵ということです。 この公開鍵は接続したいサーバに送付して配置するファイルとなります。
軽く今回実行した、ssh-keygenコマンドを説明すると、 -tというオプションで暗号化アルゴリズムを指定します。 今回はrsaという非常に強力なアルゴリズムで暗号化を行いました。
コマンドのオプションは、他にも鍵の長さを変える(より強固にする)ものもありますよ。
公開鍵を仮想マシンに送付
送付といっても、ただコピーすればOKです。
まず公開鍵の内容を表示します。
cat ~/.ssh/id_rsa.pub
これでコマンドラインに公開鍵の内容が表示されるので、コピーしておきましょう。
続いて、仮想マシンにログインしましょう。Vagrantfileがあるディレクトリで、以下実行してください。
vagrant ssh
ログインしたら、公開鍵を配置するディレクトリを作成します。 ※適切な場所に公開鍵を配置しないと、SSH接続することができません。
mkdir ~/.ssh
ホームディレクトリに「.ssh」という隠しディレクトリを作成しました。「.」から始まるディレクトリやファイルは隠しディレクトリ、隠しファイルと呼ばれます。
.sshの中にauthorized_keysというファイルを作成してください。
touch ~/.ssh/authorized_keys
このファイルにコピーした公開鍵の内容を貼り付けます。
この時vagrantを使った仮想マシンであれば、.sshディレクトリも、authorized_keysも既にあり、 authorized_keysの中に何か記述されていますが、改行してコピーした公開鍵の内容を貼り付けましょう。
なぜ最初からあるかと言うと、vagrantでは予め公開鍵・秘密鍵のペアを作っており vagrant sshというコマンドで接続する際それらを使用しているため、既に存在していました。
ファイル、ディレクトリの権限を変える
公開鍵を仮想マシンに設置出来ましたが、これではまだSSH接続は出来ません。 公開鍵を設置したディレクトリやファイルの権限は適切な権限に変えてあげる必要があるんです。
その適切な権限とは
- .sshは700
- authorized_keysは600
です。chmodコマンドで変更していきましょう。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
これで仮想マシン側の設定は終わりです。
SSHコマンドで仮想マシンに接続してみる
いよいよSSH接続を試してみましょう。
Macのターミナル上で以下コマンドを実行しましょう。
ssh 192.168.33.10 -l vagrant
これで、パスワードの入力も求められずサーバにログインできれば成功です。 sshコマンドの「-l」というオプションではユーザを指定しています。
これで、SSH接続の設定は終わりです。 今回ローカルな環境で行いましたが、AWSなどのクラウドのリモート環境などでも 何度も行う設定なので、この機会に設定のタイムアタックなどして慣れていってください。
おまけにSSHの設定ファイルを書く
今回「sshコマンド」でIPアドレスやユーザ名とかを入力しましたが、毎回入力するのは面倒ですよね? なので、簡単に接続出来るようになる、SSHの設定ファイル書いてみましょう。
Macの.sshディレクトリ内にconfigというファイルがあると思います。なければ作りましょう。 configファイルに以下を記述してください。
Host vm
HostName 192.168.33.10
User vagrant
IdentityFile ~/.ssh/id_rsa
そして以下のコマンドを実行してみてください。
ssh vm
どうでしょうか?これでログイン出来ると思います。 コマンドがとてもシンプルになるので、こういった設定ファイルを書いておくのも良いと思いますよ。
設定の説明を簡単にすると、
Hostというところで、SSH接続する仮想マシンに名前をつけます。今回はvmとシンプルな名前にしました。 HostNameというところでは仮想マシンのIPを指定しています。 Userは仮想マシンのユーザ名です。 IdentityFileは秘密鍵の場所です。Macで作成した秘密鍵・公開鍵を作成しましたが、この秘密鍵のパスを書いています。
どうしても、接続する仮想マシンの数が増えてきたりすると、 IPを覚えられませんし、メモっていても入力するのが面倒なので、こういった設定ファイルを活用するのはとても良いことです。