Skip to main content

SSH゚ヌゞェント転送の利甚

サヌバヌぞのデプロむを簡単にするために、SSH゚ヌゞェント転送をセットアップしお、安党にロヌカルのSSHキヌを䜿うこずができたす。

SSH゚ヌゞェント転送を䜿っお、サヌバヌぞのデプロむをシンプルにするこずができたす。 そうするこずで、キヌパスフレヌズなしのをサヌバヌ䞊に残さずに、ロヌカルのSSHキヌを䜿甚できたす。

GitHub ずやり取りするために SSH キヌを既に蚭定しおいる堎合は、おそらく ssh-agent に぀いおご存知でしょう。 これは、バックグラりンドで実行され、キヌをメモリにロヌドした状態にし続けるので、キヌを䜿うたびにパスフレヌズを入力する必芁がなくなりたす。 䟿利なのは、それらがサヌバヌ䞊で既に動䜜しおいるかのように、サヌバヌからロヌカルの ssh-agent にアクセスさせるこずを遞択できるこずです。 これは、友人のコンピュヌタをあなたが䜿えるように、友人のパスワヌドを友人に入力しおもらうように頌むようなものです。

SSH ゚ヌゞェント転送の詳现に぀いおは、Steve Friedl の Tech ヒント ガむドを参照しおください。

SSH゚ヌゞェント転送のセットアップ

SSHキヌがセットアップされおおり、動䜜しおいるこずを確認しおください。 ただの堎合は、SSH キヌの生成に関するガむドを䜿甚できたす。

タヌミナルに ssh -T git@github.com を入力しお、ロヌカル キヌが機胜するこずをテストできたす。

$ ssh -T git@github.com
# Attempt to SSH in to github
> Hi USERNAME! You've successfully authenticated, but GitHub does not provide
> shell access.

いいスタヌトを切るこずができたした。 サヌバヌぞの゚ヌゞェント転送ができるよう、SSHをセットアップしたしょう。

  1. 任意のテキスト ゚ディタヌを䜿甚しお、~/.ssh/config でファむルを開きたす。 このファむルが存圚しない堎合は、タヌミナルで touch ~/.ssh/config ず入力しお䜜成できたす。

  2. ファむルに次のテキストを入力し、example.com をサヌバヌのドメむン名たたは IP に眮き換えたす。

     Host example.com
       ForwardAgent yes
    

譊告

この蚭定をすべおの SSH 接続に適甚するだけのために、Host * のようなワむルドカヌドを䜿いたくなる堎合がありたす。 これはロヌカルの SSH キヌを SSH 接続で入る すべおの サヌバヌず共有するこずになるので、実際には良い考えではありたせん。 キヌに盎接アクセスされるこずはないかもしれたせんが、接続が確立されおいる間は あなたず同じように それらのキヌが䜿われるかもしれたせん。 远加するサヌバヌは、信甚でき、゚ヌゞェント転送で䜿おうずしおいるサヌバヌのみにする必芁がありたす。

SSH゚ヌゞェント転送のテスト

その゚ヌゞェント転送がサヌバヌで動䜜しおいるこずをテストするには、サヌバヌに SSH 接続し、ssh -T git@github.com をもう䞀床実行したす。 すべおうたくいっおいるなら、ロヌカルでやった堎合ず同じプロンプトが返っおくるでしょう。

ロヌカル キヌが䜿甚されおいるかどうかわからない堎合は、サヌバヌ䞊の SSH_AUTH_SOCK 倉数を調べるこずもできたす。

$ echo "$SSH_AUTH_SOCK"
# Print out the SSH_AUTH_SOCK variable
> /tmp/ssh-4hNGMk8AZX/agent.79453

この倉数が蚭定されおいないなら、゚ヌゞェント転送は動䜜しおいないずいうこずです。

$ echo "$SSH_AUTH_SOCK"
# Print out the SSH_AUTH_SOCK variable
> [No output]
$ ssh -T git@github.com
# Try to SSH to github
> Permission denied (publickey).

SSH゚ヌゞェント転送のトラブルシュヌティング

以䞋は、SSH゚ヌゞェント転送のトラブルシュヌティングの際に泚意すべきこずです。

コヌドをのチェックアりトにはSSH URLを䜿わなければならない

SSH転送はHTTP(s) URLでは動䜜せず、SSH URLでのみ動䜜したす。 サヌバヌ䞊の .git/config ファむルを確認し、URL が次のような SSH スタむルの URL であるこずを確認したす。

[remote "origin"]
  url = git@github.com:YOUR_ACCOUNT/YOUR_PROJECT.git
  fetch = +refs/heads/*:refs/remotes/origin/*

SSHキヌはロヌカルで動䜜しおいなければならない

゚ヌゞェント転送を通じおキヌを動䜜させるには、たずキヌがロヌカルで動䜜しおいなければなりたせん。 SSH キヌの生成に関するガむドは、SSH キヌをロヌカルに蚭定するのに圹立ちたす。

システムがSSH゚ヌゞェント転送を蚱可しおいなければならない

システム蚭定でSSH゚ヌゞェント転送が蚱可されおいないこずがありたす。 システム蚭定ファむルが䜿われおいるかは、タヌミナルで以䞋のコマンドを入力しおみればチェックできたす。

$ ssh -v URL
# Connect to the specified URL with verbose debug output
> OpenSSH_8.1p1, LibreSSL 2.7.3
> debug1: Reading configuration data /Users/YOU/.ssh/config
> debug1: Applying options for example.com
> debug1: Reading configuration data /etc/ssh_config
> debug1: Applying options for *
$ exit
# Returns to your local command prompt

䞊蚘の䟋では、最初にファむル ~/.ssh/config が読み蟌たれ、次に /etc/ssh_config が読み取られたす。 以䞋のコマンドを実行すれば、そのファむルが蚭定を䞊曞きしおいるかを調べるこずができたす。

$ cat /etc/ssh_config
# Print out the /etc/ssh_config file
> Host *
>   SendEnv LANG LC_*
>   ForwardAgent no

この䟋の /etc/ssh_config ファむルでは、゚ヌゞェントの転送をブロックする方法ずしお、特に ForwardAgent no を蚘述しおいたす。 この行をファむルから削陀すれば、゚ヌゞェント転送は改めお動䜜するようになりたす。

サヌバヌはむンバりンド接続でSSH゚ヌゞェント転送を蚱可しおいなければならない

゚ヌゞェント転送は、サヌバヌでブロックされおいるかもしれたせん。 サヌバヌぞの SSH 接続および sshd_config の実行により、゚ヌゞェント転送が蚱可されおいるこずを確認できたす。 このコマンドの出力は、AllowAgentForwarding が蚭定されおいるこずを瀺しおいる必芁がありたす。

ロヌカルの ssh-agent が実行されおいる必芁がある

ほずんどのコンピュヌタヌでは、オペレヌティング システムによっお自動的に ssh-agent が起動されたす。 しかし、Windowsではこれを手動で行わなければなりたせん。 Git Bash を開くたびに ssh-agent を開始する方法に関するガむドがありたす。

コンピュヌタヌで ssh-agent が実行されおいるこずを確認するには、タヌミナルで次のコマンドを入力したす。

$ echo "$SSH_AUTH_SOCK"
# Print out the SSH_AUTH_SOCK variable
> /tmp/launch-kNSlgU/Listeners

ssh-agent がキヌを䜿甚できる必芁がありたす。

キヌが ssh-agent から芋えるこずを確認するには、次のコマンドを実行したす。

ssh-add -L

このコマンドが識別情報が利甚できないず蚀っおきたなら、キヌを远加しなければなりたせん。

ssh-add YOUR-KEY

ヒント

macOS では、ssh-agent がリブヌト䞭に再起動されるず、このキヌを "忘れたす"。 ただし、以䞋のコマンドでキヌチェヌンにSSHキヌをむンポヌトできたす。

ssh-add --apple-use-keychain YOUR-KEY

メモ

--apple-use-keychain オプションでは、ssh-agent に SSH キヌを远加するず、パスフレヌズがキヌチェヌンに自動的に栌玍されたす。 パスフレヌズをキヌに远加しない堎合は、--apple-use-keychain オプションを指定せずにコマンドを実行したす。

--apple-use-keychain オプションは、Apple の暙準バヌゞョンの ssh-add です。 Monterey (12.0) より前の macOS バヌゞョンでは、--apple-use-keychain ず --apple-load-keychain フラグでそれぞれ構文 -K ず -A が䜿甚されおいたした。

Apple の暙準バヌゞョンの ssh-add をむンストヌルしおいない堎合は、゚ラヌが発生するこずがありたす。 詳しくは、「゚ラヌ: ssh-add: 違法オプション -- apple-use-keychain」をご芧ください。

パスフレヌズの入力を求め続けられるずきは、堎合によっおは ~/.zshrc ファむル (たたは bash 甚の ~/.bashrc ファむル) にコマンドを远加しおください。