Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5119220
  • 博文数量: 921
  • 博客积分: 16037
  • 博客等级: 上将
  • 技术积分: 8469
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-05 02:08
文章分类

全部博文(921)

文章存档

2020年(1)

2019年(3)

2018年(3)

2017年(6)

2016年(47)

2015年(72)

2014年(25)

2013年(72)

2012年(125)

2011年(182)

2010年(42)

2009年(14)

2008年(85)

2007年(89)

2006年(155)

分类: Python/Ruby

2013-08-16 15:29:17

最近在学习python,自己在写一个自动化运维平台,所以接触到了这个模块,有2种方法;

一种是直接用密码来登录的,具体代码如下:

  1. ssh = paramiko.SSHClient()
  2. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  3. ssh.connect(hostname, port, username, password)
  4. stdin, stdout, stderr = ssh.exec_command('ls -l')
  5. print stdout.read().strip()
  6. ssh.close()

还有一种是用密钥来登录的,也就是不用密码,代码如下:



  1. ssh=paramiko.SSHClient()
  2. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  3. ssh.load_system_host_keys(know_host)
  4. ssh.connect(hostname,port,username,key_file)
  5. stdin,stdout,sterr=s.exec_command(command)
  6. print stdout.read().strip()
  7. ssh.close()

如果用密钥登录,需要自己手动生成密钥的,利用paramiko上传和下载文件我就不说了,网上一大堆,这里说说关于paramiko的登录之后切换帐号的问题。

一般我们的服务器是不允许直接root登录的,所以我们要用普通帐号登录之后,在用su – root切换到root帐号。我在这里纠结了好久才找到解决办法,贴出来给大家做个参考。


  1. def verification_ssh(host,username,password,port,root_pwd,cmd):
  2.     s=paramiko.SSHClient()
  3.     s.load_system_host_keys()
  4.     s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  5.     s.connect(hostname = host,port=int(port),username=username, password=password)
  6.     if username != 'root':
  7.         ssh = s.invoke_shell()
  8.         time.sleep(0.1)
  9.         ssh.send('su - \n')
  10.         buff = ''
  11.         while not buff.endswith('Password: '):
  12.             resp = ssh.recv(9999)
  13.             buff +=resp
  14.         ssh.send(root_pwd)
  15.         ssh.send('\n')
  16.         buff = ''
  17.         while not buff.endswith('# '):
  18.             resp = ssh.recv(9999)
  19.             buff +=resp
  20.         ssh.send(cmd)
  21.         ssh.send('\n')
  22.         buff = ''
  23.         while not buff.endswith('# '):
  24.             resp = ssh.recv(9999)
  25.             buff +=resp
  26.         s.close()
  27.         result = buff
  28.     else:
  29.         stdin, stdout, stderr = s.exec_command(cmd)
  30.         result = stdout.read()
  31.         s.close()
  32.     return result


原文章链接:

 

阅读(10649) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~