解密.py代码

时间:2018-08-07 21:47:44

标签: python

我遇到一个非常具体的问题。我将Putty用于小型企业的数据库管理。我们最近进行了一次更新,并且不再使用用于更新记录的常规命令路径。

我们在商店中的所有计算机上运行Putty。 Putty在带有oracle的虚拟机上使用。我们拥有发生更新的系统的主计算机。

我们通常使用root用户将〜/ Desktop / getdata.sh输入到腻子中,它会组成一个更新的列表,创建一个我们要使用的文本文件。不幸的是,创建此脚本的人不再与我们合作。

我正在尝试找到一种重新执行该文件的方法。

更新后,当我们在根目录中输入〜/ Desktop / getdata.sh(以root用户身份登录后)时,我们得到“找不到目录”。我每天都在搜索此文件。但是,我确实找到了一个getdata.py文件和一个getdata.bat文件。

如果需要,我可以显示两个脚本,我可以更新问题。

当我尝试运行getdata.py时,我得到

[root@RT_Store-01 /]# ~/Desktop/getdata.py
import: unable to open X server `'.
import: unable to open X server `'.
import: unable to open X server `'.
import: unable to open X server `'.
: command not foundta.py: line 5:
/root/Desktop/getdata.py: line 6: from: command not found
/root/Desktop/getdata.py: line 7: from: command not found
: command not foundta.py: line 8:
/root/Desktop/getdata.py: line 9: syntax error near unexpected token `('
/root/Desktop/getdata.py: line 9: `dir_path = os.path.dirname(os.path.realpath(_'file__))

我需要将文件转换为.sh吗?我该怎么做?这是一个更大的问题吗?

getdata.py的脚本是

import os
import tempfile
import paramiko
import time

from pywinauto import Application
from subprocess import Popen, PIPE, STDOUT

dir_path = os.path.dirname(os.path.realpath(__file__))


class Connection(object):
    """Connects and logs into the specified hostname.
    Arguments that are not given are guessed from the environment."""

    def __init__(self,
                 host,
                 username=None,
                 private_key=None,
                 password=None,
                 port=22,
                 ):
        self._sftp_live = False
        self._sftp = None
        if not username:
            username = os.environ['LOGNAME']

        # Log to a temporary file.
        templog = tempfile.mkstemp('.txt', 'ssh-')[1]
        paramiko.util.log_to_file(templog)

        # Begin the SSH transport.
        self._transport = paramiko.Transport((host, port))
        self._tranport_live = True
        # Authenticate the transport.
        if password:
            # Using Password.
            self._transport.connect(username=username, password=password)
        else:
            # Use Private Key.
            if not private_key:
                # Try to use default key.
                if os.path.exists(os.path.expanduser('~/.ssh/id_rsa')):
                    private_key = '~/.ssh/id_rsa'
                elif os.path.exists(os.path.expanduser('~/.ssh/id_dsa')):
                    private_key = '~/.ssh/id_dsa'
                else:
                    raise TypeError(
                        "You have not specified a password or key.")

            private_key_file = os.path.expanduser(private_key)
            rsa_key = paramiko.RSAKey.from_private_key_file(private_key_file)
            self._transport.connect(username=username, pkey=rsa_key)

    def _sftp_connect(self):
        """Establish the SFTP connection."""
        if not self._sftp_live:
            self._sftp = paramiko.SFTPClient.from_transport(self._transport)
            self._sftp_live = True

    def get(self, remotepath, localpath=None):
        """Copies a file between the remote host and the local host."""
        if not localpath:
            localpath = os.path.split(remotepath)[1]
        self._sftp_connect()
        self._sftp.get(remotepath, localpath)

    def put(self, localpath, remotepath=None):
        """Copies a file between the local host and the remote host."""
        if not remotepath:
            remotepath = os.path.split(localpath)[1]
        self._sftp_connect()
        self._sftp.put(localpath, remotepath)

    def execute(self, command):
        """Execute the given commands on a remote machine."""
        channel = self._transport.open_session()
        channel.exec_command(command)
        output = channel.makefile('rb', -1).readlines()
        if output:
            return output
        else:
            return channel.makefile_stderr('rb', -1).readlines()

    def update(self):
        """Execute the given commands on a remote machine."""
        channel = self._transport.invoke_shell(term='xterm')
        channel.exec_command('~/Desktop/update.sh')
        output = channel.makefile('rb', -1).readlines()
        if output:
            return output
        else:
            return channel.makefile_stderr('rb', -1).readlines()

    def close(self):
        """Closes the connection and cleans up."""
        # Close SFTP Connection.
        if self._sftp_live:
            self._sftp.close()
            self._sftp_live = False
        # Close the SSH Transport.
        if self._tranport_live:
            self._transport.close()
            self._tranport_live = False

    def __del__(self):
        """Attempt to clean up if not explicitly closed."""
        self.close()


def getData():
    """Create, get, and put delim file when called directly."""

    app = Application().start(r"c:\putty.exe trak@10.1.10.70 -pw trak")
    app.window_(
        title_re=".*trak.*").TypeKeys("/home/trak/Desktop/getdata.sh && exit{ENTER}")
    app.window_(title_re=".*trak.*").WaitNot("exists", timeout=120)

    trakfile = dir_path + '/storage/trakdelim.txt'

    shell = Connection('10.1.10.70', "trak", password="trak")
    shell.get('/trak/data/trakdelim.txt', trakfile)
    shell.close()

if __name__ == "__main__":
    getData()

我感谢任何能提供帮助的人,我可以在需要时澄清!

2 个答案:

答案 0 :(得分:1)

一些谷歌搜索向我展示了这是什么:

有人复制了this code并编写了一个简单的脚本,该脚本在IP地址为10.1.10.70用户名trak和密码trak的远程计算机上获取文件(/trak/data/trakdelim.txt),并将其复制到storage / trakdelim.txt文件。如果现在不适合您,请使用一种工具,允许您使用winSCP等手动进行操作,并改用它。

祝你好运。

答案 1 :(得分:0)

您需要将其作为python脚本执行。

python ~/Desktop/getdata.py