Android StudioはVCS(Version Control System:バージョン管理システム)を使って、プロジェクトの変更履歴の管理が可能です。
Android Studioで利用可能なVCSはいくつかありますが、Gitを取り上げて、SSHを使ったリポジトリのクローン(コピー)とプル(履歴の取得)の方法を紹介します。
※環境:Android Studio Electric Eel | 2022.1.1
※前提:リモートリポジトリの構築済み
目次
SSH(セキュアシェル)とは
SSHの概要をまとめます。
詳細はネット上に公開されている記事や書籍を参照してください。
SSHプロトコル
SSH(Secure SHellの略)は「正当なサーバとクライアント間で、暗号化された通信経路を確立する」ためのプロトコルです。
プロトコルは図に示すような手順を踏みます。
Diffie-Hellman鍵交換法
確立した通信経路で利用される暗号化の方式は「共通鍵暗号化方式」になります。
ですので、通信を始める前に送信側と受信側で暗号鍵を共有しなければなりません。
この暗号鍵(共通鍵)の共有に使われるのが「Diffie-Hellman鍵交換法」です。
しかし、「Diffie-Hellman鍵交換法」は鍵を交換する相手を確認しません。よって、第三者攻撃に無防備とういう欠点を持ちます。
この欠点を補うために、サーバーとクライアント間で、ホスト認証とユーザ認証を行います。
ホスト認証
ホスト認証とは、クライアントがサーバーの正当性を確認することです。
「公開鍵認証」を用いて行われます。
認証に先立って、公開鍵をクライアント(認証する側)へ渡しておく必要がある点に注意してください。※図中の0番がそれに当たる
ユーザー認証
ユーザー認証とは、サーバーがクライアントの正当性を確認することです。
SSHは複数の認証方法をサポートしており、選択が可能になっています。
Bitbucketでは、「公開鍵認証」を用いて行われます。
認証に先立って、公開鍵をサーバー(認証する側)へ渡しておく必要がある点に注意してください。※図中の0番がそれに当たる
OpenSSH
OpenSSHはSSHプロトコルを実装したライブラリ(SDK)とコマンド(ssh,scpなど)群を一つにまとめたツールです。
パッケージマネージャ(WindowsのwingetやLinuxのaptなど)を利用してインストールできるように、配布が行われています。
パッケージは「OpenSSHサーバー」と「OpenSSHクライアント」に分割して管理されています。クライアントの機能を使うのであれば、後者のみのインストールで十分です。
OpenSSHはセキュリティに直結する機能です。ですので、常に最新バージョンの利用をお勧めします。
SSHによるアクセス
BitbucketにおけるSSHを使ったアクセスは、次のような特徴があります。
(※「Set up Repository Access keys on Windows」より抜粋
・Grant read-only access to a public or private repository. (リポジトリへ読み出し専用アクセスを許可する) ・Don't require additional users on your plan. (アクセスの為に追加のユーザを要求しない) ・Can be added to multiple repositories. (複数のリポジトリへ追加できる) ・Can't also be associated with an account. (アカウントに関連付けされない) ・Don't require a passphrase when used for automated processes. (自動化された処理に使われる時、パスフレーズを要求しない)
重要なのは、Bitbucketのアカウントを持たなくても、アクセスキー(SSHの公開鍵)の登録があれば、アクセスが可能な点です。
ただし、読み出し専用です。実行できるGit処理はクローン(Clone)とプル(Pull)のみになります。
ですので、SSHアクセスは、次のような「読み出し専用でも成り立つ用途」が考えられます。
・CIのビルドシステムからの参照
・開発プロジェクトの検証チームからの参照
※CI:Continuous Integration(継続的インテグレーション)
openSSHのインストール確認
Windows11(Windows10も同じ)はOpenSSHをオプション機能という形で提供します。
しかも、OpenSSHクライアントはWindowsのインストール時に実装(インストール)済みになっています。
Windowsのターミナルを開き、次のコマンドの実行で、実装されたOpneSSHの存在を確認できます。
> ssh -V
OpenSSH_for_Windows_8.6p1, LibreSSL 3.4.3
公開鍵・秘密鍵の作成
ユーザ認証で使用するペア鍵(公開鍵・秘密鍵)を作成します。
Windowsのターミナルを開き、OpenSSHクライアントに含まれるssh-keygenコマンドを使って、次のように行います。
この例は、暗号化アルゴリズム ed25519 を選択しました。
> ssh-keygen -t ed25519 Generating public/private ed25519 key pair. Enter file in which to save the key (C:\Users\user_a/.ssh/id_ed25519): [RET] Enter passphrase (empty for no passphrase): パスフレーズ Enter same passphrase again: パスフレーズ Your identification has been saved in C:\Users\user_a/.ssh/id_ed25519 ... 秘密鍵 Your public key has been saved in C:\Users\user_a/.ssh/id_ed25519.pub ... 公開鍵 The key fingerprint is: SHA256:P1***************************************dk user_a@hostname The key's randomart image is: +--[ED25519 256]--+ | .oo+=*O+ | | .oo=E* o.o o| | ...oB o o =+| | o* . = o *| | o+S. o.+ o+| | . ...... o| | + o .| | o . . | | | +----[SHA256]-----+
ペア鍵はデフォルトでホーム(C:\Users\ユーザー名)の.sshフォルダに「”id_”+アルゴリズム名」というファイル名で出力します。このフォルダとファイルがデフォルトで参照される鍵になります。
秘密鍵は他者へ知られないよう厳重に管理してください。.sshフォルダのアクセス許可の範囲(ファイルバーミッション)を制限するのが良いでしょう!
また、秘密鍵は他者へ漏洩した場合を考慮して、パスフレーズによる暗号化が施されます。
ですので、ユーザ認証を行う際に、パスフレーズの入力が求められることになります。
フォルダ:ユーザのホームの.sshフォルダ Windows ⇒ C:\Users\ユーザー名 Linux ⇒ ~/.ssh ファイル:"id_" + アルゴリズム名
デフォルト以外の鍵を参照したければ、.ssh/configファイルで明示的に指定します。
Host bitbucket.org IdentityFile ~/.ssh/キーファイル名
公開鍵の登録
ユーザ認証で使用する公開鍵をサーバーへ登録します。
各々の階層(リポジトリ・プロジェクト・ワークスペース)に登録が可能です。登録された階層により、対象になるリポジトリの範囲が異なるので注意してください。
公開鍵の登録先 | 対象になるリポジトリの範囲 |
---|---|
リポジトリ | リポジトリのみ |
プロジェクト | プロジェクト以下のリポジトリ |
ワークスペース | ワークスペース以下のリポジトリ |
「Add SSH key」ウィンドウが開くので、コピー&ペーストでKey情報を入力します。Labelは識別のための名前なので、任意な文字列を指定します。
「Add SSH key」ボタンの押下で登録です。
公開鍵の登録後、ワークスペースの所有者宛にE-Mailで通知が届きます。
ですが…
個人の開発環境は、「管理者=ユーザー(開発者)」である事がほとんどです。結局のところ、ユーザ自身で行うことになります。
クローン(Clone)の実施
リポジトリのクローンを行う方法は、次の2通りがあります。
「Clone」ボタンの押下でクローンが実行されます。
FingerPrintはBitbuckerの「Configure SSH and two-step verification」に掲載されています。
「Yes」ボタンを押下で認証が成立します。
認証が成立すると、認証済みの公開鍵がknown_hostsファイルに登録されます。次回以降は、このファイルを参照して認証が行われるようになります。ですので、FingerPrintの確認は求められません。
ペア鍵を作成した時に設定したパスフレーズを入力します。
ここで、「Remember」へチェックを行えば、Android Studio内にパスフレーズが記録(KeePassにより管理)できます。次回以降は、Android Studioがパスフレーズの入力を肩代わりしてくれるので、入力は求められません。
※KeePass:Android Studioで採用されているパスワードマネージャー
プル(Pull)の実施
リモートリポジトリから最新の履歴が取得できます。
プルの実行
リポジトリのプルは「Git」メニューから行います。
「Pull」ボタンの押下でプルが実行されます。
リモートの定義
クローン後のAndroid Studioプロジェクトはリモートリポジトリが定義されています。
> git config --local --list core.repositoryformatversion=0 core.filemode=false core.bare=false core.logallrefupdates=true core.symlinks=false core.ignorecase=true submodule.active=. remote.origin.url=git@bitbucket.org:gittestroom/sampleapp.git remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* branch.master.remote=origin branch.master.merge=refs/heads/master
ただし、クローンを行った時に指定したURLがそのまま定義されます。
ですので、リモートリポジトリへのアクセスは読み出し専用になっています。
関連記事: