ウェブログラム

実践しながらじっくり学ぶ、Webプログラム習得サイトです。自作サービスの公開までWeb開発を実践していきましょう!

Webrogram

自分のオリジナルサービスを作って運営しよう!

【SSH接続】公開鍵で「サーバにログインする」設定方法

さて、今回は公開鍵を使ったSSH接続の設定方法を習得しましょう。

開発を行っていると、かなりの頻度でSSH接続設定の場面が出てくるので、覚えておきましょう。

今回の記事では、公開鍵を使ったSSHの仕組みについては解説しません。 仕組みについては以下の記事で解説しています。

webrogram.hatenadiary.jp

それでは設定をしていきましょう。

SSH接続にあたってので前提環境

前提環境として、MacOSXからMacOSX上に構築してあるローカル開発環境に対して、SSH接続設定を行っていきます。 以下ローカル開発環境のことを仮想マシンと呼びます。

f:id:iku8:20180826175926p:plain

仮想マシンをまだ作っていない人は以下の記事を参考に作ってみてください。

webrogram.hatenadiary.jp

Windows等でSSH接続をする場合は、「Putty」や「Tera Term」などのSSHクライアントを使う必要があるそうです。 いずれ、この辺りの解説もしようと思います。

SSH接続の流れ

Macから仮想マシンSSH接続をするため、Macで「秘密鍵」「公開鍵」のペアを作る必要があります。 その後、公開鍵を仮想マシンに送付して設置し権限周りを変更し、SSHを試してみます。

以上が流れとなります。色々やっているように見えますが、ざっくりいうとMacでファイル作って、仮想マシンに置いているだけです。

SSH接続設定

それでは、実際に手を動かして接続設定を行っていきましょう。

Mac秘密鍵・公開鍵を作成

ターミナルを開いて、鍵を作成するコマンドを実行します。

ssh-keygen -t rsa

このコマンドを実行すると、コマンドライン上で色々聞かれますが、 Enter連打でOKです。鍵にパスワードなどを設定しますか?とか聞かれてますが気にずEnter連打でOKです。

コマンドが実行し終わると、ホームディレクトリの.sshディレクトリ内(~/.ssh/)に以下の2つのファイルが出来ます。

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を覚えられませんし、メモっていても入力するのが面倒なので、こういった設定ファイルを活用するのはとても良いことです。