Tzo*_*Noy 4 linux ssh ssh-agent
我已经使用这个 bitbucket 教程来提供对 git repo 的 ssh 访问:https ://confluence.atlassian.com/pages/viewpage.action?pageId=270827678
但是现在每次我想使用 git 时,它都会说我没有权限,直到我这样做:
ssh-agent /bin/bash
&&
ssh-add ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我在我的本地机器上很容易做到了,但是远程服务器不能正常工作。
更新
当我做
ssh-agent
Run Code Online (Sandbox Code Playgroud)
我明白了
SSH_AUTH_SOCK=/tmp/ssh-blGr6z5dJjit/agent.14183; export SSH_AUTH_SOCK;
SSH_AGENT_PID=14184; export SSH_AGENT_PID;
echo Agent pid 14184;
Run Code Online (Sandbox Code Playgroud)
但比我尝试做 git fetch 时,我得到了这个:
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud)
即使在我添加了密钥之后
ssh-add ~/.ssh/bitbucket
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
Could not open a connection to your authentication agent.
Run Code Online (Sandbox Code Playgroud)
这个问题有点不清楚,所以这个答案可能真的是一个不同的问题。但由于答案可能对其他人仍然有用,我认为值得保留。
当您键入ssh-agent /bin/bash
一个 ssh-agent 实例时,它会一直运行,只要该 shell 处于活动状态。默认情况下,该 ssh-agent 将仅由该 shell 使用,一旦您关闭该 shell,它将终止。
如果您只输入ssh-agent
,则代理将在后台启动,即使您关闭外壳,该代理也会继续运行。ssh-agent 命令将在 stdout 上打印命令,可以输入这些命令以开始使用该 ssh-agent。您每次都必须键入这些命令。
您可以启动后台 ssh-agent 并通过键入 开始在当前 shell 中使用它eval $(ssh-agent)
。但是SSH_AUTH_SOCK
,如果您再次登录,则必须将环境变量存储在某处并进行设置。
有了这些背景信息,我有关于如何让代理始终可用的三个建议。
eval $(ssh-agent) ; screen
,该代理将继续在服务器上运行,如果您稍后再次连接到该屏幕,它仍会记住要使用哪个代理。~/.bash_profile
文件中插入命令以查找活动代理(如果存在)并设置SSH_AUTH_SOCK
环境变量。~/.bash_profile
可以使用如下所示的脚本找到 ssh-agent
#!/bin/bash
for P in /tmp/ssh-*/agent.*
do
if [ -O "$P" ] && [ -O "$(dirname "$P")" ]
then
L=$(SSH_AUTH_SOCK="$P" timeout 1s ssh-add -l > >(wc -l))
case $? in
0)
echo "$L $P"
;;
1)
echo "0 $P"
;;
esac
fi &
done | sort -rn | if read N P
then
echo "SSH_AUTH_SOCK='$P'; export SSH_AUTH_SOCK"
else
ssh-agent
fi
Run Code Online (Sandbox Code Playgroud)
可以~/.bash_profile
像这样调用它eval $(find-agent)
(假设脚本名为 find-agent。)
归档时间: |
|
查看次数: |
5471 次 |
最近记录: |