我有remote python script
,其中包含以下代码:
from os import system
import sys
if __name__ == '__main__':
arg1 = sys.argv[1] // ip address of host
arg2 = sys.argv[2]
cmd_txt = "ssh -i pem-file user@" + arg1 + " 'cd /folder1/folder2/ && java -cp jar-file.jar pack1.pack2.py-file -f folder1/folder2/file_" + ts + ".txt'"
system(cmd_txt)
现在我想从我本地计算机上的remote python script
运行此python script
并将两个参数传递给它arg1
& arg2
。所以基本上我的local python script
会调用remote python script
并将两个参数传递给它。我知道如何从另一个python脚本执行本地python脚本,但不知道远程python脚本。我怎样才能做到这一点?
UPDATE:我从本地机器执行了这个脚本,它调用了远程python脚本并传递了两个参数。当我运行此脚本时,我收到Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)
错误:
host = [host-ip] #host_ip in string format
args1 = 'str1'
args2 = 'str2'
cmd_txt = "sudo ssh -i pem-file user@" + host + " 'cd folder1/folder2/ && python file1.py "+ args1 +" "+ args2 +"'"
system(cmd_txt)
我上面的代码中缺少什么?
答案 0 :(得分:0)
先决条件:SSH和密钥同步(客户端的公钥应该在服务器的authorized_keys文件中)。
我看到你的本地命令以sudo
开头。然而,.pem文件将提供对服务器的相同访问权限,无论您是从本地系统上的根帐户还是标准帐户进行连接(如果您不使用.pem文件但默认情况不同{。 {1}})。我建议确保普通的本地用户可以进行传出的ssh连接并删除${HOME}/.ssh/id_rsa
。
看一下Fabric包(pip install fabric)。它真的撼动你想要实现的目标。最大的优点是Fabric提供了对os或subprocess语句的良好抽象,并允许您从客户端脚本中运行服务器端命令,即
sudo