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


152

私はgit bashを使用しています。私は使用する必要があります

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

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

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

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


3
/my/ssh/location/ようなものに等しい/c/Users/Foobar/.ssh/ですか?
Nick、

同様の問題がsuperuser.com/q/1238486/478378に投稿され、現在解決されています。次の要点には、すべての詳細gist.github.com/jiggneshhgohel/afe96f0d57bdbf8beba305a73905402dが含まれています。ありがとう。
Jignesh Gohel 2017

回答:


138

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

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

この記事の「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

その他のリソース:

Windowsコマンドシェルからgit runでssh-agentを動作させる」も同様のスクリプトですが、主に上記のGitHubの記事を参照します。


少し気になったのは、gitを使用しないことを知っている場合は、sshキーのパスフレーズを入力しないことでした。そして、開いたすべてのシェルがもう一度要求しました。これは状態1であり、エージェントはキーなしで実行されているため、このセクションからssh-addを削除できます。パスフレーズを初めて入力しない場合は、手動でssh-addを実行するまで、再度質問されることはありません。
Andy2K11 2018

@Gordon help.github.com/articles/working-with-ssh-key-passphrases GitHubリンクのどの部分が変更されましたか?その内容はまだそこにあり、この回答には依然として関連があるようです。
VonC、2018

1
@ Andy2K11シェルを開くときではなく、初めて必要なときにパスフレーズを入力する場合、私にとって最もクリーンな方法は、前述のように.bash_profileからssh-addを削除し、「AddKeysToAgent yes」を追加することです.ssh / configファイル(この回答を参照してください:superuser.com/a/1114257/523133)。これにより、ssh-addを実行したことを覚える必要もありません。
18

30

PS:これらの手順は、Windows 10 Linuxサブシステムで開かれた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コンソールを終了し、新しいコンソールを再度起動して、SSH構成ファイルで構成されているGithubホストまたは他のホストにSSHで接続します。追加の構成は必要ありません。ステップ。

注意:

ありがとう。


1
WSLを使用した興味深い代替手段。+1
VonC 2017

@JigneshGohelありがとうございます。このスクリプトは完璧であり、クリーンです。ただ、なぜあなたは持っているのだろうと思いました>> "${SSH_ENV}"。それだけじゃないの> "${SSH_ENV}"?もちろん、あなたの作品は機能し~/.ssh/environmentますが、ファイルはゆっくりと長くなっていきます(私が現在考えているように!?)理由はありません... このスクリプトは.bashrcWSL Ubuntu のデフォルトに含める必要があると思います。とても便利です。
MikeBeaton

5

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

リモートで使用されるホスト名用に構成されたputtyセッションが必要です。

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

そして、あなたはあなたのキーをロードしてPageantを走らせる必要があります。ログイン時にSSH鍵をロードするページェントへのショートカットがスタートアップフォルダーにあります。

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

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

同じことが、ページェントにキーが読み込まれているパテおよびWinSCPセッションにも当てはまります。それは人生を非常に簡単にします(そして安全にします)。


2

回避策としてWindowsでputtyを使用したくないので、非常に単純なユーティリティssh-agent-wrapperを作成しました。.sshフォルダーをスキャンし、すべてのキーをエージェントに追加します。それを機能させるには、Windowsのスタートアップフォルダーに置く必要があります。

仮定

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

いいね!+1。私は常にopenssh(パテではなく)を使用するため、パスフレーズを含む秘密鍵の興味深いソリューションです。
VonC 2017

すでにgithubにいるので、なぜソースをgitリポジトリにしないのですか?
するThorbjörnRavnアンデルセン

パスから/ releasesを削除するだけです。;-)
Erez A. Korn

1

おそらく私がこのようなPCの初心者であり、明らかなものがないためか、最良の回答に基づいてこれを機能させることができませんでした。しかし、私と同じように挑戦的な人を助けるための参考までに、最後に機能したのはここのリンクの1つでした(回答で参照されています)。これには、次のものを単にmyに貼り付けるだけでした.bash_profile

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ; }

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env

奇妙な設定をしている可能性がありますが、.profileやに追加したときにうまくいきませんでした.bashrc。私が遭遇した他の本当の課題は、私がこのコンピューターの管理者ではないため、ITの承認を得ずに環境変数を変更できないため、これはそれにアクセスできない人のためのソリューションです。

git bashを開いたときにsshパスワードの入力を求められた場合は、正常に機能しています。ハレルヤ何かがようやく機能しました。


1

これを〜/ .bashrc(またはソースからのファイル)に入れます。これにより、シェルごとに不必要に複数回実行されなくなります。

if [ -z "$SSH_AGENT_PID" ]; then
        eval `ssh-agent -s`
fi

そして、「AddKeysToAgent yes」を〜/ .ssh / configに追加します:

Host *
    AddKeysToAgent yes

通常はサーバーにssh(またはgit pull)し、セッションごとに1回だけパスワード/パスフレーズの入力を求められます。


0

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

そこで、bashを起動するたびに実行したいコマンドを置くことができます


それは動作する必要があります。このように、何かをシンプルに配置しようとすると.bashrc、ファイル(のようにecho test、あなたがGitのバッシュを実行すると、それがロードされるかどうかを確認します。
デビッド・FerenczyRogožan

また、PowerShellの〜は、インストールされているバージョンと指定されたユーザーオプションに応じて、Git Bash / Cygwinの〜とは異なる可能性があることに注意してください。
dragon788 2016

@Yar Windowsの場合.bashrc、ユーザーフォルダに入れますC:\Users\john
マーティンファンドリエル2017

0

この答えからの単純な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`
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.