web-dev-qa-db-ja.com

Visual Studio 2017を使用してSSHでGitリポジトリに接続する

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形式から作成しました。

14
Trisibo

_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は接続してコマンドを正常に発行できるようになります。

19
Trisibo

別の方法があります.

  1. gitリポジトリに接続するには、ssh.exeなどの別のsshクライアントを使用します。接続を受け入れます。 known_hostsファイルが生成されます。
  2. known_hostsおよびid_rsaファイルをC:\ Users\[UserName] \。ssh \にコピーします
  3. できたstart-ssh-agentがなくても。

vS2017はそれ自体でssh接続を実行するようですので、ssh-addが追加したキーを無視し、デフォルトのパスのキーのみを使用します

7
Raven

必要に応じて個別の秘密キーとキーのパスフレーズを処理するssh認証エージェントを使用して、SSHでVisual Studio(およびGit)を複数のリポジトリに接続できるソリューションを次に示します。

以下の手順を実行するために、コンピューターの管理者権限を必要としないため、企業ユーザーに適しています。

Bitbucketの例で説明されていますが、Githubなどに拡張できます。

前提条件

  • Visual Studioをインストールしました
  • Bitbucketアカウント

Gitをダウンロードしてインストールする

プロジェクトを開くと、Visual StudioからGitパッケージのダウンロードとインストールを求められます。 Visual Studio通知で提供されるリンクを使用するか、またはこの link を使用してこれを行うことができます。

現在のユーザーのみにGitをインストールします。デフォルトでインストールオプションを使用します。

秘密/公開鍵ペアを生成します

  1. Ssh-keygen.exeアプリケーションでGitフォルダーを見つけます。デフォルトでは: "%LOCALAPPDATA%\ Programs\Git\usr\bin \"例: "C:\ Users\NSM\AppData\Local\Programs\Git\usr\bin\"
  2. コマンドプロンプトを開き、見つけたフォルダーに移動します。

    cd "%LOCALAPPDATA%\Programs\Git\usr\bin\"
    
  3. キーが存在しない場合、キーを保存するフォルダーを作成します

    mkdir "%HOME%\.ssh"
    
  4. 新しい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"
    

    キーのパスフレーズを指定することをお勧めします。パスフレーズを忘れないでください。忘れた場合、パスフレーズを回復することはできません。

Bitbucketに公開キーを追加します

  1. Bitbucketアカウント管理ページを開きます
  2. SSHキーセクションを開き、キーの追加をクリックします
  3. 生成された公開キーのコンテンツを "%HOME%/。ssh /"フォルダーからコピーして貼り付けます。例:id_rsa_nsm.pubssh-rsa AAAAB3Nza<skipped>BkPqxFQ== nsm
  4. Add keyボタンをクリックして、公開鍵を送信します

Bitbucketソースコードリクエストにキーを使用するようにsshを構成します

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認証エージェントを使用するようにGitを構成する

秘密鍵が使用されるたびにパスフレーズを入力するのは面倒な負担です。それを避けるために、ssh認証エージェントを使用します

  1. 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環境変数で指定されたソケットを介して通信できるようにします。

  2. コマンドプロンプトから次のコマンドを実行します。

    git config --global core.sshCommand '%LOCALAPPDATA%/Programs/Git/usr/bin/ssh.cmd'
    

Bitbucketが提供するリンクを使用して、ローカルリポジトリのリモートを作成します

リンク内のFQDNを./ ssh/configファイルで指定したラベルに置き換えます。これにより、BitbucketまたはGithubリポジトリに接続するときに、複数のキーで構成セクションを使用できるようになります

出来た

4
Sergey Nudnov

クローンオプションはSSHではなくURIのみを受け入れるため、VS 2017でGitリポジトリを構成する直接的な方法は見つかりませんでした。

私は次のことをしました:

  1. Git Bashを使用してSSHキーを生成し、GitサーバーをGit bashによって生成されたキーと同期しました。 [設定]で公開キーを指定する必要があります。
  2. Sourcetreeクライアントをダウンロードし、SSHキーで構成しました[オプション]-> [一般]-> [SSHクライアント構成]-> Git bashによって生成された秘密キーを提供する必要があります
  3. ソースツリーを使用してクライアントを複製し、Visual Studioから同じソリューションを開きます。プッシュ/プルは通常どおり動作します。

Git Bashを使用してキーを生成すると、 here が見つかります。

1
Rahul Shanbhag

VS2017で

私は同じ問題を抱えていました。私は解決のためにいくつかの方法を試しました:

  1. Visual Studio Installerの「git for windows」を削除し、コントロールパネルのgitを削除しました
  2. それらの2つをインストールしました。
  3. いくつかのssh設定を試した

しかし、私の問題を解決していません。そして"Visual Studio Installer"repaired。itを解決しました。

0
ahmeticat

この方法は私のために働いた(VS 2017/Win7):

  1. git-scm をインストールして接続しました。
  2. 完了(コピーするものはありません。機能します)
0
ndberg