web-dev-qa-db-ja.com

WindowsでGit Bashを起動するときにSSHエージェントを実行する

Git bashを使用しています。私は使わなければなりません

eval `ssh-agent.exe`
ssh-add /my/ssh/location/

新しいgit bashを開始するたびに。

Sshエージェントを永続的に設定する方法はありますか?または、Windowsはsshキーを管理する良い方法を持っていますか?

私は新しい人です、詳細なチュートリアルを教えてください、ありがとう!

122
zchholmes

Git bashセッションでは、~/.profileまたは~/.bashrcにスクリプトを追加できます( 通常、~%USERPROFILE%に設定されます )。セッションがssh-agentを自動的に起動するために。ファイルが存在しない場合は、作成してください。

これは、GitHubが「 SSHキーパスフレーズの操作 」で説明していることです。

この記事の「 Git for Windowsでのssh-agentの自動起動 」セクションには、エージェントが実行されているかどうかを確認する堅牢なスクリプトがあります。以下はほんの一部です。完全なソリューションについてはGitHubの記事を参照してください。

# This is just a snippet. See the article above.
if ! agent_is_running; then
    agent_start
    ssh-add
Elif ! agent_has_keys; then
    ssh-add
fi

その他のリソース:

" ssh-agentをWindowsコマンドシェルからgitで動作させる "にも同様のスクリプトがありますが、主に上記のGitHubの記事を参照します。これはより堅牢で最新のものです。

109
VonC

PS:これらの手順は、Windows 10 Linux Subsystemで開かれたBashシェルのコンテキスト内であり、Windowsで生成されたSSHキーとWindows上のUbuntuのBashのシンボリックリンクについては言及していません

1)。bashrcに以下を追加して更新します

# Set up ssh-agent
SSH_ENV="$HOME/.ssh/environment"

function start_agent {
    echo "Initializing new SSH agent..."
    touch $SSH_ENV
    chmod 600 "${SSH_ENV}"
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' >> "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}

# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
    . "${SSH_ENV}" > /dev/null
    kill -0 $SSH_AGENT_PID 2>/dev/null || {
        start_agent
    }
else
    start_agent
fi

2)次に、$ source ~/.bashrcを実行して設定を再読み込みします。

上記の手順は https://github.com/abergs/ubuntuonwindows#2-start-an-bash-ssh-agent-on-launch から取得されました

3)SSH構成ファイルを作成します(存在しない場合)。新しいコマンドを作成するには、次のコマンドを使用します:.ssh$ touch config

4)~/.ssh/configに以下を追加

Host github.com-<YOUR_GITHUB_USERNAME> 
HostName github.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_work_gmail # path to your private key
AddKeysToAgent yes


Host csexperimental.abc.com
IdentityFile ~/.ssh/id_work_gmail # path to your private key
AddKeysToAgent yes

<More hosts and github configs can be added in similar manner mentioned above>

5)コマンド$ ssh-add ~/.ssh/id_work_gmailを使用してキーをSSHエージェントに追加すると、sshを使用してgithubアカウントまたはリモートホストに接続できるようになります。たとえば上記のコード例のコンテキストでは:

$ ssh github.com-<YOUR_GITHUB_USERNAME>

または

$ ssh <USER>@csexperimental.abc.com

このSSHエージェントへのキーの追加は、1回のみ実行する必要があります。

6)次に、Windows LinuxサブシステムでBashセッションからログアウトします。つまり、すべてのBashコンソールを再度終了し、新しいコンソールを再起動して、GithubホストまたはSSH configファイルで設定された他のホストへのSSHを試行します。ステップ。

注意:

ありがとう。

23
Jignesh Gohel

これを実現する最もスムーズな方法は、SSHエージェントおよびplinkとしてPageantを使用することでした。

リモートで使用されるホスト名に対してPuTTYセッションを構成する必要があります。

また、PuTTYと同じサイトからダウンロードできるplink.exeも必要です。

そして、キーをロードしてPageantを実行する必要があります。ログイン時にSSHキーを読み込むスタートアップフォルダーにページェントへのショートカットがあります。

Git-scmをインストールすると、OpenSSHではなくtortoise/plinkを使用するように指定できます。

最終的な効果は、パスフレーズを要求されることなく、好きなときにgit-bashを開いてプッシュ/プルできることです。

同じことが、ページェントにキーがロードされている場合のPuTTYおよびWinSCPセッションにも当てはまります。それは人生をずっと簡単にします(そして安全にします)。

5
Alasdair

回避策としてWindowsでPuTTYを使用するのは好きではないので、非常に単純なユーティリティ ssh-agent-wrapper を作成しました。 .sshフォルダーをスキャンし、すべてのキーをエージェントに追加します。 Windowsスタートアップフォルダーに配置するだけで機能します。

仮定

  • パス内のssh-agent
  • パスにshh-add(両方ともgitのインストール時に「RED」オプションを選択することにより)
  • 秘密鍵は%USERPROFILE%/。sshフォルダーにあります
  • 秘密鍵の名前はidで始まります(例:id_rsa)
2
Erez A. Korn

〜ディレクトリに新しい 。bashrc ファイルを作成します。

そこに、bashを起動するたびに実行するコマンドを配置できます

0
user2711262

この答え からの単純な2文字列の解決策

shbashなど:

# ~/.profile
if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -s > ~/.ssh-agent.sh; fi
. ~/.ssh-agent.sh

cshtcshなど:

# ~/.schrc
sh -c 'if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -c > ~/.ssh-agent.tcsh; fi'
eval `cat ~/.ssh-agent.tcsh`
0
oklas