zoukankan      html  css  js  c++  java
  • python paramiko模块SSH自动登录linux系统进行操作

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

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

    service ssh restart

    2). pip install paramiko

    example 1:

    import paramiko
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect('192.168.80.139', username = 'allen', password = 'allen', timeout = 300)
    cmd = 'cd'
    stdin, stdout, stderr = ssh.exec_command(cmd)
    cmd = 'ls python'
    stdin, stdout, stderr = ssh.exec_command(cmd)
    print stdout.read()
    #for std in stdout.readlines():
    #    print std
    ssh.close()

    如果运行此脚本后“Multibackend cannot be initialized with no backends. If you are seeing this error when trying to use default_backend() please try uninstalling and reinstalling cryptography." 这个错误,那么就:

    pip uninstall paramiko
    pip install paramiko==1.17参考:http://stackoverflow.com/questions/37135521/paramiko-transport-throws-runtime-valueerror-while-connecting-to-remote-server-u

    脚本二在远程服务器上执行相应命令
    import sys
    import paramiko
     
    hostname = sys.argv[1]
    command = " ".join(sys.argv[2:])
    port=22
    username="allen"
    password="allen"
    if __name__=="__main__":
        s=paramiko.SSHClient()
        s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        s.connect(hostname,port,username,password)
        stdin,stdout,sterr=s.exec_command(command)
        print stdout.read()
        s.close()

    脚本三:管理多台服务器:批量查询ip列表中对应服务器的磁盘使用情况
    import paramiko
    port = 22
    username = "allen"
    file=open("ip.list")
    for line in file:
        hostname = str(line.split(" ")[1])
        password = str(line.split(" ")[4]).strip()
        print "##########################",hostname,"########################"
        s = paramiko.SSHClient()
        s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        s.connect(hostname, port, username, password)
        stdin,stdout,sterr = s.exec_command("df -Th")
        print stdout.read()
        s.close()
    file.close()

    ip.list内容:
    dx 192.168.0.1 22 root loveyou

    脚本四:类似于脚本二,在所有远程服务器上执行相应命令

    import paramiko
    import sys
    port=22
    username="root"
    command = " ".join(sys.argv[1:])
    file=open("ip.list")
    for line in file:
        hostname=str(line.split(" ")[1])
        password=str(line.split(" ")[4]).strip()
        print "##################",hostname,"######################"
        s=paramiko.SSHClient()
        s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        s.connect(hostname,port,username,password)
        stdin,stdout,sterr=s.exec_command(command)
        print stdout.read()
        s.close()
    file.close()


    下面是通过ssh的dsa或rsa公钥验证批量登录服务器执行命令:
    import paramiko
    import sys, os
    port = 22
    username = "root"
    key_file = "~/.ssh/authorized_keys"
    know_host = "/home/larry/.ssh/known_hosts"
    command = " ".join(sys.argv[1:]) ####获取命令行参数
    file = open("ip.list")
    for line in file:
        hostname = str(line.split(" ")[1]) ####截取ip字段
        print "#####################################",hostname,"###############################################"
        s = paramiko.SSHClient()
        s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        s.load_system_host_keys(know_host)
        s.connect(hostname, port, username, key_file)
        stdin, stdout, sterr = s.exec_command(command)
        print stdout.read().strip()
        s.close()
    file.close()
  • 相关阅读:
    prometheus,alertmanager 报警配置详解
    使用 kubeadm 搭建 kubernetes1.10 集群
    kibana-sentinl-监控报警
    ELK集群模式部署
    mongo 误操作恢复数据
    mongo 实时同步工具 mongosync
    移动端巨坑——iphone6Plus默认设置不使用sessionStorage
    iphone6 Plus seesionStorage失效
    移动端手势拖拽排序神器Sortable.js
    vue使用swiper(转)
  • 原文地址:https://www.cnblogs.com/kex1n/p/5988820.html
Copyright © 2011-2022 走看看