2017-02-20 15 views
0

jumphost経由でリモートマシンにsshする必要があります。私はこのように行うのssh使用paramikoを使用してssh-agentを複数のホップに追加する方法

:私はちょうどいくつかのコマンドを実行したい場合はjumphostのssh -Aユーザーの@ vm_to_login

@ のssh -A -tユーザーは、私が実行します。ユーザー-t のssh -Aを@

をjumphostのssh -Aユーザーの@ vm_to_login「実行するコマンドは、」今私は、Pythonを使ってこれをやってみました:私は、上記のスクリプトを実行すると、プログラムが無限の時間のためにぶら下がっている

def ssh_connect(jumphost_ip): 
    ssh_client=paramiko.SSHClient() 
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
    path_to_key=os.path.join(os.environ['HOME'], '.ssh', 'id_rsa') 
    ssh_client.connect(jumphost_ip, username='vagrant', key_filename=path_to_key, allow_agent=True) 
    return ssh_client 

ssh_client = ssh_connect(host_ip) 

stdin, stdout, stderr = ssh_client.exec_command("""ssh [email protected]_to_run_command -A "docker network inspect --format '{{json .Containers }}' bridge" """, get_pty=True) 

..私はちょうど推測しますSSHClientオブジェクトはキーを追加できませんsshエージェントと2番目のサーバーがキーを探すとき、キー要求はジャンプボックスに移動し、ジャンプボックスからローカルに移動しますが、SSHClientオブジェクトにはそれらのキーがあります。

これ以上の情報が必要な場合はお知らせください。

答えて

0

は、私は上記のプログラムのユーザーを使用する前に、paramiko

def ssh_connect(jumphost_ip): 
    ssh_client=paramiko.SSHClient() 
    ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
    path_to_key=os.path.join(os.environ['HOME'], '.ssh', 'id_rsa') 
    ssh_client.connect(jumphost_ip, username='vagrant', key_filename=path_to_key, allow_agent=True) 
    s = ssh_client.get_transport().open_session() 
    # set up the agent request handler to handle agent requests from the server 
    paramiko.agent.AgentRequestHandler(s) 
    return ssh_client 

を使用してエージェント転送を処理する方法に答えを持っている正しい秘密鍵は、ssh-agentのために追加されていることを確認する必要があります。ホスト上で以下のコマンドを実行してssh-agentに秘密鍵を追加します。 1. eval $(ssh-agent) 2. ssh-add [秘密鍵へのパス。 ex - 〜/ .ssh/id_rsa]

関連する問題