0

この質問には少し文脈があります。私は、ファイル/フォルダーをあるマシンから別のマシンにコピーするアプリケーションをPythonで作成しています。接続は複数のマシンを通過できる必要があります。私は文字通りマシンを直列に接続ているので、正しいマシンに到達するまでそれらをホップする必要があります。

現在、python のsubprocessモジュール (Popen) を使用しています。私が持っている非常に単純な例として

import subprocess

# need to set strict host checking to no since we connect to different
# machines over localhost
tunnel_string = "ssh -oStrictHostKeyChecking=no -L9999:127.0.0.1:9999 -ACt machine1 ssh -L9999:127.0.0.1:22 -ACt -N machineN"

proc = subprocess.Popen(tunnel_string.split())
# Do work, copy files etc. over ssh on localhost with port 9999
proc.terminate()

私の質問: このようにすると、エージェント転送が機能しないように見えます。これは、このような場合に不可欠です。これを行う方法はありますか?

Popen で shell=True キーワードを使用してみました

tunnel_string = "eval `ssh-agent` && ssh-add && ssh -oStrictHostKeyChecking=no -L9999:127.0.0.1:9999 -ACt machine1 ssh -L9999:127.0.0.1:22 -ACt -N machineN"

proc = subprocess.Popen(tunnel_string, shell=True)
# etc

これの問題は、マシンの名前がユーザー入力によって与えられることです。つまり、悪意のあるシェル コードを簡単に挿入できることを意味します。2 つ目の問題は、接続を確立するたびに新しい ssh-agent プロセスが実行されることです。

私のbashrcには、すでに実行中のssh-agentsを識別し、適切な環境変数を設定してsshキーを追加する素晴らしい機能がありますが、もちろん、サブプロセスは私のbashrcで定義された関数を参照できません。Popen で shell=True を使用して executable="/bin/bash" 変数を設定しようとしましたが、役に立ちませんでした。

4

3 に答える 3

0

Fabricを試してみてください。

ローカルまたはリモートのシェル コマンド (通常または sudo 経由) を実行し、ファイルをアップロード/ダウンロードするための基本的な一連の操作に加えて、実行中のユーザーに入力を促す、実行を中止するなどの補助機能を提供します。

以下のプログラムは、テスト実行を提供します。最初にファブリックをインストールしてpip install fabricから、以下のコードをfabfile.py

from fabric.api import *

env.hosts = ['server url/IP'] #change to ur server.
env.user = #username for the server
env.password = #password

def run_interactive():
    with settings(warn_only = True)
    cmd = 'clear'
    while cmd is not 'stop fabric':
        run(cmd)
        cmd = raw_input('Command to run on server')

fabfile を含むディレクトリに移動して実行するfab run_interactiveと、入力した各コマンドがサーバー上で実行されます

于 2013-10-07T22:35:00.547 に答える
0

最初の単純な例をテストしたところ、エージェント転送が機能しました。問題を引き起こす可能性があると私が思う唯一のことは、スクリプトを実行するシェルで環境変数 SSH_AGENT_PID と SSH_AUTH_SOCK が正しく設定されていないことです。ssh -v を使用すると、問題が発生している場所をよりよく把握できます。

于 2013-10-14T05:14:05.917 に答える