我正在使用git bash。我必须用
eval `ssh-agent.exe`
ssh-add /my/ssh/location/
每次我开始新的git bash时。
有没有办法永久设置ssh代理?还是Windows具有管理ssh密钥的好方法?
我是新手,请给我详细的教程,谢谢!
我正在使用git bash。我必须用
eval `ssh-agent.exe`
ssh-add /my/ssh/location/
每次我开始新的git bash时。
有没有办法永久设置ssh代理?还是Windows具有管理ssh密钥的好方法?
我是新手,请给我详细的教程,谢谢!
Answers:
在一个Git bash命令,你可以添加一个脚本~/.profile
或~/.bashrc
(与~
被通常设置为%USERPROFILE%
)自动,为了表示会话启动ssh-agent
。如果该文件不存在,则只需创建它。
这就是GitHub在“ 使用SSH密钥密码短语 ”中描述的内容 ”中描述的内容。
该文章的“ 在Windows的Git上自动启动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
其他资源:
“ 让ssh-agent与从Windows命令外壳运行的git一起使用 ”具有类似的脚本,但是我主要参考上面的GitHub文章,该文章更加健壮且是最新的。
PS:这些说明是在Windows 10 Linux子系统中打开的Bash shell的上下文中,没有提及Windows上与Ubuntu上的Bash在Windows中生成的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到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中提到的步骤进行升级
在Windows 10 Linux子系统SSH代理要点中可以找到相同的详细信息
谢谢。
>> "${SSH_ENV}"
呢?难道不是> "${SSH_ENV}"
吗?当然,您的文件可以运行,但是最终~/.ssh/environment
文件的长度会越来越长,因为(按照我目前的想法!?),这是没有原因的。我觉得这个脚本应该只包含在.bashrc
WSL Ubuntu 的默认脚本中,它是如此有用!
我发现实现此目标的最流畅的方法是使用Pageant作为SSH代理和plink。
您需要为在远程服务器中使用的主机名配置一个腻子会话。
您还需要plink.exe,可以从与腻子相同的站点下载该文件。
并且您需要在加载密钥的情况下运行Pageant。我在启动文件夹中有一个用于选美的快捷方式,可以在登录时加载SSH密钥。
当您安装git-scm时,您可以将其指定为使用tortoise / plink而不是OpenSSH。
最终的效果是,您可以随时打开git-bash并进行推/拉操作,而不会受到密码短语的挑战。
当选美加载了密钥时,腻子和WinSCP会话也是如此。它使生活变得更轻松(更安全)。
由于我不喜欢在Windows中使用腻子作为解决方法,因此我创建了一个非常简单的实用程序ssh-agent-wrapper。它扫描您的.ssh文件夹并将所有密钥添加到代理。您只需要将其放入Windows启动文件夹中即可运行。
假设:
我无法根据最佳答案来解决这个问题,这可能是因为我是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密码,则知道它正在工作。Hallelujah终于奏效了。
在〜目录中创建一个新的.bashrc文件。
在那里,您可以在每次启动bash时放置要执行的命令
.bashrc
文件中放入简单的内容(例如echo test
,在执行Git Bash时检查其是否已加载。)
.bashrc
用户文件夹,例如C:\Users\john
。
来自此答案的简单的两字符串解决方案:
对于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`
/my/ssh/location/
equalivent喜欢的东西/c/Users/Foobar/.ssh/
?