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

zch*_*mes 133 windows ssh git-bash

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

eval `ssh-agent.exe`
ssh-add /my/ssh/location/
Run Code Online (Sandbox Code Playgroud)

每当我开始新的git bash时.

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

我是新手,请给我详细的教程,谢谢!

Von*_*onC 122

在一个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
Run Code Online (Sandbox Code Playgroud)

其他资源:

" 让ssh-agent与windows命令shell中的git一起运行 "有一个类似的脚本,但我主要参考上面的GitHub文章,它更加强大和最新.


Jig*_*hel 25

PS:这些说明是在Windows 10 Linux子系统中打开的Bash shell的上下文中,没有提到在Windows上使用Bash在Windows上生成的SSH密钥的sym链接在Windows上的Ubuntu

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
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

5)使用命令将密钥添加到SSH代理$ ssh-add ~/.ssh/id_work_gmail,然后您应该能够使用ssh连接到您的github帐户或远程主机.例如,在上面的代码示例的上下文中:

$ ssh github.com-<YOUR_GITHUB_USERNAME>
Run Code Online (Sandbox Code Playgroud)

要么

$ ssh <USER>@csexperimental.abc.com
Run Code Online (Sandbox Code Playgroud)

应该只需要一次性执行向SSH代理添加密钥.

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

注意:

谢谢.


Tia*_*ica 15

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

Host github.com
    HostName github.com
    User your_user_name
    IdentityFile ~/.ssh/your_file_name
Run Code Online (Sandbox Code Playgroud)

然后只需打开 Git Bash,您就可以进行推送,而无需手动启动 ssh 代理并添加密钥。


小智 6

我无法根据最佳答案让这个工作,可能是因为我是一个电脑菜鸟并且错过了一些明显的东西。但仅供参考,以防万一它可以帮助像我一样面临挑战的人,最终起作用的是通过此处的链接之一(在答案中引用)。这只需将以下内容粘贴到我的.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
Run Code Online (Sandbox Code Playgroud)

我可能配置了一些奇怪的东西,但当我将其添加到我的.profile.bashrc. 我遇到的另一个真正的挑战是我不是这台计算机的管理员,并且在未经 IT 批准的情况下无法更改环境变量,因此这是针对无法访问该计算机的用户的解决方案。

当您打开 git bash 时,如果系统提示您输入 ssh 密码,您就知道它正在工作。哈利路亚,事情终于奏效了。


小智 5

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

您需要为远程使用的主机名配置putty会话.

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

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

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

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

当pageant加载了您的密钥时,putty和WinSCP会话也是如此.它让生活变得更加轻松(安全).