VPSサーバーでWebサイト公開 備忘録 ~Linux、MySQLからAJAXまで

Google Cloud Compute Engine(GCE)でSSH接続の設定(Linux系VM)

Google Cloud Compute Engine(GCE)のSSH接続の仕組み、設定方法、Linux系VMのSSH接続設定についてまとめました。

※目次をクリックすると目次の下部にコンテンツが表示されます。

GCEのLinux系VMのSSH接続の仕組み、概要
(1)概要
 
・GCEは鍵ベースのSSH認証を使用して、すべてのLinux系VMインスタンスへの接続を確立する。
・デフォルトでは、Linux系VMのローカルユーザーのパスワードは構成されていない。
・VMに接続するには、いくつかの構成を実行する必要があるが、Google CloudコンソールまたはGoogle Cloud CLIを使用してVMに接続する場合、GCEはこれらの構成をユーザーに代わって実行する。
・デフォルトでは、インスタンスメタデータを使用してSSH認証鍵を構成し、SSHアクセスを管理する。
・Linux系VMではメタデータ鍵またはOS Loginを使用できる。
 OS Loginを使用する場合、メタデータSSH認証鍵は無効になる。
 
(2)OS LoginマネージドSSH接続
 
・OS ログインでは、IAMを使用してインスタンスへのSSHアクセスを管理でき、個別のSSH認証鍵を作成して管理する必要がない。
・OS ログインを利用することにより、VMインスタンス間で一貫したLinux ユーザーIDを維持できるため、複数のVMやプロジェクト間で多くのユーザーを管理することができる。
・OS ログインは、LinuxユーザーアカウントをGoogle IDにリンクして、SSHアクセス管理を簡素化する。
・管理者は、IAM権限を設定して、インスタンスレベルまたはプロジェクトレベルでインスタンスへのアクセスを簡単に管理できる。
・OS Login メタデータを設定すると、GCEでは VMのauthorized_keysファイルが削除され、プロジェクトまたはインスタンスのメタデータに保存されているSSH 認証鍵からの接続を受け入れなくなる。
 
(3)メタデータ マネージドSSH接続
 
1)Google Cloud コンソールを使用してSSH接続(自動構成)
 
①Google CloudコンソールのSSHボタンを使用してVMに接続
②GCEは、ユーザー名を設定し、次の構成でエフェメラル SSH 認証鍵ペアを作成する。
・ユーザー名:Googleアカウントのユーザー名
・公開SSH認証鍵と秘密SSH認証鍵は、ブラウザ セッションに保存される。
・SSH 認証鍵の有効期限は5分で、GCEが鍵を作成して5分後に、SSH認証鍵ではVMに接続できなくなる。
③GCEが公開SSH認証鍵とユーザー名をメタデータにアップロードする。
④GCEは、SSH認証鍵とユーザー名をメタデータから取得してユーザー名でユーザーアカウントを作成し、Linux系VMでは、その公開鍵をVM上にあるユーザーの~/.ssh/authorized_keysファイルに格納する。
⑤Compute Engine が接続を許可する。
 
2)サードパーティ製ツールを使用してSSH接続
 
①SSH認証鍵ペアとユーザー名を作成
例)
ssh-keygen -t rsa -f ~/.ssh/KEY_FILENAME -C USERNAME -b 2048
 
②以下のA)またはB)の手順で、公開鍵とユーザー名をメタデータにアップロード
 
【A.VMインスタンスのメタデータにSSH認証鍵を追加する場合】
ⅰ)Google Cloud コンソールで、[VM インスタンス] ページに移動
→VMの名前をクリック
→編集をクリック
 
ⅱ)[SSH 認証鍵] で、[項目を追加] をクリック
テキスト ボックスに公開鍵を追加
 有効期限のない鍵の形式:KEY_VALUE USERNAME
 有効期限のある鍵の形式:KEY_VALUE google-ssh {“userName”:”USERNAME”,”expireOn”:”EXPIRE_TIME”}
 
ⅲ)保存をクリック
 
【B.プロジェクトのメタデータにSSH認証鍵を追加する場合】
公開 SSH 認証鍵をプロジェクト メタデータに追加して、プロジェクト内のすべての VM にアクセスできる。
 
注)VMの~/.ssh/authorized_keysファイルに直接追加した公開SSH認証鍵は、VMのゲストエージェントによって上書きされる可能性がある。サポートされている Google Cloudコンソール、gcloud CLI、または Compute Engine API メソッドを使用して、鍵を追加することが推奨。
Windows端末からのSSH接続設定手順例
(1)SSH鍵をWindowsクライアントのTeraTermで作成する場合
 
※2048ビットのRSA鍵を生成する場合の設定例
 
1)SSH鍵を作成
 
①TeraTermを起動させ”設定”→”SSH鍵作成”をクリック
 
②鍵生成ウィンドウで”生成”をクリック
・鍵の種類:RSA
・ビット数:2048
 
③鍵が生成される。ウィンドウの以下の項目に入力
・鍵のパスフレーズ:ブランクでもOK
・コメント:ユーザー名@gmail.com
 
④公開鍵の保存、秘密鍵の保存
 
2)GCEのコンソールに公開鍵を追加
 
①”Compute Engine”→”VMインスタンス”→インスタンス一覧
 
②対象のインスタンスをクリック
 
③中央ペイン上部の”編集”をクリック
 
④SSH認証鍵の部分の”項目を追加”をクリック
 
⑤1)で作成した公開鍵ファイルを開き、中身を貼り付け
例)貼り付けるテキストの内容例
ssh-rsa AAA・・・・キー値・・・・・
・・・・・・ ユーザー名@gmail.com
 
⑥”保存”をクリック
 
3)TeraTermからSSH接続
 
・ユーザー名:適宜入力
・”RSA/DSA・・・鍵を使う”の横の”秘密鍵”をクリックし、1)で作成した秘密鍵ファイルを選択
 
(2)仮想マシンにブラウザ接続でログインして設定
 
※CentOS8で設定した例
 
1)Google CloudコンソールでSSHコンソール接続
 
①VMインスタンスの接続欄の”SSH”をクリック
→ブラウザでのSSH
  ↓
Google Cloudで利用しているアカウント名のユーザーアカウントでログイン
 
②SSH鍵がGCEによって自動で作成される
・/home/ユーザー名/.ssh/authorized_keysファイルに自動で公開鍵情報が追加されている。
 
2)SSH鍵を生成
 
①作業用の一般ユーザーアカウントのホームディレクトリのルートディレクトリに移動
$ cd ~
 
②SSHの公開鍵と秘密鍵を作成
$ ssh-keygen -t rsa

.sshディレクトリ配下に秘密鍵(id_rsa)と公開鍵(id_rsa.pub)が生成される
 
③公開鍵(id_rsa.pub)ファイルの中身を~/.ssh/authorized_keysに追加
mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
 
④秘密鍵(id_rsa)ファイルの中身をコピー
$ cat ~/.ssh/id_rsa
 
⑤Windows端末で秘密鍵ファイルを作成
上記④でコピーした内容をWindows端末でファイルに貼り付け
最後の行に改行を入れる(改行が入っていないとSSH接続時にエラーとなって接続できなかった)
 
⑥Windows端末からTera TermでSSH接続の確認
上記⑤で作成した秘密鍵ファイルを指定して接続
 
※rootのパスワードを設定
rootのパスワードが分からなかったので以下のコマンドでrootのパスワードを設定
$ sudo passwd root
GCE上のCentOS Stream9でSSH認証エラー
(1)CentOS Stream9でSSH認証エラーが発生
 
1)/var/log/secureのログを確認
 
Nov 27 11:13:53 inst-strm9 sshd[3765]: userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]
 
2)サーバー側(OpenSSH)とクライアント側の(TeraTerm)の環境を確認
 
●サーバー:OpenSSH
○バージョン:openssh-8.7p1-35
○公開鍵署名(ホストキー)アルゴリズムの対応
・ssh-rsa(SHA1ハッシュを使用):新しいOpenSSHでは、がデフォルトで無効化されている。
・rsa-sha2-256/512(SHA2ハッシュを使用):ssh-rsaと同じ鍵タイプを使うという利点があり、さらにより安全なSHA-2ハッシュアルゴリズムが使用。
・ssh-ed25519署名(SHA2ハッシュを使用):OpenSSH 6.5以降でサポートされている。
・ecdsa-sha2-nistp256/384/521(SHA2ハッシュを使用):OpenSSH 5.7からサポートされている。
 
●クライアント:TeraTerm
○バージョン:4.100
○公開鍵署名(ホストキー)アルゴリズムの対応
・ssh-rsa、ssh-ed25519、ecdsa-sha2-nistp256/384/521
・rsa-sha2-256/512は非対応。
 
●認証アルゴリズム、鍵、ハッシュの対応
認証アルゴリズム ハッシュ
ssh-rsa RSA SHA1
rsa-sha2-256/512 RSA SHA2-256/521
ssh-ed25519 ed25519 SHA2-256
ecdsa-sha2-nistp256/384/521 ECDSA SHA2-256/384/521

 
3)エラーの原因
 
・SSHサーバー側は、ssh-rsaがデフォルトで使えなくなっており、クライアント側は、代わりに rsa-sha2-256/512やssh-ed25519を利用する必要があったが、Teraterm 5.0 beta 1 よりも古いバージョンを使っている場合は、 rsa-sha2-256/rsa-sha2-512がサポートされておらず、エラーとなった。
 
(2)対応策
 
【対応策A】
TeraTermを5.0、4.107以降にバージョンアップする
 
【対応策B】ssh-ed25519アルゴリズムを使ってSSH鍵を作成
 
1)SSH鍵をWindowsクライアントのTeraTermで作成
 
①TeraTermを起動させ”設定”→”SSH鍵作成”をクリック
 
②鍵生成ウィンドウで以下のように入力し、”生成”をクリック
・鍵の種類:ED25519
 
③鍵が生成される。ウィンドウの以下の項目に入力
・鍵のパスフレーズ:ブランクでもOK
・コメント:ユーザー名@gmail.com
 
④公開鍵の保存、秘密鍵の保存
 
2)GCEのコンソールに公開鍵を追加
 
①”Compute Engine”→”VMインスタンス”→インスタンス一覧
 
②対象のインスタンスをクリック
 
③中央ペイン上部の”編集”をクリック
 
④SSH認証鍵の部分の”項目を追加”をクリック
 
⑤1)で作成した公開鍵ファイルを開き、中身を貼り付け
例)貼り付けるテキストの内容例
ssh-ed25519 AAA・・・・キー値・・・・・
・・・・・・ ユーザー名@gmail.com
 
⑥”保存”をクリック

モバイルバージョンを終了