python登录linux并执行命令 - CSDN
精华内容
参与话题
  • 最近在写一个类似于Linux系统审查工具的Python脚本,远程登录并执行,要用到paramiko模块/pexpect模块。 介绍一下安装方法:(CentOS7环境下) 1、安装依赖: yum install python-devel.x86_64 yum install ...

    最近在写一个类似于Linux系统审查工具的Python脚本,远程登录并执行,要用到paramiko模块/pexpect模块。

    介绍一下安装方法:(CentOS7环境下)

    1、安装依赖:

    yum install python-devel.x86_64
    yum install openssl-devel
    yum install libffi-devel
     
    2、安装pycrypto:
     
    tar -xzvf pycrypto-2.6.1tar.gz
    cd pycrypto-2.6.1
    python setup.py install
     
    3、安装paramiko:
     
    tar -xzvf paramiko-2.0.2.tar.gz
    cd paramiko-2.0.2
    python setup.py install
     
    4、安装pexpect:
     
    tar -zxvf pexpect-2.3.tar.gz
    cd pexpect-2.3
    python setup.py install
     
    5、错误及应对方法:
    ######################################################################
    1、安装pycrypto
    从https://www.dlitz.net/software/pycrypto/下载tar包
    tar -xzvf pycrypto-2.6.1tar.gz
    cd pycrypto-2.6.1
    python setup.py build
    #提示缺少Python.h文件的解决办法
    #yum install python-devel.x86_64
    python setup.py install
    2、安装paramiko
    从https://pypi.python.org/pypi/paramiko/2.0.2下载tar包
    tar -xzvf paramiko-2.0.2.tar.gz
    cd paramiko-2.0.2
    python setup.py build
    #提示错误:error: Installed distribution cffi 0.8.6 conflicts with requirement cffi>=1.4.1
    #下载安装cffi :https://pypi.python.org/pypi/cffi/
    #tar -xzvf cffi-1.8.2.tar.gz
    #cd cffi_1.8.2
    #python setup.py build
    #提示错误:fatal error: ffi.h: No such file or directory
    #安装:yum install libffi-devel
    #python setup.py install
    #cd ..
    python setup.py install
    #提示错误:fatal error: openssl/opensslv.h: No such file or directory
    #yum install openssl-devel
    python setup.py install
    ######################################################################

    转载于:https://www.cnblogs.com/rileyoung/p/5897293.html

    展开全文
  • import os import sys import paramiko from stat import S_ISDIR class SSHSession: def __init__(self, ip, name, PWD): print 'SSH init...' self.client = paramiko.SSHClient() ...
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import os
    import sys
    import paramiko
    from stat import S_ISDIR
    
    class SSHSession:
    
        def __init__(self, ip, name, PWD):
            print 'SSH init...'
            self.client = paramiko.SSHClient()
            # 自动接受远程服务器host key
            self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            self.client.connect(ip, username=name, password=PWD)
            self.sftp = paramiko.SFTPClient.from_transport(self.client.get_transport())
            self.sftp = self.client.open_sftp()
    
        def getRemoteFile(self, remotefile, localfile):
            self.sftp.get(remotefile, localfile)
    
        def get_all_files_in_remote_dir(self, remote_dir):
            all_files = list()
            if remote_dir[-1] == '/':
                remote_dir = remote_dir[0:-1]
            remoteFiles = self.sftp.listdir_attr(remote_dir)
            for remoteFile in remoteFiles:
                filename = remote_dir + '/' + remoteFile.filename
                if S_ISDIR(remoteFile.st_mode):
                    all_files.extend(self.get_all_files_in_remote_dir(filename))
                else:
                    all_files.append(filename)
    
            print "all_files", all_files
            return all_files
    
        def get_all_files_in_local_dir(self, local_dir):
            all_files = list()
            print local_dir
            print local_dir[-2]
            if local_dir[-1:] == "\\":
                local_dir = local_dir[0:-1]
            # local_dir = local_dir[0:-1]
            localFiles = os.listdir(local_dir)
            print "1 localFiles:", localFiles
            for localFile in localFiles:
                # filename = local_dir + '//' + localFile.filename
                filename = os.path.join(local_dir, localFile)
                print filename
                if os.path.isdir(filename):
                    #list param
                    all_files.extend(self.get_all_files_in_local_dir(filename))
                else:
                    #object
                    all_files.append(filename)
            print "2 all_files:", all_files
            return all_files
        def copyRemoteFolder(self, remote_dir, local_dir):
            all_files = self.get_all_files_in_remote_dir(remote_dir)
            for fullfilename in all_files:
                remoteFilePath, filename = os.path.split(str(fullfilename))
                local_path = os.path.join(local_dir, remoteFilePath.split('/')[-1])
                if not os.path.exists(local_path):
                    os.makedirs(local_path)
                local_filename = os.path.join(local_path, filename)
                print 'get files %s transporting...' % filename
                self.sftp.get(fullfilename, local_filename)
    
        def sendCommand(self, command):
            if self.client:
                channel = self.client.get_transport().open_session()
                channel.exec_command(command)
                return channel
            print 'Connection not opened.'
    
        def checkSSHconnection(self):
            if self.client:
                try:
                    self.client.exec_command('ls', timeout=0.5)
                    return True
                except Exception as e:
                    print 'Connection lost : %s' % e
                    return False
    
        def closeSSH(self):
            self.sftp.close()
            self.client.close()
    
        def __put_all_file(self, local_dir):
    #         save all files list
            all_files = list()
    
            files = os.listdir(local_dir)
            for i in files:
    #             
                filename = os.path.join(local_dir, i)
    #             
                if os.path.isdir(i):
                    all_files.extend(self.__put_all_file(filename))
                else:
                    all_files.append(filename)
    
            return all_files
    
        def put_dir(self, local_dir, remote_dir):
            # 去掉字符串最后的字符
            if remote_dir[-1] == '/':
                remote_dir = remote_dir[0:-1]
            # 获取本地指定的目录及目录下的文件
            all_files = self.get_all_files_in_local_dir(local_dir)
            for i in all_files:
                filename = os.path.split(i)[-1]
                print local_dir,remote_dir
                remote_file = os.path.split(i)[0].replace(local_dir, remote_dir)
                path = remote_file.replace("\\", "/")
                print 'filename:' + filename
                print remote_file
    
                self.client.exec_command('mkdir -p ' + path)
                remote_filename = path + '/' + filename
                print u'Put files...' + filename
                self.sftp.put(i, remote_filename)
    
    
                # remote_filename = remote_dir + '/' + filename
                # print(u'Put文件{}传输中...'.format(filename))
                # self.sftp.put(i, remote_filename)
    
    
    def main():
        SSH = SSHSession('192.168.56.101', 'root', 'suming')
        if SSH.checkSSHconnection():
            # SSH.copyRemoteFolder('/home/frank/log_test/', 'C:\\APP\\tool')
            SSH.put_dir('C:\\APP\\tool', '/home/frank/log_test/')
            # SSH.get_all_files_in_local_dir("C:\\APP\\tool\\")
        # for line in stdout:
        #     print(line)
        SSH.closeSSH()
    if __name__ == '__main__':
    
        main()
    
    展开全文
  • 远程连接Linux主机,执行命令、创建目录、上传及下载文件 #!/usr/bin/python #coding:utf-8 import paramiko from fabric.api import env,put,get import threading class Host: def __init__(self,ip,user...
    远程连接Linux主机,执行命令、创建目录、上传及下载文件
    

    #!/usr/bin/python
    #coding:utf-8

    import paramiko
    from fabric.api import env,put,get
    import threading

    class Host:
    def __init__(self,ip,user,password):
    self.user=user
    self.ip=ip
    self.password=password

    #执行远程指令

    def run(self,cmd):
    try:
    ssh=paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(self.ip,username=self.user,password=self.password)
    for m in cmd:
    stdin,stdout,stderr=ssh.exec_command(m)
    print stdout.read()
    print "Check Status: %s\tOK\n"%(self.ip)
    ssh.close()
    except:
    print "%s\tError\n"%(self.ip)

     

    #创建目录

    def mkdir(self):
    try:
    ssh=paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(self.ip,username=self.user,password=self.password)
    sftp = ssh.open_sftp()
    sftp.mkdir("remote_check")
    print "Create folder 'remote_check' in remote hosts successfully!\n"
    ssh.close()
    except:
    print "Create folder failure!\n"

     

    #上传本地文件

    def upload(self,uSRC,uDST):
    env.user=self.user
    env.password=self.password
    env.host_string=self.ip
    put("%s" %(uSRC),"%s" %(uDST))
    print "Upload local file : \"%s\" to Host : %s \"%s\"\n" %(uSRC,self.ip.split(':')[0],uDST)

     

    #从远程主机下载文件到本地主机

    def download(self,dSRC,dDST):
    env.user=self.user
    env.password=self.password
    env.host_string=self.ip
    get("%s" %(dSRC),"%s" %(dDST))
    print "Download remote file from : \"%s\" to : %s \"%s\"\n" %(dDST,self.ip.split(':')[0],dSRC)

     

    if __name__ == '__main__':
    t=Host("192.168.142.101","root","passwd")
    print "Begin......\n"
    t.mkdir()
    t.upload("/home/test/1.txt","/home/remote_check")
    t.download("/home/2.txt","/home/test/2.txt")
    cmd = ["whoami","ls","rm -rf /home/1.txt"]
    t.run(cmd)

    less is beautiful
    展开全文
  • 安装paramiko标准库 pip install pycrypto pip install paramiko ...使用密码连接 linux 并执行命令 #!/usr/bin/python3 # -*- coding: UTF-8 -*- import paramiko def sshclient_execm...

    安装paramiko标准库

    pip install pycrypto

    pip install paramiko

    pip3 install pexpect

     

     

     

    使用密码连接 linux 并执行命令

     

    #!/usr/bin/python3

    # -*- coding: UTF-8 -*-

     

    import paramiko

     

    def sshclient_execmd(hostname, port, username, password, *execmd):

        #paramiko.util.log_to_file("paramiko.log") #日志路径

        for execmd_cmd in execmd:

            s = paramiko.SSHClient()  # 绑定实例

            s.set_missing_host_key_policy(paramiko.AutoAddPolicy())  # 允许连接不在know_hosts文件中的主机

            s.connect(hostname=hostname, port=port, username=username, password=password)  # 连接远程主机

            stdin, stdout, stderr = s.exec_command (execmd_cmd)  #执行需要执行的Linux命令

            stdin.write("Y")

            b = (stdout.read())

            string=b.decode('utf-8','ignore')  #将bytes 转为 字符串

            print(string)

        s.close()  #退出连接

        return

     

    hostname = '2.2.2.129'

    port = 22

    username = 'root'

    password = '123456'

    execmd1 = "mkdir -p /opt/123456"

    execmd2 = "touch /opt/123456/test.txt"

    execmd3 = "ls -l /opt/123456/test.txt"

    execmd4 = "fdisk -l"

    execmd5 = "df -h"

    sshclient_execmd(hostname, port, username, password, execmd1,execmd2,execmd3,execmd4,execmd5)

     

    使用密钥连接 linux 并进行文件传输

    import paramiko

    import sys,os

    host='127.0.0.1'

    user = 'whl'

    s = paramiko.SSHClient()

    s.load_system_host_keys()

    s.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    privatekeyfile = os.path.expanduser('~/.ssh/id_rsa')             # 定义key路径

    mykey = paramiko.RSAKey.from_private_key_file(privatekeyfile)

    # mykey=paramiko.DSSKey.from_private_key_file(privatekeyfile,password='061128')   # DSSKey方式 password是key的密码

    s.connect(host,22,user,pkey=mykey,timeout=5)

    cmd=raw_input('cmd:')

    stdin,stdout,stderr = s.exec_command(cmd)

    cmd_result = df -h ,fdisk -l

    for line in cmd_result:

            print line,

    s.close()

     

    使用密码连接 linux 并进行文件传输

    import os

    import paramiko

    host='127.0.0.1'

    port=22

    user = 'whl'

    password = '123456'

    ssh=paramiko.Transport((host,port))

    privatekeyfile = os.path.expanduser('~/.ssh/id_rsa')

    mykey = paramiko.RSAKey.from_private_key_file( os.path.expanduser('~/.ssh/id_rsa'))   # 加载key 不使用key可不加

    ssh.connect(username=username,password=password)           # 连接远程主机

    # 使用key把 password=password 换成 pkey=mykey

    sftp=paramiko.SFTPClient.from_transport(ssh)               # SFTP使用Transport通道

    sftp.get('/etc/passwd','pwd1')                             # 下载 两端都要指定文件名

    sftp.put('pwd','/tmp/pwd')                                 # 上传

    sftp.close()

    ssh.close()

    展开全文
  • python如何连接linux执行linux命令

    千次阅读 2019-04-04 11:30:41
    import paramiko from pymysql import connect,cursors try: # 建立一个sshclient对象 ssh = paramiko.SSHClient() # 允许将信任的主机自动加入到host_allow 列表,此方法必须放在connect方法的前面 ...
  • 采用如下方式, 首先创建SSHClient对象...3.调用exec_command函数,在远程机执行相关操作 4.关闭连接 #!/usr/bin/env python #-*- coding:utf-8 -*- import paramiko HostIP = '192.168.1.1' username = 'ro...
  • Python之连接linux并执行命令

    千次阅读 2016-11-10 18:51:41
    Python之连接linux并执行命令 1.安装模块paramiko,下载地址: http://download.csdn.net/detail/clean_water/9679325 2.实例代码 -------------------------------------------------- #!/usr/bin/env ...
  • python使用paramiko远程操作linux服务器的例子,网络上有非常多详细的资源,这里也是相同的方法,只不过根据需要,实现远程执行多条命令; 例1:SSH远程连接linux操作系统,并执行多条命令,每次连接执行一条命令,...
  • python脚本中执行Linux命令行

    千次阅读 2019-06-20 08:44:26
    常用模块 import os import subprocess os.system('free -h') subprocess.call('top')
  • Python3 执行Linux Bash命令

    万次阅读 2017-08-19 10:59:58
    和之前C++执行Linux Bash命令 一样,Python依然支持system调用和popen()函数来执行linux bash命令。方法一:system调用#仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息 import os os.system('ls')...
  • 注意要在终端中执行命令python test.py os.system(cmd) 返回值为0:代表成功;1:代表失败 os.popen(cmd) 将执行结果返回,但是测试表示没有,具体原因后期记得更新 连续执行多条命令 os.popen("cd.. &...
  • python执行linux命令并返回执行结果

    万次阅读 2018-10-12 18:42:00
    需要得到命令执行的状态则需要判断$?的值, 在Python中有一个模块commands也很容易做到以上的效果 看一下三个函数: 1). commands.getstatusoutput(cmd) # 此函数也可以执行编译好的文件,cmd='./a.out' 用os.popen()...
  • python3执行linux命令

    千次阅读 2017-08-31 09:47:17
    本文主要实现在linux环境下通过python3执行linux命令
  • Linux下查看python版本号

    万次阅读 2018-08-24 09:06:02
    方法一 执行命令python -V 方法二 执行命令:whereis python 方法三 执行命令python
  • Linux shell脚本执行Python脚本

    万次阅读 2017-04-17 16:18:41
    今天想做个定时器,用shell脚本执行Python脚本 shell 里面是这样写python main.py 之后就报错误 :No module named 看了一篇博客解决了问题: 使用Python的时候最好指定地址:/usr/local/bin/python2.7 main.py...
  • 天天
  • 我们使用Python如何调用Linux的Shell命令: 如在linux系统下,直接import os 模块即可下面介绍下如何在windows下使用python远程调用Sehll1.登录到远程linux服务器需要导入模块import paramiko2.定义函数,登录操作...
  • python中,运行Linux命令运行正确获取运行结果,运行错误获取错误提示 subprocess模块—Popen command = "ping -c 1 baidu.com " back = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE,stderr=...
  • python脚本在linux运行的两种方式

    万次阅读 2018-08-22 14:41:56
    1、直接使用python xxxx.py执行。其中python可以写成python的绝对路径。使用which python进行查询。   2、在文件的头部(第一行)写上#!/usr/bin/python2.7,这个地方使用python的绝对路径,就是上面用which ...
  • Linux执行Python脚本

    万次阅读 多人点赞 2019-07-04 23:48:33
    1.Linux Python环境 Linux系统一般集成Python,如果没有安装,可以手动安装,联网状态下可直接安装。Fedora下使用yum install,Ubuntu下使用apt-get install,前提都是root权限。安装完毕,可将Python加入环境变量...
1 2 3 4 5 ... 20
收藏数 203,504
精华内容 81,401
热门标签
关键字:

python登录linux并执行命令