我正在使用 git bash。我必须使用
eval `ssh-agent.exe`
ssh-add /my/ssh/location/
每次我开始一个新的 git bash 时。
有没有办法永久设置 ssh 代理?或者 Windows 是否有管理 ssh 密钥的好方法?
我是新手,请给我详细的教程,谢谢!
在 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
其他资源:
“ Getting ssh-agent to work with git run from windows command shell ”有一个类似的脚本,但我主要参考上面的 GitHub 文章,它更健壮且最新。
PS:这些说明是在 Windows 10 Linux 子系统中打开的 Bash shell 的上下文中,并没有提到在 Windows 上使用 Bash 在 Windows 上的 Ubuntu 上生成的符号链接 SSH 密钥
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 代理$ ssh-add ~/.ssh/id_work_gmail
,然后您应该能够使用 ssh 连接到您的 github 帐户或远程主机。例如,在上述代码示例的上下文中:
$ ssh github.com-<YOUR_GITHUB_USERNAME>
或者
$ ssh <USER>@csexperimental.abc.com
这种向 SSH 代理添加密钥应该只需要执行一次。
6) 现在注销您在 Windows Linux 子系统上的 Bash 会话,即再次退出所有 Bash 控制台并再次启动一个新控制台并尝试通过 SSH 连接到您的 Github 主机或 SSH 配置文件中配置的其他主机,它应该可以正常工作而无需任何额外脚步。
笔记:
如果你面对Bad owner or permissions on ~/.ssh/config
然后使用命令更新权限chmod 600 ~/.ssh/config
。参考:https ://serverfault.com/a/253314/98910
要使上述步骤生效,您需要OpenSSH v 7.2 和更新版本。如果您有旧版本,您可以使用https://stackoverflow.com/a/41555393/936494中提到的步骤进行升级
可以在 gist Windows 10 Linux Subsystem SSH-agent issues中找到相同的详细信息
谢谢。
如果目标是能够随时推送到 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 并添加密钥。
I found the smoothest way to achieve this was using Pageant as the SSH agent and plink.
You need to have a putty session configured for the hostname that is used in your remote.
You will also need plink.exe which can be downloaded from the same site as putty.
And you need Pageant running with your key loaded. I have a shortcut to pageant in my startup folder that loads my SSH key when I log in.
When you install git-scm you can then specify it to use tortoise/plink rather than OpenSSH.
The net effect is you can open git-bash whenever you like and push/pull without being challenged for passphrases.
Same applies with putty and WinSCP sessions when pageant has your key loaded. It makes life a hell of a lot easier (and secure).
根据最佳答案,我无法让它工作,可能是因为我是一个 PC 菜鸟,并且缺少一些明显的东西。但仅供参考,以防它帮助像我一样受到挑战的人,最终起作用的是通过此处的链接之一(在答案中引用)。这涉及简单地将以下内容粘贴到我的.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
or时没有成功.bashrc
。我遇到的另一个真正的挑战是我不是这台计算机上的管理员,并且在没有得到 IT 部门批准的情况下无法更改环境变量,因此对于那些无法访问的人来说,这是一个解决方案。
如果在打开 git bash 时系统提示您输入 ssh 密码,您就知道它正在工作。哈利路亚终于奏效了。
把它放在你的 ~/.bashrc (或一个来自它的文件)中,这将阻止它在每个 shell 中不必要地运行多次:
if [ -z "$SSH_AGENT_PID" ]; then
eval `ssh-agent -s`
fi
然后将“AddKeysToAgent yes”添加到~/.ssh/config:
Host *
AddKeysToAgent yes
通常通过 ssh 连接到您的服务器(或 git pull),并且每次会话只会要求您输入一次密码/密码。
由于我不喜欢在 Windows 中使用 putty 作为解决方法,因此我创建了一个非常简单的实用程序ssh-agent-wrapper。它会扫描您的 .ssh 文件夹并将您的所有密钥添加到代理。您只需将其放入 Windows 启动文件夹即可运行。
假设:
我编写了一个脚本并创建了一个 git 存储库,它在这里解决了这个问题:https ://github.com/Cazaimi/boot-github-shell-win 。
自述文件包含有关如何设置脚本的说明,以便每次打开新窗口/选项卡时都会自动添加私钥ssh-agent
,如果您正在使用远程 git,则不必担心这一点存储库。
在 ~ 目录中创建一个新的.bashrc文件。
每次启动 bash 时,您都可以在此处放置要执行的命令
此答案中的简单两个字符串解决方案:
对于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`