Hero img
windowsでsshパスワード省略

sshでアクセスするときのパスワードの代わりに鍵を使用する

sshで入る時サーバーが複数あるとIDとPWがどれだったけ?となってしまう。また、毎回パスワードを入力するのが手間なのでそれを解決します。


目次

  • sshの鍵認証をしようする背景
  • 目標
  • 動作環境
  • 流れ
  • windwos鍵を作成する。
  • 送り先
  • 接続のテスト
  • ログインができない場合
  • ログインできない原因を確認する
  • rsaアルゴリズムの非対応
  • ディレクトリの権限問題
  • sshd_config設定
  • まとめ

sshの鍵認証をしようする背景

sshのパスワードはそれぞれ異なったりまたは、複雑すぎ、長すぎるパスワードを使用していると思います。毎回パスワードを入力、毎回パスワードを調べる。あとは人的ミスでパスワード流出、使い回しのパスワードの漏洩を考えると。 鍵認証の方が安心で便利だと思う。   そして何よりパスワード打つ事が大変である。

目標

  • windowsからsshを鍵認証でアクセスする

動作環境

  • ローカル:windows 10 64bit
  • リモート:Ubuntu

流れ

鍵認証はどのように実装されているのかを簡単に。

  1. 1.鍵を2種類作成する。
  2. 2.鍵ファイルの一つをリモートに転送する。
  3. 3.sshアクセス時にリモートの鍵とローカルの鍵を検証して認証する。

windwos鍵を作成する。

windowsでコマンドを打ち込む

rsaアルゴリズムが非推奨になった為、このコマンドでの生成はしない方がいいみたいです。
最新のlinuxバージョン等で使用できないようになっている可能性もあります。Ed25519で鍵を生成してください。

#このコマンドは利用しない方が良いです
#2023年3月でrsaでアクセスできない状況がありました。
ssh-keygen

Ed25519で鍵を生成する

#こちらのコマンドを利用してください。
>ssh-keygen -t ed25519 -b 4096

色々聞かれますが全てエンターで作成しました。

Generating public/private rsa key pair.
Enter file in which to save the key <--どこに保存しますか
Enter passphrase (empty for no passphrase):<--パスワードを指定。無くても作成できます
Enter same passphrase again:
Your identification has been saved in C:\Users\user/.ssh/id_ed25519.
Your public key has been saved in C:\Users\user/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:VItCegj=GEdvv9nstV9EFES4DWQIDEwl/w2ftoSDNAEVCno PC@PC
The key's randomart image is:
+---[RSA 3072]----+
|  .   +o.o*B.+=  |
| . . +   o=.*+ o.|
|. E o . o..+ .+ =|
| .   . o . ... +*|
|      . S + .. o=|
|       . + .  . o|
|      o . .     o|
|     . o      . +|
|      .        =o|
+----[SHA256]-----+

鍵ファイルが2つ作成されました。それでは公開鍵をリモートに送りましょう。公開鍵はYour public key has been saved in C:\Users\user/.ssh/id_ed25519.pub. これのことです。
もう一つの秘密鍵は送らないでください。

送り先

リモート(Ubuntu)ではユーザーのホームディレクトリの.sshフォルダー内に公開鍵を置きます。鍵の名前を「authorized_keys」に変更してください。.sshフォルダーが無い場合は作成してください。

$mv id_ed25519.pub ~/.ssh/authorized_keys

ローカルとリモートの設定はこれで終わりです

接続のテスト

windowsからsshアクセスを行います。 アクセスする時自分の秘密鍵を指定してアクセスします

ssh -i ~/.ssh/id_ed25519 [email protected]
# -i キーのパス
# hoge:ユーザー名 
# @以降:接続先
#

sshソフトはteratermを使用しています。その場合は画像のようにすることでパスワード無しでアクセスができます。

ssh-teraterm

ログインができない場合

基本的に 「/home/username/.ssh/」にauthorized_keysを追加すればできるのだが、制約と設定が必要な場合がある。

  • ディレクトリ「.ssh」の権限が厳格的である(パーミッション)
  • sshアルゴリズムが非対応になっている(RSA)
  • ssh_config設定が無効にしている

ログインできない原因を確認する

sshのログはlinuxOSによって異なる Ubuntu「/var/log/auth.log」。CentOS「/var/log/secure」に記入されるのでtailコマンドで確認してみる。

Ubuntu
sudo tail -F /var/log/auth.log

rsaアルゴリズムの非対応

sshdのバージョンによってrsaアルゴリズムが非対応になったようなのでログインができない。
以下のエラーが発生した場合はアルゴリズム非対応の為です。

userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]> userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]

一応sshd_configの先頭に記入すれば動くようなのですが...

/etc/ssh/sshd_config
#一行目に追加
PubkeyAcceptedAlgorithms=+ssh-rsa

公開鍵のアルゴリズムを変える方が良い様なので生成方法をEd25519アルゴリズムに変更することをオススメします。

ディレクトリの権限問題

以下のエラーの場合は権限の問題でエラーが発生しています。

Authentication refused: bad ownership or modes for directory

以下の3つを確認してください。

  • authorized_keysを600に変更
chmod 600 /home/username/.ssh/authorized_keys
  • sshのディレクトリを700に変更
chmod 700 /home/username/.ssh
  • ホームディレクトリを700に変更
chmod 700 /home/username

sshd_config設定

注意事項

sshd_config設定を変更を間違えてしまうと初期化するしか手がない状況が発生してしまうので注意してください。
必ず1セッションは常にssh接続してある状態で確認するようにしてください。
また、設定を元に戻せるようにバックアップを取るようにしてください。

設定を変更する

公開鍵認証でログインをそもその許可していない場合もあります。
configファイルは/etc/ssh/sshd_configです。

vi /etc/ssh/sshd_config

以下二つを確認してください。

/etc/ssh/sshd_config
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

上記のようになっていた場合は大丈夫です。「#」はコメント機能なので先頭に「#」があれば外してください。

設定情報を反映する

configの書き換えが完了したら設定の反映させます。

Ubuntu
sudo /etc/init.d/ssh reload
CentOS
systemctl reload sshd

まとめ

パスワードでのログインを無効にした方がいいのか迷っている。パスワードは結局root権限sudoコマンド時に必要になるのでパスワードログインも有効にする方がいいのかどうなのか...
RSAアルゴリズムが対応しなくなった様で一時接続できない状況が発生してしまったのでEd25519を使ってください。

関連記事

コメント

コメントを書く

質問や、間違いがありましたら、お気軽にどうぞ

※お名前とコメントの内容を入力してください。
※全てこのブログ上に公表されます。
※許可なく管理者によって修正・削除する場合がございます。 詳しくはプライバシーポリシーを参照ください