2011-10-14 8 views
5

Tôi đang chạy một số tác vụ triển khai với Fabric cần kiểm tra/cập nhật kho Mercurial cho máy và sau đó thực hiện sao chép/cấu hình thích hợp.Chạy ssh-add với Fabric trong máy

Mỗi khi tôi instatiate một máy mới (chúng tôi hiện đang sử dụng EC2 cho cơ sở hạ tầng của chúng tôi) hoặc khi tôi chạy hg pull trong máy, nó sẽ yêu cầu mật khẩu khóa ssh của tôi, đó là một chút khó chịu khi chúng ta cần phải khởi tạo một tá máy cùng một lúc.

Tôi đã cố gắng chạy ssh-add trong Vải khi phiên bản EC2 mới được khởi tạo nhưng có vẻ như là ssh-agent không chạy cho vỏ đó và tôi nhận được thông báo Could not open a connection to your authentication agent. từ đầu ra của Vải.

Làm cách nào để tạo ssh-add hoạt động khi được kết nối với phiên bản bằng tập lệnh Vải?

Trả lời

2

A comment trên bộ theo dõi vấn đề của vải đã giải quyết vấn đề này cho tôi. Đây là phiên bản sửa đổi của lincolnloop solution. Sử dụng "chạy" này thay vì vải sẽ ống lệnh của bạn thông qua ssh tại địa phương, cho phép ssh-đại lý địa phương của bạn để cung cấp các phím.

from fabric.api import env, roles, local, output 
from fabric.operations import _shell_escape 

def run(command, shell=True, pty=True): 
    """ 
    Helper function. 
    Runs a command with SSH agent forwarding enabled. 

    Note:: Fabric (and paramiko) can't forward your SSH agent. 
    This helper uses your system's ssh to do so. 
    """ 
    real_command = command 
    if shell: 
     cwd = env.get('cwd', '') 
     if cwd: 
      cwd = 'cd %s && ' % _shell_escape(cwd) 
     real_command = '%s "%s"' % (env.shell, 
      _shell_escape(cwd + real_command)) 
    if output.debug: 
     print("[%s] run: %s" % (env.host_string, real_command)) 
    elif output.running: 
     print("[%s] run: %s" % (env.host_string, command)) 
    local("ssh -A %s '%s'" % (env.host_string, real_command)) 

Xin lưu ý rằng tôi đang chạy Vải 1.3.2 và việc khắc phục này sẽ không cần lâu hơn nữa.