我正在编写一个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个实例,它为ssh提供了一个gcutil工具。这是它运行以连接到服务器的命令:
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(它能够在服务器上运行命令,如cd
和supervisor
和git status
),它只是git pull
失败。
答案 0 :(得分:8)
您需要像这样编辑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')