Rails 版本库服务器不能克隆项目到自身吗?

lb563 · 2012年04月15日 · 最后由 aNdReW_Qx 回复于 2012年04月20日 · 4152 次阅读

继文件被删除后就重装了 unix 系统,生成了公钥,能克隆服务器上项目到本地 上面一切都 ok. 问题来了: 1: 我要把这个项目部署到这台服务器上去 (版本库服务器和我要部署的目标服务器是一台机器) 2: 先 ssh 到我服务器上去,再克隆项目执行如下: a) ssh [email protected] b) cd /opt/dev && git clone git@my_app.git 结果出现一错误: Permission denied (publickey,gssapi-with-mic). fatal: The remote end hung up unexpectedly 3: 在本地机器上: cd /opt/dev && git clone git@my_app.git 一切下常,能够从服务器上面克隆下来 4: 查看了本地 ssh_config 配置如下:

Host *

ForwardAgent yes

ForwardX11 no

RhostsRSAAuthentication no

RSAAuthentication yes

PasswordAuthentication yes

HostbasedAuthentication no

GSSAPIAuthentication no

GSSAPIDelegateCredentials no

GSSAPIKeyExchange no

GSSAPITrustDNS no

BatchMode no

CheckHostIP yes

AddressFamily any

ConnectTimeout 0

StrictHostKeyChecking ask

IdentityFile ~/.ssh/identity

IdentityFile ~/.ssh/id_rsa

IdentityFile ~/.ssh/id_dsa

Port 22

Protocol 2,1

Cipher 3des

Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc

MACs hmac-md5,hmac-sha1,[email protected],hmac-ripemd160

EscapeChar ~

Tunnel no

TunnelDevice any:any

PermitLocalCommand no

VisualHostKey no

可见我的代理设置的是 yes,也就是我可以用我本机的 key 来代理克隆项目到我的目标服务器上面去

疑问: 1: 为什么我能克隆项目到本机,而当我 ssh 到服务器上去克隆项目时不行? 2: 我的公钥已经放到了服务器里面,为什么还要我验证? 3: 以前我也遇到过类似的问题,而当我重启电脑后就正常了 (我想是我的那个 ssh 服务没有起来). 4: 网上找了很多方法都说是要把 key 放上去,问题是我已经放上去了,能登录能克隆。

以上问题很纠结。整了些时间没有头绪了.想请教大家这个情况怎么来处理呢?

本地 ssh-agent 启动了吗?

你本机的 ssh 公钥是如何添加到服务器上的? 我是将公钥添加到指定账户的.ssh/authorized_keys 文件,服务器自己的公钥也需要添加进去。

#1 楼 @doitian ps | grep ssh 501 3334 112 0 0:00.12 ?? 0:00.15 /usr/bin/ssh-agent -l

#2 楼 @reyesyang 这个需要吗?好像我这前都没有这么做过呢?

要把 deploy 用户的公钥放到 git 的认证里面

--update--

我搞错了,ssh 和 git 协议不同

#3 楼 @lb563

  • 看看 key 有没有加进去 ssh-add -l

  • 你 ssh 到服务器的那个 shell 的 ssh-agent 的变量有没有设置正确,主要是 SSH_AUTH_SOCK

  • ssh 上去以后在服务器再检查下 SSH_AUTH_SOCK 是不是指向一个存在的 sock 文件

  • 服务器上 my_app.git IP 有没有弄错

  • 在服务器上直接运行 ssh 看看有什么异常

    ssh -vvv git@my_app.git date

#5 楼 @Rei #2 楼 @reyesyang 用 agent forward 而不是给 deploy 用户直接访问 code repository 的权限是个好习惯

#6 楼 @doitian 情况是这个样子的: 在本机上面: $ ssh-add -l The agent has no identities.

$ ssh-agent SSH_AUTH_SOCK=/tmp/ssh-aGTC8ksj0i/agent.711; export SSH_AUTH_SOCK; SSH_AGENT_PID=712; export SSH_AGENT_PID;

在服务器上面: $ ssh-add -l The agent has no identities.

$ ssh-agent SSH_AUTH_SOCK=/tmp/ssh-RngKB15725/agent.15725; export SSH_AUTH_SOCK; SSH_AGENT_PID=15726; export SSH_AGENT_PID; echo Agent pid 15726;

难道说是我本机的 ssh 和没有配置成功?

是的:我的代理没有设置成功,我参考了方法: http://drupal.star.bnl.gov/STAR/comp/sofi/facility-access/using-ssh-agent 在这里我找到了怎么设置然后测试并成功

但是不知道是怎么的,我重启电脑后又不行了原因是 ssh-add -l : The agent has no identities. 然后我执行 ssh-add 加了进去,结果成功, 想问。为什么我重启电脑后我原来加的 key 就没有了呢?

#10 楼 @lb563 而且我部署项目的时候会异常的等很久然后失败!不知道那里错了!

#10 楼 @lb563 ssh-add 只是把 key 加到当前的 ssh-agent 里,每次 agent 启动需要重新添加。如果你的 key 没设置 passphrase 的话可以在 .bashrc/.zshrc 里 add 一下。用 zsh 可以直接用 oh-my-zsh 的 ssh-agent plugin

#12 楼 @doitian 嗯,我用了一个脚本来执行,并放到了~/.profile 中脚本 如下:

#!/bin/sh

start agent for ssh

if [ -f ~/.agent.env ]; then . ~/.agent.env >/dev/null if ! kill -0 $SSH_AGENT_PID >/dev/null 2>&1; then echo "Stale agent file found. Spawning new agent..." eval ssh-agent |tee ~/.agent.env ssh-add fi else echo "Starting ssh-agent..." eval ssh-agent |tee ~/.agent.env ssh-add fi

#11 楼 @lb563 靠,原来是我的网速不 ok,还以为是哪 里出了问题!

@lb563 建议你版本库和部署服务器在同一服务器的话,跑一个 git daemon 使用 git://localhost/repo.git 来部署,效率高,也不需要 key

需要 登录 后方可回复, 如果你还没有账号请 注册新账号