Visual Studio 2017(私の知る限り、GitのSSHをサポートしています)からSSHを使用して(Bitbucket上の)Gitリポジトリに接続しようとしています。私はすべてをセットアップし、リポジトリをコンピューターに複製し、コミットできますが、フェッチのようなことを行おうとすると、次のメッセージ(Visual Studioの[出力]ウィンドウから)で失敗します。
Error encountered while fetching: Git failed with a fatal error.
fatal: Could not read from remote repository.
コマンドプロンプトからそれを試してみると、これらのわずかに有益なメッセージが表示されます:
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
Git Bashから、SSHエージェントを開き、秘密鍵を追加して取得しようとしましたが、動作しているようです(または、エージェントが開始されていない場合やキーが追加されていない場合とは異なり、少なくともメッセージは表示されません):
eval `ssh-agent`
ssh-add ~/.ssh/xxxx
git fetch
ただし、Visual Studioはまだ接続できません。私もWindowsコマンドプロンプトから同じことをしようとしました:
ssh-agent
set SSH_AUTH_SOCK=/tmp/ssh-SIAryCa61iz9/agent.11128
set SSH_AGENT_PID=9804
ssh-add xxxx
git fetch
しかし、私はまだ同じエラーを受け取ります。
Bitbucketに既に公開キーを追加し、ssh -T [email protected]
は「xxxxとしてログイン」を出力します。また、SourceTreeを使用して、Pageantに秘密キーを追加して正しく接続できます(ssh-add
には必要なOpenSSH形式があるため、.ppk形式から作成しました。
_ssh-agent
_の代わりにPuTTYのPageant認証エージェントを使用して、ついにそれを機能させることができました-そして、言及された手順に従います here (Visual Studio Code用ですが、Visual Studio 2017用ですWindows用の「公式」Gitを使用するすべてのアプリケーションで機能するはずです。
すでにPageantをインストールし、.ppk秘密キーを作成したので、GIT_SSH
_ Windows環境変数を作成し、それを「plink.exe」ファイルのパスに設定することで、GitにPageantを使用させるだけでした。 PuTTYインストール、たとえばC:\Program Files (x86)\PuTTY\plink.exe
)。それが終わったら、Pageantを開いて秘密キーを追加するだけで(そしてリポジトリを操作している間は開いたままにします)、Visual Studioは接続してコマンドを正常に発行できるようになります。
別の方法があります.
vS2017はそれ自体でssh接続を実行するようですので、ssh-addが追加したキーを無視し、デフォルトのパスのキーのみを使用します
必要に応じて個別の秘密キーとキーのパスフレーズを処理するssh認証エージェントを使用して、SSHでVisual Studio(およびGit)を複数のリポジトリに接続できるソリューションを次に示します。
以下の手順を実行するために、コンピューターの管理者権限を必要としないため、企業ユーザーに適しています。
Bitbucketの例で説明されていますが、Githubなどに拡張できます。
プロジェクトを開くと、Visual StudioからGitパッケージのダウンロードとインストールを求められます。 Visual Studio通知で提供されるリンクを使用するか、またはこの link を使用してこれを行うことができます。
現在のユーザーのみにGitをインストールします。デフォルトでインストールオプションを使用します。
コマンドプロンプトを開き、見つけたフォルダーに移動します。
cd "%LOCALAPPDATA%\Programs\Git\usr\bin\"
キーが存在しない場合、キーを保存するフォルダーを作成します
mkdir "%HOME%\.ssh"
新しいsshキーを生成します。
ssh-keygen -t rsa -b 4096 -C "<your email of id>" -f "%HOME%/.ssh/id_rsa_<file name>"
例えば:
ssh-keygen -t rsa -b 4096 -C "nsm" -f "%HOME%/.ssh/id_rsa_nsm"
キーのパスフレーズを指定することをお勧めします。パスフレーズを忘れないでください。忘れた場合、パスフレーズを回復することはできません。
ssh-rsa AAAAB3Nza<skipped>BkPqxFQ== nsm
configファイルを "%HOME%/。ssh /"フォルダーに次の内容で作成します。
AddKeysToAgent yes
Host <Bitbucket FQDN or any label>
HostName <Bitbucket FQDN>
User git
IdentityFile ~/.ssh/id_rsa_<file name>
例えば:
cd %HOME%/.ssh/
type config
出力:
AddKeysToAgent yes
Host bitbucket.org
HostName bitbucket.org
User git
IdentityFile ~/.ssh/id_rsa_nsm
AddKeysToAgent yesオプションは、設定された秘密鍵をオンデマンドでssh認証エージェントに追加します
秘密鍵が使用されるたびにパスフレーズを入力するのは面倒な負担です。それを避けるために、ssh認証エージェントを使用します
Ssh-keygenユーティリティが見つかったフォルダー(デフォルトでは "%LOCALAPPDATA%\ Programs\Git\usr\bin \")で、作成ssh.cmdファイルには次の内容が含まれます。
@echo off
setlocal enabledelayedexpansion
::: File storing SSH_AUTH_SOCK and SSH_AGENT_PID of the running agent
set __ssh_agent=%HOME%/.ssh/agent.env
if exist %__ssh_agent% goto loadenv
:startagent
echo Starting SSH Authentication Agent...
ssh-agent > %__ssh_agent%
:loadenv
::: Loading the agent environment variables from 2 first lines of agent.env:
::: SSH_AUTH_SOCK and SSH_AGENT_PID
set /a __count=0
for /f "tokens=1 delims=;" %%a in (%__ssh_agent%) do (
if !__count! LSS 2 (
set %%a
set /a __count+=1
) else (
goto endloadenv
)
)
:endloadenv
::: Checking the agent is running
for /f "tokens=1 delims=, usebackq" %%a in (`TASKLIST /FI "PID eq %SSH_AGENT_PID%" /FO CSV /NH`) do (
if not %%a == "ssh-agent.exe" goto startagent
)
:startssh
::: Run ssh, passing to it all command line parameters
ssh.exe %*
このスクリプトは、ssh.exeが実行される前にssh認証エージェントをロードし、ssh.exeがSSH_AUTH_SOCK環境変数で指定されたソケットを介して通信できるようにします。
コマンドプロンプトから次のコマンドを実行します。
git config --global core.sshCommand '%LOCALAPPDATA%/Programs/Git/usr/bin/ssh.cmd'
リンク内のFQDNを./ ssh/configファイルで指定したラベルに置き換えます。これにより、BitbucketまたはGithubリポジトリに接続するときに、複数のキーで構成セクションを使用できるようになります
クローンオプションはSSHではなくURIのみを受け入れるため、VS 2017でGitリポジトリを構成する直接的な方法は見つかりませんでした。
私は次のことをしました:
Git Bashを使用してキーを生成すると、 here が見つかります。
VS2017で
私は同じ問題を抱えていました。私は解決のためにいくつかの方法を試しました:
しかし、私の問題を解決していません。そして"Visual Studio Installer"とrepaired。itを解決しました。
この方法は私のために働いた(VS 2017/Win7):