在Windows上启动Git Bash时运行SSH代理

时间:2013-08-23 13:37:05

标签: windows ssh git-bash

我正在使用git bash。我必须使用

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

每当我开始新的git bash时。

有没有办法永久设置ssh代理?或者Windows有一个好方法 管理ssh密钥?

我是一个新人,请给我详细的教程,谢谢!

10 个答案:

答案 0 :(得分:109)

在git bash会话中,您可以将脚本添加到~/.profile~/.bashrcwith ~ being usually set to %USERPROFILE%),以便所述会话自动启动ssh-agent。如果文件不存在,只需创建它。

这就是GitHub在“Working with SSH key passphrases”中所描述的内容。

该文章的“Auto-launching ssh-agent on Git for Windows”部分有一个强大的脚本,用于检查代理是否正在运行。下面只是一个片段,请参阅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

其他资源:

Getting ssh-agent to work with git run from windows command shell”有一个类似的脚本,但我主要参考上面的GitHub文章,它更加强大和最新。

答案 1 :(得分:23)

PS:这些说明是在Windows 10 Linux子系统中打开的Bash shell的上下文中提到的,并没有提到将Windows中生成的SSH密钥与Windows上的Ubuntu上的Bash进行sym链接 < / p>

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代理添加密钥。

6)现在在Windows Linux子系统上注销Bash会话,即再次退出所有Bash控制台并再次启动新控制台并尝试通过SSH配置文件中配置的SSH连接到您的Github主机或其他主机,它应该无需工作需要任何额外的步骤。

注意:

感谢。

答案 2 :(得分:5)

我发现实现这一目标最顺畅的方法是使用Pageant作为SSH代理和plink。

您需要为您的遥控器中使用的主机名配置一个putty会话。

您还需要plink.exe,可以从与putty相同的站点下载。

你需要在加载密钥的情况下运行Pageant。我在我的启动文件夹中有一个快捷方式,可以在我登录时加载我的SSH密钥。

当您安装git-scm时,您可以指定它使用tortoise / plink而不是OpenSSH。

净效果是你可以随时打开git-bash并推/拉而不会受到密码短语的挑战。

当pageant加载了密钥时,putty和WinSCP会话也是如此。它使生活变得更加容易(并且安全)。

答案 3 :(得分:3)

如果目标是能够随时推送到 GitHub 存储库,那么在存储密钥的 C:\Users\tiago\.ssh 下的 Windows 中(至少在我的情况下),创建一个名为 config 的文件并添加以下内容

Host github.com
    HostName github.com
    User your_user_name
    IdentityFile ~/.ssh/your_file_name

然后只需打开 Git Bash 即可推送,而无需手动启动 ssh-agent 并添加密钥。

答案 4 :(得分:2)

由于我不喜欢在Windows中使用putty作为解决方法,因此我创建了一个非常简单的实用程序ssh-agent-wrapper。它会扫描您的.ssh文件夹并将所有密钥添加到代理。您只需将其放入Windows启动文件夹即可使用。

<强>假设

  • 路径中的ssh-agent
  • shh-add in path(通过在安装git时选择&#34; RED&#34;选项
  • 私钥位于%USERPROFILE%/。ssh文件夹
  • 私钥名称以id开头(例如id_rsa)

答案 5 :(得分:2)

我无法根据最佳答案来解决这个问题,可能是因为我是这样的PC新手,并且缺少明显的东西。但是仅供参考,以防万一它可以帮助像我这样面临挑战的人,最终的工作是通过链接here(在答案中引用)之一。只需将以下内容粘贴到我的.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密码,则您知道它正在工作。哈利路亚终于成功了。

答案 6 :(得分:1)

将此文件放入〜/ .bashrc(或从中获取文件的文件)中,这将阻止它在每个shell中不必要地多次运行:

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

然后将“ AddKeysToAgent yes”添加到〜/ .ssh / config:

Host *
    AddKeysToAgent yes

通常使用ssh连接到服务器(或git pull),并且每次会话仅询问您一次密码/密码。

答案 7 :(得分:1)

我编写了一个脚本并创建了一个 git 存储库,它在这里解决了这个问题:https://github.com/Cazaimi/boot-github-shell-win .

自述文件包含有关如何设置脚本的说明,因此每次打开新窗口/标签时,私钥都会自动添加到 ssh-agent,您不必担心这一点,如果您正在使用远程 git 存储库。

答案 8 :(得分:0)

在〜目录中创建一个新的.bashrc文件。

在那里,你可以在每次启动bash时放置你想要执行的命令

答案 9 :(得分:0)

来自this answer

简单的双字符串解决方案

sh bash 等:

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

csh tcsh 等:

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