サーバにsshログインする際に、通常ログインユーザのパスワードの入力を求められるが、
本記事では、sshログインのパスワード入力をなしにする方法を紹介する。
sshログインのパスワードをなしにする方法
先に、sshログインのパスワードをなしにする方法の仕組みを説明してしまおう。
どう言うことをするかと言うと、
パスワードが必要ない公開鍵をログイン先サーバに登録する。
そうすることで、sshログイン毎に聞かれるパスワードの入力を省略することが可能となる。

本記事では上記の状態を構築する手順を紹介する。
sshログインのパスワードをなしにする具体的な手順は以下となる
- sshログイン用の鍵を作成する
- 公開鍵(.pub)をログイン先サーバへ転送・登録する
- 公開鍵が正しく登録されたことを確認する
では、上記手順を順番に解説していく。
①sshログイン用の鍵を作成する
手順①では、sshログインに使用する鍵を作成する。
具体的には、秘密鍵と公開鍵(パスワードなし)の二つの鍵を作成する。
まずは、ssh-keygenコマンドで、sshログインに必要な秘密鍵と公開鍵を作成する。
以下のコマンドをローカルで実行する。
# sshログイン用の鍵を作成(※ローカルで実行!)
ssh-keygen -t rsa
上記コマンドを実行すると「鍵をどこに保存する?」と聞かれる。
デフォルトの場所に保存してOKなので、特に何も考えず「enter」を押す。

次に、sshログインの際に聞かれるパスワードの入力を求められる。
「パスワードはなし」の状態にしたいので、ここでは何も押さず「enter」を二回押す。

すると秘密鍵と公開鍵が作成される。
下記コマンドで確認してみる
ls -l ~/.ssh/
#実行結果
id_rsa 秘密鍵
id_rsa.pub 公開鍵
id_rsa(秘密鍵)と、id_rsa.pub(公開鍵)が作成されているはずだ。
以上でsshログインに必要な鍵の作成作業は完了。
ちなみに、両者の鍵は間違えると大変なので、覚えておこう。
②公開鍵(.pub)をログイン先サーバへ転送・登録する
sshログイン用の鍵の作成が完了したら、手順②では、
作成した公開鍵をログイン先サーバに転送・登録すると言う作業を行う。
ssh-copy-idコマンドで、作成した公開鍵をログイン先サーバに転送・登録する。
これもローカルで実行する。
# 公開鍵をリモートサーバに転送・登録する(※ローカルで実行!)
ssh-copy-id -i ~/.ssh/id_rsa.pub ログインユーザ名@ホスト名
登録が完了すると以下のような文言が表示される。
「1個の鍵が登録されました。マシンに(記載されている)sshコマンドでログインしてみてください」と書いてある。
なので記載されているsshコマンドでログインできるか確認してみる。
ssh ユーザ名@ホスト名
この時、上記sshログインコマンド実行時に、
パスワードなしでsshログインできたら成功。
③公開鍵が正しく登録されたことを確認する
ここからの作業は必須ではないが、念のため紹介しておく。
以下は、ssh-keygenコマンドで登録された、サーバ側の公開鍵の確認方法だ。
もちろん、これはログイン先のサーバで実行する。
# 公開鍵が登録されているディレクトリへ移動
cd ~/.ssh
# 公開鍵情報ファイルを確認
ls -l authotized_keys

authorized_keysと言うファイルに、登録された公開鍵が溜まっていき、
sshログイン時、ユーザ認証より先に公開鍵認証が成立するか判断する、
と言う動きをしているらしい。
権限は600が好ましく、最初から600になっていたので問題なかった。
おまけ:関連記事
筆者がそもそも、sshログインをパスワードなしにする方法を調べるに至った経緯として、
Jenkinsを使用してソースの自動デプロイを行うのに、上記手順が必要だったからだ。
Jenkinsを使用してソースの自動デプロイを行うようにすると、開発者としてはとてもデプロイ作業が楽になったので、ぜひ、以下の記事も読んでいただきたい。
https://webkaru.net/linux/ssh-command/