2011-10-14 13 views
5

Mercurialリポジトリをマシンに対してチェックアウト/更新し、適切なコピー/設定を実行する必要があるFabricでいくつかのデプロイメントタスクを実行しています。マシン内でファブリックを使用してssh-addを実行

新しいマシン(私たちのインフラストラクチャに現在EC2を使用しています)をインストールするたびに、またはマシンにhg pullを実行すると、sshキーのパスフレーズが要求されます。初期化が必要なときにはちょっと迷惑でしょう。一度に十数台のマシン。

私は新しいEC2インスタンスが初期化されるときに生地にssh-addを実行しようとしたが、それはそのシェルのために実行されていないことssh-agentように思えると私はファブリックの出力からCould not open a connection to your authentication agent.メッセージが表示されます。

ssh-addは、Fabricスクリプトでインスタンスに接続するとどうなりますか?

答えて

2

commentファブリックの問題追跡ツールでこれが解決されました。これはlincolnloop solutionの改訂版です。この「実行」をファブリックの代わりに使用すると、コマンドをローカルでssh経由でパイプし、ローカルのssh-agentがキーを提供できるようにします。

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)) 

私はFabric 1.3.2を実行していますので、この修正はそれ以上必要なくなります。

関連する問題