通过python paramiko在ssh上使用本地参数执行受限制的远程脚本

时间:2013-02-19 10:16:50

标签: python ssh paramiko

好吧,我在远程站点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的方式做到这一点,因为它可能是这样。

1 个答案:

答案 0 :(得分:1)

在authorized_keys命令中添加environnement变量$ 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)