我正在使用git bash。我必须使用
eval `ssh-agent.exe`
ssh-add /my/ssh/location/
每当我开始新的git bash时。
有没有办法永久设置ssh代理?或者Windows有一个好方法 管理ssh密钥?
我是一个新人,请给我详细的教程,谢谢!
答案 0 :(得分:109)
在git bash会话中,您可以将脚本添加到~/.profile
或~/.bashrc
(with ~
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主机或其他主机,它应该无需工作需要任何额外的步骤。
注意:
如果您面对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
感谢。
答案 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启动文件夹即可使用。
<强>假设强>:
答案 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)
简单的双字符串解决方案:
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`