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