【问题标题】:Permission denied on git repository with Fabric使用 Fabric 拒绝 git 存储库的权限
【发布时间】:2013-07-29 04:51:36
【问题描述】:

我正在编写一个 fab 脚本来在远程服务器上执行 git pull,但是当 fabric 运行命令时我得到 Permission denied (publickey,keyboard-interactive).

如果我 ssh 到服务器然后进行拉取,它就可以工作。 (我已经在服务器上设置了密钥,所以它不会要求输入密码等)

这是我的织物任务:

import fabric.api as fab
def update():
  '''
  update workers code
  '''
  with fab.cd('~/myrepo'):
      # pull changes
      print colors.cyan('Pulling changes...')
      fab.run('git pull origin master')

如何让它与 Fabric 一起使用?

编辑:我的服务器是一个Google Compute 实例,它提供了一个gcutil 工具来ssh 到该实例。这是它运行以连接到服务器的命令:

ssh -o UserKnownHostsFile=/dev/null -o CheckHostIP=no -o StrictHostKeyChecking=no -i /Users/John/.ssh/google_compute_engine -A -p 22 John@123.456.789.101 

脚本能够连接到服务器 AFAICT(它能够在服务器上运行命令,例如 cdsupervisorgit status),只是 git pull 失败。

【问题讨论】:

  • 您在哪个用户下运行任务(因此 - git 在 fabric 下)? git 操作的“权限被拒绝...”是身份验证失败的症状
  • 我对两者都使用相同的用户。我在fabric中的主机是[John@server],当我ssh时,它也是John@server

标签: python git fabric


【解决方案1】:

您需要像这样编辑 fabfile 以启用 ssh 代理转发选项。

from fabric.api import *

env.hosts = ['123.456.789.101']
env.user = 'John'
env.key_filename = '/Users/John/.ssh/google_compute_engine'
env.forward_agent = True

def update():
  '''
  update workers code
  '''
  with cd('~/myrepo'):
      # pull changes
      print colors.cyan('Pulling changes...')
      run('git pull origin master')

【讨论】:

  • 在指定密钥后仍然收到 git 错误。它能够连接到服务器(能够执行cd 并运行supervisor 命令),只是git 失败。
  • 对不起,我误会了。 SSH 选项 [-A] 表示 ssh 代理转发。所以 git pull 命令使用 [/Users/John/.ssh/google_compute_engine] key 。您需要启用 env 选项[env.forward_agent = True] 以使用 ssh 代理转发。
  • 只是澄清一下,没有-A,服务器在执行git pull 时使用它在其.ssh 目录中的任何密钥对吗?
  • 没错。不使用-A选项时,推送命令使用user@remotehost:~/.ssh/id_rsa
猜你喜欢
  • 2014-11-28
  • 2017-12-29
  • 2016-02-21
  • 2016-05-18
  • 2012-11-20
  • 1970-01-01
  • 2019-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多