概要
この記事はSSH接続に関して、公開鍵の作成や秘密鍵の作成、Azureの仮想マシン(Linux)へのテスト接続などを記事にしています。
特に、公開鍵認証やパスフレーズの入力の省略など私自身知らなかった部分や、実装で困った部分を重点的に解説していきます。
目次
- 公開鍵、秘密鍵の作成
- Azureでテスト用環境の構築
- テスト接続
- パスフレーズの入力の省略
1. 公開鍵、秘密鍵の作成
今回は以下の仕様で公開鍵、秘密鍵を作成します。
- 形式:Open SSH
- 暗号化アルゴリズム:RSA暗号
- 暗号化強度(鍵長):4096ビット
- パスフレーズの有無:有
鍵の作成では、以下のコマンドをPowerShellやコマンドプロンプトで実行します。
ssh-keygen -t rsa -b 4096
このコードを実行すると、パスフレーズの入力を求められるため、必要に応じてパスフレーズを入力します。
パスフレーズは空でも問題ありませんが、秘密鍵が漏洩した場合を考慮して、パスフレーズを設定しておくことをお勧めします。
パスフレーズを入力するとC:\Users\ユーザー名\.ssh フォルダ配下に以下2つのファイルが作成されます。
- id_rsa(秘密鍵)
- id_rsa.pub(公開鍵)
※注意
もし、既に秘密鍵が存在する場合は、コード実行時に上書き保存するか選択できますが、上書きする前にバックアップを取得しておくことをお忘れなく。
2. Azureでテスト用環境の構築
手順
接続テスト用に以下の環境を構築します。
- OSの種類:Linux
- イメージ:Ubuntu Server 20.04 LTS - x64 Gen2
- サイズ:Standard_B2s
- ユーザー名:azureuser
作成方法は以下の通りです。
-
AzureのPortalからリソースの作成で仮想マシンを作成する
-
基本セクションでサブスクリプションやリソースグループなどを入力する
原則デフォルトの値で問題ないですが、以下の項目については変更する- SSH公開キーのソース:既存の公開キーを使用
- SSH公開キー:1. 公開鍵、秘密鍵の作成で作成した、公開鍵をメモ帳などで開き、その値を入力する(改行しないように注意)
- パブリック受信ポート:選択したポートを許可する
- 受信ポートを選択:SSH(22)
-
確認および作成セクションから作成ボタンをクリックする
補足
以下のようにSSH公開キーのソースを"新しいキーの組の生成"にすると、VM作成時に新しく鍵が作成されます。
ただし、OpenSSH形式ではなくPem形式となりますので、システムの要件を確認し自分に必要な鍵を生成、登録してください。
3. テスト接続
さて、ここまで来たら一度接続できるかテストしてみます。
ローカルPCからAzure上のVMに対して、公開鍵認証で接続をしてみます。
手順
- AzureのPortalから2で作成したVMのリソースページを開きます
- 設定 > "接続"のセクションを開きます
- 接続方法に"ネイティブSSH"を選択し、接続方法の詳細を表示させます
- ③SSHコマンドのコピーと実行で秘密鍵のパスを指定し、コマンドをコピーします
- PowerShellやコマンドプロンプトから、5のコマンドを実行します
- パスフレーズを設定している場合は、パスフレーズを入力します
補足
Azureに登録している鍵を入れ替えたい場合などは、設定>"接続"ページから"その他のオプション"を選択し、"パスワードまたはキーのリセット"から、ユーザー名を変更したり、カギを追加したり変更したりできます。
4. パスフレーズの入力の省略
パスフレーズの設定をしている場合、接続する際にパスフレーズを毎回入力する必要があり、システムなどで制御している場合(例:日時バッチでSFTPでファイル送付するなど)に邪魔になってきます。
OpenSSH Authentication Agentでは秘密鍵とパスフレーズのペアを登録することで、パスフレーズの入力を省くことが出来ます。
今回はパスフレーズの入力を省略する部分を設定していきます。
参考:【Windows】OpenSSH Authentication Agentを使用する
手順
- OpenSSH Authentication Agentを起動させる
- Windowsのサービスの画面を開く(ファイル名を指定して実行(ファイル名:services.msc))
- OpenSSH Authentication Agentを右クリックしプロパティを開く
- スタートアップの種類を"自動"に変更する
- サービスの状態が"停止"の場合は、開始する
- PowerShellなどで以下のコードを実行する(秘密鍵へのパスが異なる場合は適宜変更してください)
ssh-add "C:\Users\ユーザー名\.ssh\id_rsa"
- パスフレーズの入力を求められるためパスフレーズを入力する
補足
OpenSSHのバージョンによっては以下のエラーが出ます。
こちらはOpenSSHのバージョンが古い場合に出るみたいです。
warning: agent returned different signature type ssh-rsa (expected rsa-sha2-512)
azureuser@IPアドレス: Permission denied (publickey)
OpenSSHのバージョンは以下のコードで確認できます。
OpenSSHのバージョンが最新であるか、カギを作成した端末のバージョンとの差異があるかなど確認をして対処してください。
ssh -V