Server Build Exercises on AWS (Amazon Web Services) 2022 edition

SSHの鍵を使う

SSHでパスワード認証の場合は、ただ使うだけです。 (各サーバへログインするための)パスワード入力を促されるので、パスワードを入力してください。

以下、公開鍵暗号の場合の話をします

公開鍵暗号の場合(素朴な使い方)

公開鍵暗号方式の秘密鍵にはパスワード(正確にはパスフレーズ(Pass Phrase))がかかっています。 このパスフレーズはssh-keygenで入力した文字列のことです。 そのPCにログインするためのパスワードではありません

他人が秘密鍵を見ても機密情報が分からないように、 秘密鍵(例:~/.ssh/id_rsa)は(対称鍵暗号で)暗号化して保存します。 公開鍵は他人に見せる情報なので暗号化は不要です。

sshのプログラムが(生の)秘密鍵をロードする際には、この(対称鍵)暗号を解かなければなりません。 解くために、パスフレーズが必要です。 sshコマンドを実行すると(この秘密鍵を読むために)パスフレーズの入力をうながされるので入力してください。 いつものように入力しても、うんともすんとも言わない(ブラウザのように*が表示されたりしない)ですが、 自信をもってパスフレーズを入れましょう

Enter passphrase for key ...略...:

参考: 公開鍵暗号の場合(便利な使い方: SSH AGENT FORWARDING)

概略を書いておきますので、不明なところは、ぐぐってくださいね

sshにはssh-agentというソフトウエアが付属しており自動的に公開鍵の管理をしてくれます。 それだけでなく、 ssh-agentが裏側でログインするSSHサーバに自動的に回答してくれるので、 パスフレーズを入力せずにサーバ1にログインし、さらにサーバ1からサーバ2へログインし…と進んでいけるようになります。 ただし事前準備として(ログインしたい)サーバすべてに公開鍵の登録と全てのホストでSSH AGENT FORWARDINGを許可する設定が必要です。

【注意】 とうぜん公開鍵の登録作業は、 そのサーバに、すでにログインできる別の人(ふつうはサーバの管理者)に作業をおねがいすることになります

ssh-agent
  ^  |
  |  |
  |鍵|
  |  |  
  |  V
  ssh    --------> サーバ1 --------> サーバ2 --------> サーバ3
  1. サーバの~/.ssh/に公開鍵を登録します
    • (a)具体的には自分の~/.ssh/id_ras.pubファイル(公開鍵)の中身(文字列)を、 (b)サーバの~/.ssh/authorized_keys(公開鍵の一覧)に追加してください
    • サーバの~/.ssh/authorized_keysは1行1公開鍵です。何行でも追加できます。必要なだけ追加してください
  2. ssh-agentを起動してください
    • 自動的に起動する方法は各自の環境によって異なるので簡単にまとめるのは難しいです
    • Debian/Linux(少なくともMATE環境)では自動的にssh-agentが実行されているため、 ターミナルでssh-addを実行すれば期待通りの動作をします
      • 一方、ChromebookのDebian/Linuxは、そのへん何もやってくれないので、ターミナルから起動します(一手間増える;-)
    • Windows10ではssh-agentサービスを有効にしておいてください。そうすればプロンプトでssh-addが使えるはずです
    • BSD Unixのとき、私はXウィンドウシステムの起動設定のなかでssh-agentを実行するようにしています
  3. ssh-addで秘密鍵を登録します。この際パスフレーズを尋ねられるので入力してください
  4. このあとは、ふつうにsshコマンドが使えます。 サーバ1,2,3へログインするとき、自動的に、裏側で公開鍵の交換が行われ、ログインが許されます

パスフレーズを聞かれないようにできない?

全サーバに公開鍵を登録したうえで、 クライアントおよび全サーバでssh agent forwardingを許可する設定をしておくと、 最初に一回ssh-agentに登録するだけで、あとはパスフレーズを聞かれることなくログインできます。 それは堕落だという派閥の人もいますが、便利すぎて使っちゃいますけどねぇ、これ

うまく行かない場合、確認するところは、 サーバの設定ファイル/etc/ssh/sshd_config

AllowAgentForwarding yes

となっているか?と、 クライアントの設定(~/.ssh/config)で

ForwardAgent		yes

と設定されているか?です(SSHのデフォルト設定は no です)

Last updated on 23 Dec 2021
Published on 23 Dec 2021
Copyright (C) 2021-2022 Ken'ichi Fukamachi, All rights reserved. CC BY-NC-SA 4.0
We appreciate AWS Academy Japan for the offer of the learning environment.

Powered by Hugo. Theme by TechDoc. Designed by Thingsym.