python远程连接linux主机_python怎么远程连接linux主机进行相关操作 - CSDN
精华内容
参与话题
  • Python 远程连接Linux服务器(一)

    千次阅读 2020-03-15 21:04:01
    python安装paramiko 远程连接操作linux服务器是很好的选择。 二、依赖包 在安装paramiko前需要先安装三个依赖包。 1、1 在windows中使用cmd命令安装方式 1、安装依赖包 pip3 install ecdsa...

    Python  远程连接服务器

    一、绪论

    在python项目中需要远程操作linux服务器,在服务器上进行文件的拷贝以及linux命令操作。给python安装paramiko 远程连接操作linux服务器是很好的选择。

    二、依赖包

    在安装paramiko前需要先安装三个依赖包。

    1、1 在windows中使用cmd命令安装方式

    1、安装依赖包
    pip3 install ecdsa
    pip3 install Crypto
    pip3 install Twisted
    2、安装paramiko
    pip3 install paramiko
    

    1、2 使用python工具安装

    1、在pyCharm工具依次点击:File---setting---Project

    2、在Project中找到自己的项目,点击Interpreter

    搜索插件,安装

     

    1.3 paramiko 安装完成后,即可编写脚本远程连接。

    三、远程ssh连接服务器方式一

    第一种方式:

    这种方式比较简单,没有进行封装。单纯的实现了远程连接linux服务器。下面还有一种方式,是在这个方式的基础上将每个主要步骤做了封装,方便业务调用。

    import paramiko
    class ConnectShell:
    
        def remotConnect(self):
            # 服务器相关信息,下面输入你个人的用户名、密码、ip等信息
            ip = "192.168.1.110"
            port = 22
            user = "root"
            password = "123456"
    
            # 创建SSHClient 实例对象
            ssh = paramiko.SSHClient()
            # 调用方法,表示没有存储远程机器的公钥,允许访问
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            # 连接远程机器,地址,端口,用户名密码
            ssh.connect(ip, port, user, password, timeout=10)
            # 输入linux命令
            ls = "ls"
            stdin, stdout, stderr = ssh.exec_command(ls)
            # 输出命令执行结果
            result = stdout.read()
            print(result)
            # 关闭连接
            ssh.close()
    

    四、远程ssh连接服务器方式二

    这个方式是在上面的第一种方式上进行了封装。

    4.1定义一个linux类实现连接远程连接linux服务器 

    import paramiko
    import re
    from time import sleep
    # 定义一个类,表示一台远端linux主机
    class Linux(object):
        # 通过IP, 用户名,密码,超时时间初始化一个远程Linux主机
        def __init__(self, ip, username, password, timeout=30):
            self.ip = ip
            self.username = username
            self.password = password
            self.timeout = timeout
            # transport和chanel
            self.t = ''
            self.chan = ''
            # 链接失败的重试次数
            self.try_times = 3
    
        # 调用该方法连接远程主机
        def connect(self):
            while True:
                # 连接过程中可能会抛出异常,比如网络不通、链接超时
                try:
                    self.t = paramiko.Transport(sock=(self.ip, 22))
                    self.t.connect(username=self.username, password=self.password)
                    self.chan = self.t.open_session()
                    self.chan.settimeout(self.timeout)
                    self.chan.get_pty()
                    self.chan.invoke_shell()
                    # 如果没有抛出异常说明连接成功,直接返回
                    print(u'连接%s成功' % self.ip)
                    # 接收到的网络数据解码为str
                    print(self.chan.recv(65535).decode('utf-8'))
                    return
                # 这里不对可能的异常如socket.error, socket.timeout细化,直接一网打尽
                except Exception:
                    if self.try_times != 0:
                        print(u'连接%s失败,进行重试' % self.ip)
                        self.try_times -= 1
                    else:
                        print(u'重试3次失败,结束程序')
                        exit(1)
    
        # 断开连接
        def close(self):
            self.chan.close()
    
            self.t.close()
    
        # 发送要执行的命令
        def send(self, cmd,pattern):
            cmd += '\r'
            # 通过命令执行提示符来判断命令是否执行完成
            patt = pattern
            p = re.compile(patt)
            result = ''
            # 发送要执行的命令
            self.chan.send(cmd)
            # 回显很长的命令可能执行较久,通过循环分批次取回回显
            while True:
                sleep(0.5)
                ret = self.chan.recv(65535)
                ret = ret.decode('utf-8')
                result += ret
                if p.search(ret):
                    print(result)
                    return result
    
    #测试linux类代码
    # if __name__ == '__main__':
    #      host = Linux('192.168.1.106', 'long', 'long')
    #      host.connect()
    #      host.send('su root',r'.*(]#|密码).*')
    #      host.send('123456')
    #      host.send('pwd')
    #      host.close()

    4.2定义一个App类调用linux类根据业务需求传入不同的参数实现业务不同的功能。(此时linux类作为一个工具类)

    from common.connectionLinux.Linux import Linux
    
    class App(object):
        #主节点服务器IP地址
        MASTIP = '192.168.1.106'
        #多个服务器IP地址
        IPlist = ['192.168.1.107','192.168.1.108','192.168.1.110']
    
        def __init__(self):
            self.host = Linux(self.MASTIP, 'long', 'long')
        #非root账户登录
        def connect(self):
            self.host.connect()
    
        #切换root账户登录
        def sendCmdRoot(self):
            pattern1 = r'.*(密码).*'
            pattern2 = r'.*(]#).*'
            cmd1 = 'su root'
            cmd2 = '123456'
            self.host.send(cmd1,pattern1)
            self.host.send(cmd2,pattern2)
    
        #子节点文件拷贝到主节点
        def copyCmd(self):
            for ip in self.IPlist:
                print(ip)
    
            pattern = r'.*(]#).*'
            cmd = 'scp root@'+ip+':/home/long/test.txt /home/long'
            print(cmd)
            self.host.send(cmd,pattern)
    
    
    
    
    
    
    
    if __name__ == '__main__':
        #连接linux
        app = App()
        # app.connect()
        # app.sendCmdRoot()
        app.copyCmd()
    
    
    

     

    展开全文
  • 采用如下方式, 1. 首先创建SSHClient对象,...3.调用exec_command函数,在远程机执行相关操作 4.关闭连接 #!/usr/bin/env python #-*- coding:utf-8 -*- import paramiko HostIP = '192.168.1.1' username = 'roo

    采用如下方式,

    1. 首先创建SSHClient对象,ssh

    2.使用ssh对象,调用connect函数建立连接

    3.调用exec_command函数,在远程机执行相关操作

    4.关闭连接

    #!/usr/bin/env python
    #-*- coding:utf-8  -*-
    
    import paramiko
    
    HostIP = '192.168.1.1'
    username = 'root'
    passwd = '******'
    
    
    def run():
        try:
           ssh = paramiko.SSHClient()
           ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
           ssh.connect(HostIP,22,username,passwd)
    
           ssh.exec_command('echo "test" >> /a.txt')
           print "check status %s OK\n" %HostIP
           ssh.close()
        except Exception as ex:
           print "\tError %s\n"% ex
    
    
    if __name__ == '__main__':
      print "begin"
      run()





    展开全文
  • 在运维工作中,我们经常使用 ssh 工具远程登陆主机来执行命令,对...概述功能:实现同时对多台linux服务器通过ssh执行同一命令。技术基础: python pexpect paramiko等模块,部支持windows。参数:固定参数pwd:远程...

    在运维工作中,我们经常使用 ssh 工具远程登陆主机来执行命令,对系统进行维护。在python的自动化运维中,要执行系统命令,最方便的还是借助于 python 的 ssh 功能编写日常脚本,简化工作。下面我们说下这个工具。

    概述

    • 功能:实现同时对多台linux服务器通过ssh执行同一命令。

    • 技术基础: python pexpect paramiko等模块,部支持windows。

    • 参数:

      • 固定参数pwd:远程服务器密码,用户名目前写死是root,可自行修改。

      • 可选参数-c CMDS:要执行的命令,比如:"ls -l","cd /home/test && test.py&如果不选择,会从当前目前的cmd.txt读取。

      • 可选参数-s SERVERS:目标服务器,比如192.168.1.100,最后一位数可以用-表示一个区间,分号用于分割不同的ip。如果不选择,会从当前目前的ip.txt读取。

    【前期方案思路准备】

    跟ssh效果一样 那就python直接执行shell命令(若要在ssh登陆里面(会话),那只能用python调用shell脚本)

    目前python还没有直接去操作linux的模块  需要登陆然后执行命令的 ssh、parameko和pexpect模块是同一个类型的

    目前开源的用python写的批量管理linux服务器的工具有ansible或者saltstack等类似的

    若以上功能还不满足需求等你python学到家了 你就自己写个模块 自己调用就可以定制作开发了

    【系统环境准备】

    试验系统类型:centos/Ubuntu,其他机器类型可以作参考

    1). Linux系统首先要开启SSH服务:service ssh status

    如果没安装的话,则要:apt-get install openssh-server

    service ssh restart

    2).python最好选用2.7.x或者3.4.*或者3.6.*版本,然后使用pip安装相应的第三方模块/库 

    pip install paramiko

    pip install pexpect

    pip install pycrypto

    以centos7为例先安装必须的模块

    # yum install python-dev

    # yum install python-devel

    # pip install pycrypto

    # pip install paramiko

    # pip install ssh

    用python SSH模块登录,并在远程机执行shell命令

    3).三种方案的简单介绍

    • Python直接调用SSH模块
    • 利用paramiko模块实现登陆操作
    • Python中 pexpect 模块的pxssh 类(它用于处理一些自动化的需求,比如ssh和ftp

    更多脚本参考:https://www.cnblogs.com/kex1n/p/5988820.html

    python实现ssh及sftp功能 - 爱笑的程序员  https://www.cnblogs.com/fang123456/p/7235688.html

    Python SSH 的远程连接并执行命令和下载文件 -http://blog.csdn.net/syshzbtt/article/details/78069879

    使用python远程操作linux服务器  http://blog.csdn.net/u010781856/article/details/47018413

    用python SSH模块登录,并在远程机执行shell命令 http://blog.csdn.net/mingzznet/article/details/52912118

    技术|用Python来SSH连接到你的机器 https://linux.cn/article-2090-1.html

    参考资料

    展开全文
  • 采用如下方式, 首先创建SSHClient对象...3.调用exec_command函数,在远程机执行相关操作 4.关闭连接 #!/usr/bin/env python #-*- coding:utf-8 -*- import paramiko HostIP = '192.168.1.1' username = 'ro...

    采用如下方式,

    1. 首先创建SSHClient对象,ssh

    2.使用ssh对象,调用connect函数建立连接

    3.调用exec_command函数,在远程机执行相关操作

    4.关闭连接

    #!/usr/bin/env python
    #-*- coding:utf-8  -*-
    
    import paramiko
    
    HostIP = '192.168.1.1'
    username = 'root'
    passwd = '******'
    
    
    def run():
        try:
           ssh = paramiko.SSHClient()
           ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
           ssh.connect(HostIP,22,username,passwd)
    
           ssh.exec_command('echo "test" >> /a.txt')
           print "check status %s OK\n" %HostIP
           ssh.close()
        except Exception as ex:
           print "\tError %s\n"% ex
    
    
    if __name__ == '__main__':
      print "begin"
      run()
    展开全文
  • import paramiko host = "192.168.180.126" # 需要远程的PC port = 22 # 远程端口 user = "...# 建立SSH连接 ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko...
  • 我们使用Python如何调用Linux的Shell命令: 如在linux系统下,直接import os 模块即可下面介绍下如何在windows下使用python远程调用Sehll1.登录到远程linux服务器需要导入模块import paramiko2.定义函数,登录操作...
  • 详情见:https://www.cnblogs.com/python-nameless/p/6855804.html
  • 在我之前的一篇博文《python基于paramiko模块实现远程连接Linux虚拟机(服务器)并执行指定命令返回输出结果》中,使用paramiko模块实现了远程连接Linux服务器,并执行内存占用情况查询操作的命令,但是在很多时候...
  • 最近做爬虫是,经常出现ConnectionResetError: [WinError 10054] 等错误,主要是因为使用urlopen方法太过频繁,引起远程主机的怀疑,被网站认定为是攻击行为,导致urlopen()后,request.read()一直卡死在那里,导致...
  • 最近在写Python脚本的时候,需要一个功能就是使用ssh登录Linux主机A,然后在主机A上执行scp命令将主机上的文件自动给拷贝到Linux主机B上。远程登录使用pycrypto和paramiko模块实现了,但是在执行scp命令的时候需要...
  • 获取远程主机MAC地址的方法

    千次阅读 2016-06-08 14:55:53
    一、获取局域网内主机MAC地址  命令行(linux): 1. 首先查找网段内开机的主机列表: sudo nmap -sP -PI -PT 192.168.1.0/24 2. 获取目标IP的MAC地址: arp -a 192.168.1.56 二、获取远程主机(非本...
  • python的自动化运维中,要执行系统命令,最方便的还是借助于 python 的 ssh 功能编写日常脚本,简化工作。下面我们说下这个工具。 import paramiko 开始看第一个例子,在远端机器上运行 ' iostat ' 命令...
  • 使用Python实现Telnet远程登录

    千次阅读 2017-03-22 22:41:51
    使用Python实现Telnet远程登录  by0x0021 2013-03-25 18:06:07 ...'''Telnet远程登录:Windows客户端连接Linux服务器'''  # 配置选项 Host = '192.168.1.2' # Telnet服务器IP serna
  • Linux远程连接windows,执行命令

    万次阅读 2014-06-17 09:51:04
    起源于某人工作上的一个问题。
  • python socket.error: [Errno 10054] 远程主机强迫关闭了一个现有的连接。问题解决方案:前几天使用python读取网页。因为对一个网站大量的使用urlopen操作,所以会被那个网站认定为攻击行为。有时就不再允许下载。...
  • pycharm远程连接服务器运行代码加调试

    万次阅读 多人点赞 2018-11-08 09:44:33
    所以解决办法是利用windows中安装的pycharm远程连接linux服务器。 1、设置远程连接配置 依次打开这三个箭头的指向,打开配置面板。 在配置面板中可以为你当前的连接起一个名称,这个名称是用于给你区分你连接...
  • Python3 SSH远程连接服务器

    千次阅读 2018-11-08 17:24:26
    首先,我的windows系统上有python2和python3。使用下面命令切换到python3: activate py3 接着使用下面命令下载相关模块: pip install ecdsa pip install Crypto pip install paramiko 连接服务器操作: # -*- ...
  • 在这篇文章中,主要谈及如何利用ssh-keygen生成密匙对,并且在windows本地机利用密匙远程连接linux主机,而代码将用python来实现。 1. ssh-keygen 1.1SSH密钥 SSH密钥可以认为是和另一台电脑通信时的唯一的识别证...
  • 1.linux服务器 安装mysql: apt-get install mysql-server #Root用户安装mysql以及相关服务  apt-get install mysql-client  apt-get install libmysqlclient-dev 安装mysql—server 要设置登录用户的密码。 ...
  • 
 
 
 
 
 
 
 最近碰到的项目大多是多种语言与python混合编程,C、C++、Python等语言的编译环境linu...
1 2 3 4 5 ... 20
收藏数 26,589
精华内容 10,635
关键字:

python远程连接linux主机