BETA

【Railsデプロイシリーズ】公開鍵認証方式を使ってSSH接続する

投稿日:2018-10-14
最終更新:2018-10-24

最近は Rails App をどれだけ簡単にデプロイするかということにばかり興味津々な Hm です。

Rails では Capistrano というデプロイ自動化ツールを使って、デプロイをするエンジニアが多いと思いますが、Capistrano を使う過程でもこの公開鍵認証方式でのSSH接続をできる用意しなければなりません。

さらに、Github のようにサービスの一部でこの方式を使わなければならないこともあれば、ブロックチェーンなどと暗号学という側面で比較して紹介されることもあります。

このように様々な場面で注目される公開鍵認証方式でのSSH接続を実現する方法を紹介したいと思います(Linux 系統の OS を使っている方が対象です)。

鍵のペア(公開鍵と秘密鍵)を作る

コマンドの紹介

鍵を生成するには、Terminal で以下のコマンドを叩きます。

$ ssh-keygen -t rsa -b 2048 -C "[email protected]"

-t では、鍵の生成方式を定めます。RSA方式が一般的です。他の方式としてはECDSA方式がおすすめです(この場合、-b の値は256, 384, 521 のどれかになります)。

-b では、鍵のbit長を定めます。RSAの場合2048で十分のようですが、4096でもいいでしょう。

-C では、コメントをつけます。なにがしかのサービスでこれを利用する場合、登録時のメールアドレスを書くのが一般的なようです(なくても構わないと思います)。

ちなみに、以下のコマンドで鍵がどのような形式で作られたのか確認できます。

$ ssh-keygen -l -f ~/.ssh/id_rsa.pub

鍵の置き場所やパスフレーズの設定

保存場所と名前

コマンドを叩くと、保存場所とファイルの名前を聞かれます。

保存場所は "~/.ssh/" にしておきましょう。

これは他の多くの記事で、公開鍵認証方式を採用して何かを実行する場面になると、ほとんどのサイトでなんの前置きもなく、この場所に鍵がある前提で話を進めていくからです。

おそらくここに置くのが慣習なのでしょう。もちろん、ここに置かなくても大丈夫です。

名前は "id_用途_ rsa" がいいのではないかと思いますが、この記事では鍵の名前を "id_rsa" と記述していきます。

なので、オススメの入力は "/Users/your_name/.ssh/id_rsa" です。

パスフレーズの設定

鍵を作るとパスフレーズを求められます。任意の文字列を入れればいいのですが、入力しなくてもいいようです。セキュリティが心配な人は何かパスフレーズを入力しましょう。

これで鍵のペアが好きな場所に好きな名前で保存できたと思います。

サーバーに公開鍵を保存する

公開鍵のコピー

まず、作った鍵ペアのうち公開鍵の方をコピーします。

$ pbcopy < ~/.ssh/id_rsa.pub (公開鍵をクリップボードにコピー)

サーバーに公開鍵を保存

そしたらパスワード認証方式でリモートサーバーにログインします。( Capistrano を想定すると、このときのログインは root ではなくて deploy など、追加したユーザーでするのがよいです。)

できたら、公開鍵を保存する場所を作り、公開鍵を保存します。

[[email protected] ~]$ mkdir .ssh
[[email protected] ~]$ chmod 700 .ssh
[[email protected] ~]$ vi .ssh/authorized_keys(ここで公開鍵をペースト)
[[email protected] ~]$ chmod 600 .ssh/authorized_keys

これで公開鍵を保存する作業は終わりです。exit して、ローカルPCに戻りましょう。

鍵を使ってログインする

ログインする

次のコマンドで、鍵を使ってログインを試みることができます。

$ ssh [email protected]_address -i ~/.ssh/id_rsa

-i で、使う鍵を指定します。これで鍵を生成したときにパスフレーズを入力した方はここで確認のために入力を求められます。

これでログインできればひとまず設定完了です。何かうまくいっていなければここまでの過程を見返してみてください。

セキュリティ向上のための設定

パスワードでのログインを許可しない 公開鍵認証方式でのSSH接続に成功したら、サーバーの設定ファイルを修正してパスワードでのログインをできないようにするとセキュリティの向上につながります。

まず、root でサーバーにログインして、以下のコマンドを叩きます。

$ vi /etc/ssh/sshd_config

この中から、 "PasswordAuthentication yes" と記載された場所を見つけ、"no" と書き換えるだけです。

書き換えたら保存して終了しましょう。

ポート番号を変える

パスワードでのログインを不許可にしたときと同じファイルの中に、SSH接続で用いるポートを定義した箇所があります。

この番号を変えることでもセキュリティの向上が期待できます。49152番65535番であればなんでもいいようです。

書き換えたら保存して終了しましょう。

再起動して変更を有効にする

このファイルを変更したら、以下のコマンドを叩いて変更を有効にします。

$ sshd -t(設定ファイルに欠陥がないかチェック。何も表示されなければ成功)
$ service sshd restart(CentOS 6系は "service"。CentOS 7系は "systemctl" 。)

Capistrano のための設定(ssh-agent)

ssh-agent の紹介

今までのところで、ローカルPCからリモートサーバーへのSSH接続を公開鍵認証方式を利用してできるようになりました。

Rails のアプリケーションを Capistrano でデプロイできるようにするには、今度はリモートサーバーから Github への SSH接続を公開鍵認証方式でできるようにしなければなりません。

ローカルから Github への接続は多くの方がすでに実現していると思いますが、リモートから Github というのを毎回毎回するのは面倒ですよね。

そこで "ssh-agent" というツールを使います!これを使うと、ローカルからリモート、ローカルから Github 、このふたつがあればリモートから Github への接続も可能になる優れものです。

ssh-agent に鍵を登録する

次のコマンドを叩いて、ssh-agent にふたつの鍵を登録します。

$ ssh-add ~/.ssh/id_remote_server_rsa
$ ssh-add ~/.ssh/id_github_rsa
$ ssh-add -l(登録されたかどうか確認)

登録が完了したら、".ssh/config" を編集します。(Host はただの識別子ですので好きなように命名してください。User はサーバーログイン時につかうものがよいでしょう。Github の方はこだわりがなければこのままがいいと思います。)

Host remote_server_name
  HostName IPアドレス
  User deploy
  ForwardAgent yes
Host github
  HostName github.com
  User git
  ForwardAgent yes

これで設定完了です。リモートにログインしてから Github にSSH接続を試みても、しっかり成功すると思います。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@edihasamの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう