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

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

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

每当我开始新的git bash。

有没有办法设置SSH代理永久? 或者Windows有一个很好的方法来pipe理SSH密钥?

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

在git bash会话中,您可以将脚本添加到~/.profile~/.bashrc ( 通常设置为%USERPROFILE% ),以便所述会话自动启动ssh-agent 。 如果该文件不存在,只需创build它。

这是GitHub在“ 使用SSH密码短语 ”中描述的内容。

该文章的“ Git for Windows自动启动ssh-agent ”部分有一个健壮的脚本,用于检查代理是否正在运行。 下面是一个片段,请参阅GitHub文章以获取完整的解决scheme。

 # 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文章,这个文章更强大并且是最新的。

PS:这些指令是在Windows 10 Linux子系统中打开的Bash shell的上下文中,并没有提到将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重新加载你的configuration。

上述步骤已从https://github.com/abergs/ubuntuonwindows#2-start-an-bash-ssh-agent-on-launch

3)创build一个SSHconfiguration文件,如果不存在。 使用以下命令创build一个新的: .ssh$ touch config

4)join~/.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代理添encryption钥应该只需要执行一次。

6)现在注销你的Bash会话在Windows Linux子系统即退出所有Bash控制台再次启动一个新的控制台,并尝试SSH SSH到您的Github主机或其他主机configuration文件,它应该工作,无需任何额外的脚步。

注意:

  • 如果您Bad owner or permissions on ~/.ssh/config面临Bad owner or permissions on ~/.ssh/config使用命令chmod 600 ~/.ssh/config Bad owner or permissions on ~/.ssh/config更新权限。 参考: https : //serverfault.com/a/253314/98910

  • 为了上述步骤的工作,您将需要OpenSSH v 7.2和更新 。 如果您有较旧的版本,则可以使用https://stackoverflow.com/a/41555393/936494中提到的步骤进行升级;

  • 重要的Windows 10 Linux子系统SSH代理问题中可以find相同的细节

谢谢。

我发现最平滑的方法是使用Pageant作为SSH代理和plink。

您需要为远程中使用的主机名configurationputty会话。

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

你需要加载你的密钥运行的Pageant。 我有一个快捷方式在我的启动文件夹中,当我login时加载我的SSH密钥。

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

最终的效果是你可以随时打开git-bash,并且在不被口令挑战的情况下推/拉。

当pageant加载你的密钥时,同样适用于putty和WinSCP会话。 它让生活变得更加简单(和安全)。

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

假设

  • path中的ssh-agent
  • 嘘joinpath(通过select“RED”选项时,安装git
  • 私钥在%USERPROFILE%/。ssh文件夹中
  • 私钥名称以id开头(如id_rsa)

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

在那里你可以把你想要执行的命令每次启动bash

这个答案 简单的两个string解决scheme

对于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`