1

さて、私は次のようにリモートサイトauthorized_keysファイルに制限されたコマンドの関連付けを持っています:

command="python /usr/share/my_script.py" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDDxiK......

このスクリプトはパラメータを取る必要があります。

ローカルサイトで、paramikoを使用してローカルパラメータを使用してリモートスクリプトを起動しようとしています。

import sys, paramiko

host = '192.168.1.10'
port = 22
restricted_key = '/root/.ssh/restricted_key'

client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(host, port=port, username=user, key_filename=restricted_key)

arg1, arg2, arg3 = ('python', 'is', 'cool')
command = 'python /usr/share/my_script.py %s %s %s' % (arg1, arg2, arg3)
stdin, stdout, stderr = client.exec_command(command)

if not stderr.readlines():
    return stdout.readlines()
else:
    raise IOError

リモートスクリプトpython/usr/share/my_script.pyは次のとおりです。

if __name__ == "__main__":
try:
    arg1, arg2, arg3 = (sys.argv[1], sys.argv[2], sys.argv[3])
    open('/tmp/just_a_test', 'a+').write('%s %s %s' % (arg1, arg2, arg3))
except Exception, e:
    print 'ERROR : %s' % str(e)

スクリプトはエラーなしで終了しますが、リモート実行を起動しないようです。可能であるように、100%Pythonの方法でこれを実行できるようにしたいと思います。

4

1 に答える 1

1

これは、authorized_keysコマンドに環境変数$SSH_ORIGINAL_COMMANDを追加することで実行されます。

command="python /usr/share/my_script.py $SSH_ORIGINAL_COMMAND" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDDxiK......

次に、paramikoの実行で、リモートコマンドに送信する引数を次のように配置しました。

command = '%s %s %s' % (arg1, arg2, arg3)
stdin, stdout, stderr = client.exec_command(command)
于 2013-02-20T22:40:14.167 に答える