SSH鍵とは何か
SSH(Secure Shell)は、リモートサーバーに安全にアクセスするためのプロトコルであり、主にコマンドラインベースの作業に使用されます。SSH鍵は、このプロトコルを使用して認証を行うためのデジタル鍵ペアであり、公開鍵と秘密鍵の2つで構成されています。
- 公開鍵: サーバー側に登録される鍵であり、他者に公開しても問題ありません。
- 秘密鍵: クライアント側(通常はあなたのPC)に保存され、他者に知られてはいけない鍵です。
この2つの鍵を使用することで、パスワードの代わりに鍵による安全な接続が可能となります。SSH鍵認証は、特にパスワード認証と比べて安全性が高く、多くのクラウドサービスやサーバー管理において推奨されている認証方法です。
TeraTermとVS Codeの紹介
SSH接続を行う際、効率的で使いやすいツールを選ぶことが重要です。ここでは、TeraTermと**Visual Studio Code(VS Code)**という2つのツールを紹介します。
- TeraTerm: 日本で広く使われているターミナルエミュレーターであり、SSH接続を行うための標準的なツールです。TeraTermは、インターフェースが直感的で使いやすく、コマンドラインに不慣れな方でも簡単に鍵を生成し、接続を設定することができます。
- Visual Studio Code(VS Code): Microsoftが提供するコードエディタで、豊富な拡張機能を備えています。特に、Remote – SSH拡張機能を使用することで、SSH接続を通じてリモートサーバー上のファイルを直接編集したり、コマンドを実行したりすることが可能です。VS Codeは、プロジェクトのファイル管理や開発作業を効率化するためのツールとして非常に優れています。
これらのツールを活用することで、SSH鍵の生成から接続設定、そしてリモートサーバーでの作業が一貫して行えるようになります。次章では、具体的なSSH鍵の作成方法について説明していきます。
SSH鍵の作成方法
TeraTermを使用した簡単な鍵生成
まずは、TeraTermを使用してSSH鍵を生成する方法を紹介します。この方法は、コマンドを使用せずに簡単に鍵を生成できるため、コマンドラインに不慣れな方にも適しています。
- TeraTermの起動: TeraTermを起動します。メニューバーの「設定」から「SSH鍵生成」を選択します。
- 鍵の生成: 「SSH鍵生成」ウィンドウが表示されるので、以下の設定を行います。
- 鍵の種類:
RSA
(デフォルトで選択されていることが多い) - 鍵のビット長: デフォルトの2048ビットで問題ありませんが、必要に応じて変更できます。
- パスフレーズ: 鍵のセキュリティを強化するために任意のパスフレーズを入力します。パスフレーズを設定しない場合は空欄のままにします。
- 鍵の種類:
- 鍵の保存: 「生成」ボタンをクリックすると、鍵が生成されます。次に、秘密鍵と公開鍵を保存する場所を指定します。デフォルトでは、
id_rsa
という名前で.ssh
フォルダに保存されます。 - 公開鍵の確認: 「公開鍵の表示」ボタンをクリックすると、公開鍵が表示されます。これをコピーして、接続先のサーバーに登録します。
これで、TeraTermを使用したSSH鍵の生成が完了です。上記はTeraTermのメジャーアップグレードでED25519がデフォルトに変更になったので、SSH鍵の生成コマンドでED25519にチェックが入っています。ED25519はより高速で安全性が高いため、最近では推奨されることが多くなっています。またファイル名はid_ed25519.pub、id_ed25519になりました。
VS Codeを使ったSSH鍵の管理
次に、VS Codeを使用してSSH鍵を生成し、管理する方法を説明します。VS Codeの統合ターミナルを使うことで、プロジェクト内での鍵の管理が容易になります。
- VS Codeの起動: VS Codeを起動し、ターミナルを開きます。メニューバーの「ターミナル」から「新しいターミナル」を選択します。
- SSH鍵の生成: 以下のコマンドをターミナルに入力して、SSH鍵を生成します。
ssh-keygen -t rsa -b 2048 -C "your_email@example.com"
-t rsa
: 鍵のタイプをRSAに指定します。-b 2048
: 鍵のビット長を2048ビットに指定します。-C "your_email@example.com"
: 鍵に識別用のコメントを追加します。
- 保存場所の指定: プロンプトが表示されたら、鍵を保存する場所を指定します。デフォルトの場所(
~/.ssh/id_rsa
)に保存する場合は、Enterキーを押します。 - パスフレーズの設定: パスフレーズを設定するか、空欄のままEnterキーを押して設定をスキップします。
- 鍵の確認: 鍵が正常に生成されると、秘密鍵と公開鍵が指定した場所に保存されます。次に、公開鍵をサーバーにコピーすることで、SSH接続が可能になります。
ED25519が推奨される場合、SSH鍵の生成コマンドは少し異なります。ED25519はより高速で安全性が高いため、最近では推奨されることが多くなっています。
ED25519を使用してSSH鍵を生成する場合、コマンドは以下のようになります。
ssh-keygen -t ed25519 -C "your_email@example.com"
このコマンドでは、RSAのようにビット長を指定する必要がなく、-b 2048
オプションは不要です。また、ED25519は既に強力な暗号アルゴリズムであるため、デフォルトの設定で十分なセキュリティを提供します。
これで、VS Codeを使用したSSH鍵の生成と管理が完了しました。VS Codeは、リモートサーバー上のファイル編集やコマンド実行にも便利なツールなので、今後の作業も効率的に進めることができます。
公開鍵のサーバーへの登録
SSH鍵を生成したら、次に公開鍵をサーバーに登録する必要があります。これにより、サーバーとの安全な接続が可能になります。ここでは、TeraTermを使用した方法と、VS Codeの拡張機能を使用した方法を説明します。
TeraTermを使った鍵の登録
TeraTermを使用して公開鍵をサーバーに登録する手順を説明します。TeraTermでもRASやED25519を使用する場合でも、ディレクトリの作成や公開鍵の登録手順は同じです。
- TeraTermでサーバーに接続: TeraTermを起動し、SSHでサーバーに接続します。接続先のホスト名、ポート番号、ユーザー名を入力し、「接続」をクリックします。
- ホームディレクトリに移動: サーバーに接続したら、以下のコマンドを入力して、ユーザーのホームディレクトリに移動します。
cd ~
- .sshディレクトリの作成:
.ssh
ディレクトリが存在しない場合は、以下のコマンドで作成します。mkdir -p ~/.ssh
chmod 700 ~/.ssh
mkdir -p ~/.ssh
:.ssh
ディレクトリを作成します。chmod 700 ~/.ssh
: ディレクトリのアクセス権限を設定します。- ロリポップの場合、最初は
.ssh
ディレクトリは存在しませんでした。
- 公開鍵のファイル転送: TeraTermのメニューバーから「ファイル転送」を選び、「SCP」を選択します。次に、公開鍵ファイル(
id_rsa.pub
もしくはid_ed25519.pub
)を選択し、サーバーのホームディレクトリの.ssh
フォルダに転送します。 - 公開鍵の配置: SCPで転送された公開鍵ファイルを
.ssh
ディレクトリに移動し、authorized_keys
ファイルに追加します。以下のコマンドを実行します。cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
または、ED25519を使用する場合は次のコマンドを使用します。cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
:id_rsa.pub
の内容をauthorized_keys
に追加します。chmod 600 ~/.ssh/authorized_keys
:authorized_keys
ファイルのアクセス権限を設定します。
補足: 上記の手順では、公開鍵ファイルの名前が使用する鍵のタイプによって異なります。以下のようにファイル名が変わることに注意してください。
- RSA鍵を使用する場合: 公開鍵ファイルは
id_rsa.pub
、秘密鍵ファイルはid_rsa
になります。 - ED25519鍵を使用する場合: 公開鍵ファイルは
id_ed25519.pub
、秘密鍵ファイルはid_ed25519
になります。
これで、TeraTermを使った公開鍵の登録が完了します。自分はパスフレーズを作成しなかったので、ユーザー名と秘密鍵だけでログインできるようになりました。
VS Codeの拡張機能を使った簡単なサーバー接続
VS CodeのRemote – SSH拡張機能を使用して、サーバーに公開鍵を登録し、接続する手順を説明します。
- Remote – SSH拡張機能のインストール: VS Codeの拡張機能マーケットプレイスから「Remote – SSH」をインストールします。
- リモートサーバーへの接続設定: VS Codeのコマンドパレット(
Ctrl + Shift + P
)を開き、「Remote-SSH: Connect to Host…」を選択します。接続先のホスト情報を入力し、接続を開始します。 - 公開鍵の自動登録: VS Codeは、初回接続時に自動的に公開鍵をサーバーにコピーします。手動で公開鍵を設定する必要がないため、非常に簡単です。
- 接続の確認: 接続が成功すると、VS Codeのエディタでリモートサーバー上のファイルを直接編集したり、ターミナルを使ってコマンドを実行できるようになります。
- 公開鍵の手動登録: もし手動で公開鍵を登録する必要がある場合は、VS Codeのターミナルから以下のコマンドを実行し、公開鍵を
authorized_keys
に追加します。cat ~/.ssh/id_rsa.pub | ssh user@hostname "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
これで、VS CodeのRemote – SSH拡張機能を使ったリモートサーバーへの接続と公開鍵の登録が完了しました。VS Codeを使用すると、サーバーとの接続が非常に簡単かつ効率的に行えるため、特にプロジェクトの管理や開発作業には非常に有用です。
.ssh/configファイルの活用
SSH接続を頻繁に行う場合、毎回ホスト名やユーザー名、鍵のパスを入力するのは手間がかかります。そこで、SSHの設定を簡略化するために、.ssh/configファイルを活用することをお勧めします。このファイルに接続情報を事前に設定しておくことで、非常に簡単にサーバーに接続できるようになります。
.ssh/configファイルの基本構成
まず、.ssh/config
ファイルが存在しない場合は、以下のコマンドで作成します。
touch ~/.ssh/config
chmod 600 ~/.ssh/config
touch ~/.ssh/config
:config
ファイルを作成します。chmod 600 ~/.ssh/config
: ファイルのアクセス権限を設定します。
次に、テキストエディタ(例えば、VS CodeやNanoなど)で.ssh/config
ファイルを開きます。以下のような設定を追加します。
Host 任意の接続名
HostName サーバーのホスト名またはIPアドレス
User ユーザー名
Port ポート番号 (通常は22)
IdentityFile ~/.ssh/使用する秘密鍵のファイル名
例:
例えば、次のように設定するとします。
Host myserver
HostName 192.168.1.100
User ubuntu
Port 22
IdentityFile ~/.ssh/id_ed25519
この設定を保存した後、サーバーに接続する際は、単に以下のコマンドを入力するだけで済みます。
ssh myserver
これで、myserver
というエイリアスを使用して、設定されたホストに簡単に接続できるようになります。
複数のサーバーを管理する場合
複数のサーバーを管理している場合、それぞれのサーバーに異なる設定を追加することも可能です。例えば、次のように複数のエントリを追加できます。
Host server1
HostName 192.168.1.101
User ubuntu
IdentityFile ~/.ssh/id_rsa
Host server2
HostName example.com
User admin
IdentityFile ~/.ssh/id_ed25519
このように設定しておくことで、サーバーごとに異なる接続方法を簡単に管理できます。
.ssh/configファイルを使うメリット
- 簡略化: 接続時に入力する情報を最小限に抑えることができ、ミスを減らせます。
- 管理の容易さ: 複数のサーバーの設定を一元管理でき、使い分けが簡単になります。
- セキュリティの向上: 鍵の管理が明確になり、セキュリティの強化にもつながります。
そしてVSCodeのプラグインを利用してさらに便利に接続する方法が以下になります。
まとめ
この記事では、SSH鍵の生成から公開鍵のサーバーへの登録、そして.ssh/config
ファイルの活用までを段階的に説明しました。これらの手順を踏むことで、SSH接続をより効率的かつ安全に行うことが可能になります。
- SSH鍵の生成: TeraTermやVS Codeを使って、簡単にSSH鍵を生成できます。ED25519が推奨されており、強力なセキュリティを提供します。
- 公開鍵のサーバーへの登録: TeraTermのSCP機能やVS CodeのRemote-SSH拡張機能を使用して、公開鍵を簡単にサーバーに登録できます。
- .ssh/configファイルの活用: 接続設定をエイリアスとして登録しておくことで、接続時の手間を大幅に軽減できます。これにより、頻繁にサーバーにアクセスする必要がある場合でも、スムーズに作業を進められます。
これらの手順を理解し実践することで、SSHを利用したリモート接続が格段に効率化されます。特に、複数のサーバーを管理する場合や、セキュリティを重視する環境では、この方法が大いに役立つでしょう。
れます。特に、複数のサーバーを管理する場合や、セキュリティを重視する環境では、この方法が大いに役立つでしょう。
事例として
先日、Google Cloudのインスタンス作成時に、OSとしてUbuntu 22.04が追加されていました。Ubuntu 20.04と同様にしてSSH接続の設定を行ったところ、TeraTermを使用してもログインできませんでした。設定ミスがあると考え何度か試みましたが、接続は成功しませんでした。
その後、Oracle Cloudでも同様に試してみましたが、接続ができない状態が続きました。調査を進めた結果、Ubuntu 22.04の仕様変更により、SSH接続で使用するssh-rsa
がデフォルトで無効になっていることが判明しました。LAN内では鍵を使用せずパスワードでログインしていたため、この変更点を見落としていました。
この問題を解決するためには、以下の手順を実行します。自宅のWindows端末で作業を行い、PowerShellを開いて次のコマンドを入力します。Oracle Cloudではインスタンス作成時に公開鍵と秘密鍵を保存することができます。
ssh -i 秘密鍵の存在するパス+鍵のファイル名 ubuntu@外部IPアドレス
実際の例:
ssh -i C:\Users\minok\OneDrive\ドキュメント\oracle\ssh-key.key ubuntu@140.34.56.78
鍵の場所が複雑な階層にある場合は、一度エクスプローラを開いてアドレスをテキストとしてコピーしておきます。または、Cドライブ直下など簡単な場所にファイルを移動しておくと便利です。接続時に以下のメッセージが表示された場合は、「yes」と入力します。
ECDSA key fingerprint is SHA256:
Are you sure you want to continue connecting (yes/no/[fingerprint])?
ログインに成功したら、ルートユーザーに切り替えて以下のsed
コマンドを実行します。このコマンドは、/etc/ssh/sshd_config
ファイルにPubkeyAcceptedAlgorithms=+ssh-rsa
という設定を追加します。
sudo su -
sed -i '1s/^/PubkeyAcceptedAlgorithms=+ssh-rsa\n/' /etc/ssh/sshd_config
設定を反映させるために、SSHサービスを再起動します。
systemctl restart ssh.service
これでTeraTermを使用して鍵でログインできるようになります。
なお、この問題はUbuntu 24.04では解消されており、デフォルトの設定でもSSH接続が可能です。しかし、旧バージョンを使用している場合や、既に設定を変更してしまっている場合には、上記の手順を参考に問題を解決してください。