こんにちは、現役エンジニアの inno_tech です。
以前の記事では、Azure DevOpsのgit認証エラー対策としてhttps接続用のPersonal Access Token(PAT)を発行する方法を紹介しました。
とはいえ、毎回リポジトリと接続するたびにPATを生成するというのも不便です。
そこで今回は、Azure DevOpsにSSH接続するための設定方法を紹介します。
一度SSHの認証をすれば、sshキーを登録したデバイスからは自動認証で接続が可能となり、PATを発行する手間がなくなります。
SSH接続までのステップは3stepです。それでは説明をご覧ください。
(本記事は ubuntu20.04LTSの環境で検証しています。)
step1. SSHキーの作成
まずは ssh-keygen コマンドを使ってsshキーを作成します。
-tオプションで暗号化のアルゴリズムを指定しますが、RSAという方式で生成してください。
近年では Ed25519方式等のセキュリティを強化した方式もありますが、Azure DevOps側が対応していません。
(参考: https://docs.microsoft.com/ja-jp/troubleshoot/azure/virtual-machines/ed25519-ssh-keys)
SSHプロトコルを使用するために、OpenSSHというSSH接続用ツールをインストールし、その後 SSHキーを作成していきます。
# OpenSSH serverのインストール
sudo apt-get install openssh-server
# RSA方式のアルゴリズムに対応したキーを作成
# -f: ファイル名
# -C: コメント
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -C "your_email@example.com"
## 下記が表示されたらパスワードを入力
Generating public/private rsakey pair.
Enter passphrase (empty for no passphrase):
# 下記が表示されたら、もう一度同じパスワードを入力
Enter same passphrase again:
# 秘密鍵 my_ssh_key, 公開鍵 my_ssh_key.pub の2ファイルが生成される
Your identification has been saved in /home/[username]/.ssh/id_rsa
Your public key has been saved in /home/[username]/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:・・・
注意点として、鍵の生成時に入力したパスワードは忘れないようにしましょう。
ここまでで秘密鍵(id_rsa)と公開鍵(id_rsa.pub)の2つのファイルが生成されました。
秘密鍵 は暗号化通信を復号するためのファイルで、他人に渡したりしてはいけません。
使用者以外に流出すると、悪意ある第三者に通信が解読される可能性があります。
なお、公開鍵 は暗号化時のみ使用するファイルで、他人に知られても問題ありません。
step2. SSHキー(秘密鍵)をssh-agentに登録
ssh-agent(今回の場合、OpenSSH)に対し、秘密鍵ファイルを登録します。
# 先ほど作成した秘密鍵ファイル を登録
ssh-add ~/.ssh/id_rsa
# パスワードを聞かれるので、sshキー作成時のパスワードを入力
Enter passphrase for /home/[username]/.ssh/id_rsa:
# Identity added と表示されればOK
Identity added: /home/[username]/.ssh/id_rsa
# 登録された鍵(finger print)を確認するコマンド
ssh-add -l
以上でPC側の設定は完了です。
step3. Azure DevOpsにSSHキー(公開鍵)を登録
続いて、Azure DevOps(リモート接続先)にSSHキーの公開鍵を登録します。
Azure DevOpsにログイン後、User settingから「SSH public keys」の設定を開きます。
SSH Public Keyの登録画面で、「New Key」をクリックします。
登録する公開鍵の中身を確認するため、一旦ターミナルに戻ります。
catコマンドで 公開鍵(.pub)の内容を表示し、その文字列全文をクリップボードにコピーします。(秘密鍵ではないので注意)
# 先ほど作成した公開鍵ファイル を表示
cat ~/.ssh/id_rsa.pub
# 表示される長い文字列をコピー(ssh-rsa~末尾まですべて)
ssh-rsa AXXXX・・・・
Azure DevOpsの画面に戻り、下記のように公開鍵を設定してAddを押下します。
- Name: 登録する鍵の名前です。自由に設定して構いません。
- Public Key Data: 確認した公開鍵の文字列データを貼り付けます。
正常に登録できれば、公開鍵の一覧に登録したSSHキーが追加されるはずです。
以上でAzure DevOps側の設定は完了です。
SSH接続テスト
SSH接続の準備ができたら、早速Azure DevOpsに接続してみましょう。
SSH接続用URLの確認
Azure DevOps > Repos の画面にCloneボタンがあるのでクリックします。
Clone Repository の画面が表示され、クローン用URLが表示されます。
SSHのボタンをクリックし、そのURLをコピーしましょう。
すでにClone済みのリポジトリがある場合
なお、https接続でClone済みリポジトリがある場合、リモートリポジトリのURLをssh接続用に変更する必要があります。
こちらの記事にやり方をまとめたのでご覧ください。
テスト接続
早速テスト接続してみましょう。正しいペアの秘密鍵・公開鍵が登録できていれば、接続できるはずです。
なお、初回接続時のみ「Are you sure you want to continue connecting (yes/no/[fingerprint])?」と表示されます。この場合「yes」と入力してください。
2回目以降は、~/.ssh/known_hostsファイルに接続済みホストとして登録されるので上記メッセージが表示されなくなります。
# 試しにclone
git clone [リポジトリurl]
# 初回接続時は、下記のようなメッセージが表示される
The authenticity of host 'vs-ssh.visualstudio.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxx.
# 接続してよいかを確認されるため、yes を押下する
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'vs-ssh.visualstudio.com,xx.xx.xx.xx' (RSA) to the list of known hosts.
...
# ~/.ssh/known_hosts に接続経験のあるホストとして公開鍵情報が登録される
# 下記コマンドで確認可能
cat ~/.ssh/known_hosts
最後に
今回はSSH接続の設定方法を説明しました。
SSH接続ではペアとなる鍵を用意し、PC(秘密鍵)とリモート接続先(公開鍵)の両方でそれぞれ鍵を持つことで、暗号化された通信を実現します。
このあたりの暗号化通信に関する知識は国家資格である「情報処理安全確保支援士」の中で学習できますよ。
話は変わりますが、プログラミングを習得したい, 仲間が欲しい人は、プログラミングスクールに通うのがおすすめです。
自己学習でかかるコストを考えると十分元が取れると思います。
少しでも興味があれば、まずは無料のオリエンテーションを受講し、自分に合うか試してみるのがよいでしょう。
まずは一歩行動して、将来の自分に楽をさせてあげましょう。
参考になったでしょうか。
ほかにも役立つ情報が他のページにもあるかもしれません。
ご覧いただいても、ご覧いただかなくてもどちらでもどうぞ!
この記事がイイねと思ったら、Twitterフォロー か にほんブログ村のどちらかしてくれたら嬉しいよ!
コメント / ご要望