当前位置:Gxlcms > Python > Python使用Paramiko模块编写脚本进行远程服务器操作

Python使用Paramiko模块编写脚本进行远程服务器操作

时间:2021-07-01 10:21:17 帮助过:59人阅读

简介:
paramiko是python(2.2或更高)的模块,遵循SSH2协议实现了安全(加密和认证)连接远程机器。
安装所需软件包:
http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.5.tar.gz
http://www.lag.net/paramiko/download/paramiko-1.7.7.1.tar.gz

  1. tar zxvf pycrypto-2.5.tar.gz
  2. cd pycrypto-2.5
  3. python setup.py build
  4. python setup.py install
  5. tar zxvf paramiko-1.7.7.1.tar.gz
  6. cd paramiko-1.7.7.1
  7. python setup.py build
  8. python setup.py install

脚本简单编写:
管理单台服务器:

脚本一:查询172.16.22.23磁盘使用情况

  1. #!/usr/bin/python
  2. import paramiko
  3. hostname="172.16.22.23"
  4. port=22
  5. username="root"
  6. password="larryroot"
  7. if __name__=="__main__":
  8. s=paramiko.SSHClient()
  9. s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  10. s.connect(hostname,port,username,password)
  11. stdin,stdout,sterr=s.exec_command("df -Th")
  12. print stdout.read()
  13. s.close()


脚本二:在远程服务器上执行相应命令

  1. #!/usr/bin/python
  2. #by larry
  3. #2011/01/30
  4. import sys
  5. import paramiko
  6. hostname=sys.argv[1]
  7. command = " ".join(sys.argv[2:])
  8. port=22
  9. username="root"
  10. password="larryroot"
  11. if __name__=="__main__":
  12. s=paramiko.SSHClient()
  13. s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  14. s.connect(hostname,port,username,password)
  15. stdin,stdout,sterr=s.exec_command(command)
  16. print stdout.read()
  17. s.close()

使用方法:

  1. python single1.py ip地址 命令
  2. [root@localhost ~]# python single1.py 172.16.22.23 df -TH

  1. Filesystem Type Size Used Avail Use% Mounted on
  2. /dev/sda2 ext3 13G 6.0G 5.7G 52% /
  3. /dev/sda1 ext3 104M 12M 87M 13% /boot
  4. tmpfs tmpfs 61M 0 61M 0% /dev/shm
  5. /dev/sda4 ext3 7.6G 465M 6.8G 7% /data
  6. /dev/sdb1 ext3 32G 5.9G 25G 20% /autocd
  7. [root@localhost ~]# python single1.py 172.16.22.23 free -m
  8. total used free shared buffers cached
  9. Mem: 114 112 2 0 26 35
  10. -/+ buffers/cache: 50 64
  11. Swap: 1027 0 1027

脚本三:管理多台服务器:批量查询ip列表中对应服务器的磁盘使用情况

  1. #!/usr/bin/python
  2. #by larry
  3. #2011/01/30
  4. import paramiko
  5. port=22
  6. username="root"
  7. file=open("ip.list")
  8. for line in file:
  9. hostname=str(line.split("\t")[1])
  10. password=str(line.split("\t")[4]).strip()
  11. print "##########################",hostname,"########################"
  12. s=paramiko.SSHClient()
  13. s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  14. s.connect(hostname,port,username,password)
  15. stdin,stdout,sterr=s.exec_command("df -Th")
  16. print stdout.read()
  17. s.close()
  18. file.close()

用法:

  1. [root@localhost ~]# python ssh.py

  1. ############################ 172.16.22.22 ########################
  2. Filesystem Type Size Used Avail Use% Mounted on
  3. /dev/sda2 ext3 12G 5.6G 5.3G 52% /
  4. /dev/sda1 ext3 99M 12M 83M 13% /boot
  5. tmpfs tmpfs 58M 0 58M 0% /dev/shm
  6. /dev/sda4 ext3 7.1G 443M 6.3G 7% /data
  7. /dev/sdb1 ext3 30G 5.5G 23G 20% /autocd
  8. ############################ 172.16.22.23 ########################
  9. Filesystem Type Size Used Avail Use% Mounted on
  10. /dev/sda2 ext3 15G 2.6G 11G 19% /
  11. /dev/sda1 ext3 99M 12M 82M 13% /boot
  12. tmpfs tmpfs 60M 0 60M 0% /dev/shm
  13. /dev/sda4 ext3 33G 377M 31G 2% /data

ip.list文件内容:

  1. dx 172.16.22.22 22 root larryroot
  2. wt 172.16.22.23 22 root larryroot

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

  1. #!/usr/bin/python
  2. #by larry
  3. #2011/01/30
  4. import paramiko
  5. import sys
  6. port=22
  7. username="root"
  8. command = " ".join(sys.argv[1:])
  9. file=open("ip.list")
  10. for line in file:
  11. hostname=str(line.split("\t")[1])
  12. password=str(line.split("\t")[4]).strip()
  13. print "##################",hostname,"######################"
  14. s=paramiko.SSHClient()
  15. s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  16. s.connect(hostname,port,username,password)
  17. stdin,stdout,sterr=s.exec_command(command)
  18. print stdout.read()
  19. s.close()
  20. file.close()


用法:

  1. python ssh.py 命令

简单整理到这里通过python的paramiko模块可以很方便的管理服务器,文件的上传下载后续会整理出来。

SSH
下面是通过ssh的dsa或rsa公钥验证批量登录服务器执行命令:

  1. #!/usr/bin/python
  2. #2012/02/02 by larry
  3. import paramiko
  4. import sys,os
  5. port=22
  6. username="larry"
  7. key_file="~/.ssh/authorized_keys"
  8. know_host="/home/larry/.ssh/known_hosts"
  9. command=" ".join(sys.argv[1:]) ####获取命令行参数
  10. file=open("ip.list")
  11. for line in file:
  12. hostname=str(line.split(" ")[1]) ####截取ip字段
  13. print "#####################################",hostname,"###############################################"
  14. s=paramiko.SSHClient()
  15. s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  16. s.load_system_host_keys(know_host)
  17. s.connect(hostname,port,username,key_file)
  18. stdin,stdout,sterr=s.exec_command(command)
  19. print stdout.read().strip()
  20. s.close()
  21. file.close()


执行python脚本:

  1. python sshkey.py df -h

  1. ################172.16.22.22########################
  2. Filesystem Size Used Avail Use% Mounted on
  3. /dev/mapper/VolGroup00-LogVol00
  4. 14G 3.5G 9.7G 27% /
  5. /dev/mapper/VolGroup00-data
  6. 116G 47G 64G 43% /data
  7. /dev/cciss/c0d0p1 99M 13M 82M 14% /boot
  8. tmpfs 5.9G 0 5.9G 0% /dev/shm

人气教程排行