目的
- クライアントで作成したキーペアでSSH接続する
- パスワード認証方式を無効にする
構築した仮想環境に公開鍵認証で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
パスフレーズ
未入力だと"無し"となり、鍵を使って接続する際にパスフレーズの入力が省略される。
GitHubで使うSSH鍵は Ed25519がおすすめ
Ed25519の方がRSAよりパフォーマンスが良く、公式サイトのサンプルコマンドもEd25519で鍵を作成しています。
ssh-keygen -t ed25519
この場合、秘密鍵と公開鍵のデフォルト名称はそれぞれ、 id_ed25519
id_ed25519.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ファイルにエイリアスを定義することで、リモート接続時のコマンドを省略できる。
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