Help us understand the problem. What is going on with this article?

SSH公開鍵認証で接続するまで

目的

  1. クライアントで作成したキーペアでSSH接続する
  2. パスワード認証方式を無効にする

構築した仮想環境に公開鍵認証でSSH接続するケースが多くなってきたので、まとめておく。
SSHの基礎はココを参照すると良い。

1. クライアントで、キーペアを作成してSSHでリモートに接続するまで

鍵を作成して、リモートへ接続するまでの簡単な手順。鍵はデフォルトの ~/.ssh/id_rsaを作成して使った場合。

# クライアントPCで鍵を作る
ssh-keygen -t rsa -b 4096

# リモートへ公開鍵を転送する
ssh-copy-id -i ~/.ssh/id_rsa.pub [リモートユーザー]@[リモートサーバーのホスト名]

# リモートにSSHで接続する
ssh -i id_rsa [リモートユーザー]@[リモートサーバーのホスト名]

詳細

クライアントPCでキーペアを作成する

ssh-keygen -t rsa -b 4096 {-f <鍵の名前>}

2020.06.05 補足
以前は ssh-rsa としてましたが、こちらのブログの内容で、 ssh-rsa が将来的に非推奨となるとの話もあるので、これらも参考にした上で、最適だと考える鍵形式や鍵長で作成すると良い。
上記では、鍵形式はRSA、鍵長を4096bitにした場合。

鍵の名称と保存先

-f は鍵の名称を変えたい場合にパスから指定する。 -f /home/[user名]/.ssh/[鍵の名前]
指定しない場合は、 /home/[user名]/.ssh ディレクトリに以下の名前で、秘密鍵と公開鍵が作られる。
秘密鍵:id_rsa
公開鍵:id_rsa.pub

パスフレーズ

未入力だと"無し"となり、鍵を使って接続する際にパスフレーズの入力が省略される。

クライアントPCからリモートサーバーへ公開鍵を転送して登録する

ssh-copy-id -i ~/.ssh/id_rsa.pub [リモートユーザー]@[リモートサーバーのホスト名]

上のコマンドをクライアントPCから実行することで、リモートサーバーに公開鍵を転送と公開鍵登録が実行されます。 (@vox_magnus さん、ありがとうございます。)
Copy the key to a server

クライアントPCから公開鍵認証でリモートにSSH接続できることを確認する

ssh -i id_rsa [リモートユーザー]@[リモートサーバーのホスト名]

-i id_rsa には秘密鍵のパスを指定する。 なおデフォルトでは、 /home/[User名]/.ssh ディレクトリを参照する。保管先が別ならパスで指定すること

2. リモートへの接続する際のパスワード認証を無効にする

公開鍵認証でリモートに接続できることが確認できたら、パスワード認証を無効にすることで鍵が無いとログインできないようにする。
設定はリモートサーバーで行うので、SSH接続してから以下の操作を行う。

/etc/ssh/sshd_configを開き以下を入力する

PasswordAuthentication no

リモートサーバーをSSHサービスを再起動する

# systemctl restart sshd

3. その他

ssh接続で秘密鍵や接続先リモートを省略する方法

クライアントの .sshディレクトリのconfigファイルにエイリアスを定義することで、リモート接続時のコマンドを省略できる。

/home/[user名]/.ssh/config
Host [エイリアス1]
  HostName リモートのホスト名
  User リモートユーザー
  IdentityFile /home/[user名]/.ssh/[秘密鍵]

Host [エイリアス2]
  ...

エイリアス1に接続したい場合は以下で接続できるようになる

ssh エイリアス1

(あまり用途は無いかもしれないが、)同じリモートに異なる鍵でアクセスしたい場合は、エイリアスを分ければ良い。

rootユーザーでのssh接続を無効にする

/etc/ssh/sshd_configを開き、PermitRootLoginの値をnoにするかコメントアウトする

PermitRootLogin no

その後、再起動すると反映される

公開鍵認証でssh接続しているのにログインパスワードを聞かれる場合

ログインユーザーのホームディレクトリの.sshディレクトリと登録済みの公開鍵のアクセス権を確認する

ls -al ~/.ssh

# .sshディレクトリは、700であること
drwx------. 2 <user> <group> xx MM DD hh:mm .ssh

# .sshディレクトリ配下の公開鍵や認証情報は、600であること
-rw-------. 1 <user> <group> xx MM DD hh:mm authorized_keys
-rw-------. 1 <user> <group> xx MM DD hh:mm id_rsa.pub

参考

インフラエンジニアじゃなくても押さえておきたいSSHの基礎知識
sshのパスワード認証方式を無効にする
ssh公開鍵認証設定まとめ
OpenSSH 公式による scp 非推奨宣言を受け, scp, sftp, rsync を比較してみた
ssh-rsa,非推奨のお知らせ
ssh.com Ssh-copy-id

kazokmr
自分のための記録用です
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away