SSHでリモートサーバーにログインするとき、毎回パスワードを入力していませんか。
SSHには公開鍵認証という機能があり、これを使うとパスワードを入力せずにサーバーにログインすることができます。
本ページでは、OpenSSHを使ってリモートサーバーにパスワードなしでログインする方法を説明します。
初回時の設定手順
公開鍵認証を利用するためには、公開鍵と秘密鍵のペアが必要になります。
すでに作成済みの鍵がある場合はそれを使えますが、そうでない場合は新たに作成する必要があります。
鍵の生成
まずは、すでに鍵があるかどうか確認してみましょう。
SSHの鍵は通常、~/.ssh ディレクトリに作成されます。
鍵がまだ存在しない場合は、
ssh-keygen -t rsa
コマンドを入力して新たに作成します。
パスフレーズを聞かれたら入力します(僕はパスフレーズなしにしています)。
鍵をリモートサーバーに転送する
SSHの公開鍵認証では、公開鍵をリモートサーバーに転送して、ログインする時はローカルマシンにある秘密鍵を使います。
秘密鍵で暗号化したデータは、対になる公開鍵でしか復号できないため、データの復号と検証ができれば認証されます。
この辺りはSSHサーバーとクライアントが勝手にやってくれるのでユーザーとしては特に意識する必要はありませんが、「リモートサーバーに公開鍵を設置する」必要があります。
転送・設置には以下のコマンドを使います。
ssh-copy-id user@hostname
ユーザー名とホストの部分はご自身のサーバーの情報に書き換えてください。
パスワードを聞かれたら、リモートサーバーにログインするためのパスワードを入力します。
これで公開鍵ファイルがサーバーに転送されます。
上記のコマンドによって
- リモートサーバー上の~/.ssh ディレクトリ(「~」はホームディレクトリを指します)を作成
- 公開鍵ファイルを~/.ssh ディレクトリ下にコピー
- 公開鍵ファイルのパーミッションを600(自分だけが読み書きできる)に変更
- ~/.ssh ディレクトリのパーミッションを700(自分だけが読み書きできる)に変更
という手順が行われているようです。
動作確認
公開鍵の生成とリモートサーバーへの設置ができたら、実際に確認してみましょう。
ターミナルから
ssh user@hostname
と入力して、パスワードを聞かれずにログインできたら成功です。
注意点・ヒント
鍵の管理
一度設定してしまえば便利な鍵認証ですが、鍵ファイルがないと認証できませんし、逆に鍵を盗まれたらそれだけで他の人でもサーバーにアクセスできてしまいます。そのため、鍵の管理はしっかりと行わないといけません。
基本的には以下の点に注意する必要があります:
- 鍵を他の人と共有しない
- 鍵を安全な場所にバックアップする
また、仕事で使う共有サーバーであっても、アカウントや鍵を公開するのはセキュリティ上よくありません。例えば、退職した従業員が退職後にもサーバーにアクセスできたりしますし、誰かが抜けるたびに鍵を再生成して全員に配布し直すのも非効率です。アカウントや鍵を共有するのは、最初は便利でも後々の管理が面倒になります。
接続文字列を簡単にする方法
これは必須設定ではありませんが、便利なので設定しておきましょう。
上の例では
ssh user@hostname
というコマンドでログインしていましたが、もしもユーザー名が長い文字列で、ホスト名がIPアドレスだったりすると、毎回入力するのは非常に面倒です。
例えば
なんて長い文字列を毎回入力するのは避けたいですね。
こんな時に便利は、ローカルマシン上にある~/.ssh/configを編集することでエイリアスを作成することができます。
Host appserver
HostName 192.168.254.150
User tokugawaieyasu
こうすると
ssh appserver
と入力するだけで
ssh tokugawaieyasu@192.168.254.150
を実行するのと同じ意味になります。
また、ポート番号や特定のSSH鍵を指定したい場合にも使えます。その際は
Port 3822
IdentityFile /Users/tokugawaieyasu/.ssh/id_rsa_myCustomKey
という感じで指定できます。