Visual Studio Codeからgithubを利用する – ①環境

Visual Studio Codeを利用して開発したソースコードをgithubで管理するためのあれこれを記事にしてみました。

この記事では、Visual Studio Codeでgitが扱えるようにセットアップを行います。ついでにbash環境も手にはいります。
(2020年4月に試した際の手順です)

githubのアカウントを作成する

githubのアカウントを持っていない場合はアカウントを作成します。

git for windowsのインストール

git for windowsをインストールします。オプションはデフォルトのままで良いかと。インストールパスを変更するとVisual Studio Codeが自動でgit bashなどを見つけられずに面倒になるかもしれません(参考記事)。

VS Codeのターミナルをgit bashに

Visual Studio Codeのターミナルをgit bashに変更します(bashの方が慣れてるし)。

まずはCommand Palletを開きます(CTRL+SHIFT+P)。そこへ、

>select default shell

と入力します(大なり記号ははじめから入力されています)。入力後エンターキーを押してこのコマンドを実行するとシェルの一覧が表示されます。そこにgit bashが出てきているはずなのでこれを選択します。

以降ターミナルを起動(CTRL+SHIFT+@)するとgit bashが起動するようになります。

Command Palletは補完機能があるので、途中までの入力でも、>sedeshのようないい加減な入力でもコマンドが実行できるので慣れるとすごく便利ですね。

鍵ペアを作成する

githubへアクセスする場合はssh接続が便利かなと思うので、ssh接続を行うための公開鍵と秘密鍵を作成します。

VS Codeからターミナル(git bash)を起動し、ssh-keygenコマンドを実行して鍵ペアを作成します。

ssh-keygen -t rsa -b 4096 -C "comment"

-Cオプションには、鍵を識別するための任意のコメントを指定してください。コマンドを実行するとファイルパスとパスフレーズについて質問を受けます。ここではファイルパスはデフォルトのまま、パスフレーズは省略せずに入力したものとして話をすすめます。

公開鍵をgithubに登録する

ブラウザでgithubへログインし、setting > SSH and GPG keysからSSHの公開鍵を登録します。New SSH keyボタンを押して、適当なタイトルと生成した公開鍵を入力します。

windowsの場合、git bashで以下のコマンドを実行して公開鍵をクリップボードにコピーし、それをそのままペーストするのが楽です。

clip < ~/.ssh/id_rsa.pub

疎通確認

githubにアクセスできるかどうかを確認してみます。

ssh -T git@github.com

コマンドを実行します。
するとfingerprintが表示され、続行しても良いかを聞かれます。正しいfingerprintはgithubのドキュメントに掲載されているので、表示されたfingerprintがドキュメントの内容と一致するかを比較します。
一致していたらyesと入力して続行しましょう。
(fingerprintの確認、結構スルーしちゃうんですよね・・・)

次はパスフレーズの入力を求められるので正しい値を入力します(鍵を生成した際にパスフレーズを指定した場合のみ)。

最後に、

Hi! [ユーザー名]! You've successfully authenticated, but GitHub does not provide shell access.

のように表示されたら疎通OKです。
githubのドキュメントも参考になります。

ssh-agentでパスフレーズの入力を省略

疎通は成功しましたが、パスフレーズを省略しない場合はこの後sshでアクセスする都度入力を求められます
さすがにそれは面倒なので、ssh-agentを使用して秘密鍵とパスフレーズを覚えてもらいます。

手動で実行する場合は、

eval `ssh-agent`

というコマンドを打ち込みます(evalコマンドでSSH_AGENT_PIDなどの環境変数が設定されます)。

次に、

ssh-add

コマンドを実行して秘密鍵をssh-agentに追加します。その際パスフレーズを効かれるので正しい値を入力しておきます。

この状態で再び疎通確認を行うと今度はパスフレーズを聞かれることなく疎通に成功します。

ssh-agentが不要になった場合は、

ssh-agent -k

というコマンドを実行すると、ssh-agentの終了と環境変数の後始末が行われます。

面倒なので・・・

毎回手動でssh-agentを起動するのは面倒なので、.bashrcに

SSH_AGENT_OUT=$HOME/.ssh-agent
test -f $SSH_AGENT_OUT && . $SSH_AGENT_OUT

ssh-add -l >/dev/null 2>&1
ret=$?
if [ $ret -eq 2 ] ; then
	ssh-agent > $SSH_AGENT_OUT
	. $SSH_AGENT_OUT
	ssh-add
elif [ $ret -eq 1 ] ; then
	ssh-add
fi
ssh-add -l

みたいな適当なスクリプトを組んで、bash起動時にssh-agentの起動とssh-addの実行を行うようにしています。

VS Codeでterminalを起動した場合は初回のみパスフレーズの入力を求め、2つめ以降のterminalを起動してもパスフレーズの入力は不要です。

この方式だとssh-agentが1プロセス常駐するので、不要になったらkillが必要です。

exec ssh-agent $SHELLというやり方も試してみたのですが、VS Codeのterminalから実行するとssh-agentのプロセスが浮く問題があったのでこちらは突き詰めませんでした。

ところでパスフレーズは必要なのか

原則指定した方が良いと思います。

ただ自分の場合、セキュリティが厳重な箇所に秘密鍵が置かれており、これを外部へ持ち出すこともないのであれば、パスフレーズを省略することもあります(面倒だもん)。

コメント

タイトルとURLをコピーしました