python gnupg over ssh在python shell中工作,而不是在脚本中工作

python gnupg over ssh在python shell中工作,而不是在脚本中工作,python,ssh,gnupg,Python,Ssh,Gnupg,这是一个关于通过SSH在pythons交互模式下工作的命令的问题,但如果包含在脚本中,则不包括该命令。它快把我逼疯了。我一直在使用脚本时遇到问题,但现在我发现我可以简单地将这些行放入python shell中,并得到我所期望的确切结果!这让我很困惑,我不知道如何继续,因为我需要它在脚本中工作。对于pythonshell,我通过SSH登录,然后打开一个python脚本,而不是通过pythonsh模块登录。从那里,它的工作完全符合预期 import ssh import gnupg import p

这是一个关于通过SSH在pythons交互模式下工作的命令的问题,但如果包含在脚本中,则不包括该命令。它快把我逼疯了。我一直在使用脚本时遇到问题,但现在我发现我可以简单地将这些行放入python shell中,并得到我所期望的确切结果!这让我很困惑,我不知道如何继续,因为我需要它在脚本中工作。对于pythonshell,我通过SSH登录,然后打开一个python脚本,而不是通过pythonsh模块登录。从那里,它的工作完全符合预期

import ssh
import gnupg
import pickle

s = ssh.Connection(host = 'ipaddress', username = 'toolserv', password = 'xxxx') 

gpg = gnupg.GPG(gnupghome="/home/toolserv/.gnupg") 

with open("result1.txt", "r") as my_file:
    signed_data1 = pickle.load(my_file)
    my_file.close()

print signed_data1

s.close()
如果我从sudo执行脚本,那么从脚本中得到的错误是:

Traceback (most recent call last):
  File "sshx.py", line 11, in <module>
    with open("result1.txt", "r") as my_file:
IOError: [Errno 2] No such file or directory: 'result1.txt
回溯(最近一次呼叫最后一次):
文件“sshx.py”,第11行,在
打开(“result1.txt”、“r”)作为我的_文件:
IOError:[Errno 2]没有这样的文件或目录:“result1.txt”
ls-ld给出了以下结果: drwxr-xr-x 29工具维修工具维修4096 2012-08-19 22:38初始答案 脚本将在本地主机上执行,而不是在目标服务器上执行。注意如何打开
SSH
会话,然后不使用它

此主机上可能不存在
toolserv
用户。因此,当
gnupg
尝试创建目录时会出现错误

针对你的评论: 让我说清楚一点。仅调用
s=ssh.Connection(主机='ipaddress',用户名='toolserv',密码='xxxx')
并不意味着所有后续代码都将在远程主机上执行

现在,您编写的代码执行以下操作:

  • 通过SSH连接到位于
    ipaddress
    的远程主机
  • 使用本地主机上位于
    /home/toolserv/.gnupg
    的键的gnupg库
  • 阅读本地主机上的一些(pickle?)文件内容
  • 打印(未勾选的)内容
  • 关闭SSH连接(不要使用它) 您从不使用SSH连接,这可能不是您想要的,也可能是脚本失败的原因

    当然,如果您通过SSH登录并使用shell在远程主机上执行完全相同的脚本,那么您的本地主机实际上就是远程主机,因此它可以工作。但是,当从远程主机执行代码时,代码可以正常工作这一事实只不过是巧合而已

    最后一次,您的脚本可能不会执行您认为它会执行的操作,除非您对此进行调查,否则它永远不会工作。

    初始答案 脚本将在本地主机上执行,而不是在目标服务器上执行。注意如何打开
    SSH
    会话,然后不使用它

    此主机上可能不存在
    toolserv
    用户。因此,当
    gnupg
    尝试创建目录时会出现错误

    针对你的评论: 让我说清楚一点。仅调用
    s=ssh.Connection(主机='ipaddress',用户名='toolserv',密码='xxxx')
    并不意味着所有后续代码都将在远程主机上执行

    现在,您编写的代码执行以下操作:

  • 通过SSH连接到位于
    ipaddress
    的远程主机
  • 使用本地主机上位于
    /home/toolserv/.gnupg
    的键的gnupg库
  • 阅读本地主机上的一些(pickle?)文件内容
  • 打印(未勾选的)内容
  • 关闭SSH连接(不要使用它) 您从不使用SSH连接,这可能不是您想要的,也可能是脚本失败的原因

    当然,如果您通过SSH登录并使用shell在远程主机上执行完全相同的脚本,那么您的本地主机实际上就是远程主机,因此它可以工作。但是,当从远程主机执行代码时,代码可以正常工作这一事实只不过是巧合而已


    最后一次,您的脚本可能不会执行您认为它会执行的操作,除非您对此进行调查,否则它永远不会工作。

    如何启动脚本?试试这个:
    sudopythonscript.py
    ?我刚刚在命令行中添加了“pythonsshx.py”如何启动脚本?试试这个:
    sudo python script.py
    ?我刚把“python sshx.py”放在命令lineapologies中,我编辑了这个问题以反映我是如何登录的。首先,我通过ssh命令行连接到toolserv机器。然后我进入python shell。现在,如果我使用sudo python sshx.py启动脚本,它会给出不同的错误消息。很抱歉给你添麻烦。是的,谢谢。我使用的ssh模块实现了paramiko,因此我现在意识到我必须通过paramiko的内置函数加载文件。抱歉,我已经编辑了这个问题以反映我是如何登录的。首先,我通过ssh命令行连接到toolserv机器。然后我进入python shell。现在,如果我使用sudo python sshx.py启动脚本,它会给出不同的错误消息。很抱歉给你添麻烦。是的,谢谢。我使用的ssh模块实现了paramiko,因此我现在意识到我必须通过paramiko的内置函数加载文件。