最近在学习python,自己在写一个自动化运维平台,所以接触到了这个模块,有2种方法;
一种是直接用密码来登录的,具体代码如下:
- ssh = paramiko.SSHClient()
- ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
- ssh.connect(hostname, port, username, password)
- stdin, stdout, stderr = ssh.exec_command('ls -l')
- print stdout.read().strip()
- ssh.close()
还有一种是用密钥来登录的,也就是不用密码,代码如下:
- ssh=paramiko.SSHClient()
- ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
- ssh.load_system_host_keys(know_host)
- ssh.connect(hostname,port,username,key_file)
- stdin,stdout,sterr=s.exec_command(command)
- print stdout.read().strip()
- ssh.close()
如果用密钥登录,需要自己手动生成密钥的,利用paramiko上传和下载文件我就不说了,网上一大堆,这里说说关于paramiko的登录之后切换帐号的问题。
一般我们的服务器是不允许直接root登录的,所以我们要用普通帐号登录之后,在用su – root切换到root帐号。我在这里纠结了好久才找到解决办法,贴出来给大家做个参考。
- def verification_ssh(host,username,password,port,root_pwd,cmd):
- s=paramiko.SSHClient()
- s.load_system_host_keys()
- s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
- s.connect(hostname = host,port=int(port),username=username, password=password)
- if username != 'root':
- ssh = s.invoke_shell()
- time.sleep(0.1)
- ssh.send('su - \n')
- buff = ''
- while not buff.endswith('Password: '):
- resp = ssh.recv(9999)
- buff +=resp
- ssh.send(root_pwd)
- ssh.send('\n')
- buff = ''
- while not buff.endswith('# '):
- resp = ssh.recv(9999)
- buff +=resp
- ssh.send(cmd)
- ssh.send('\n')
- buff = ''
- while not buff.endswith('# '):
- resp = ssh.recv(9999)
- buff +=resp
- s.close()
- result = buff
- else:
- stdin, stdout, stderr = s.exec_command(cmd)
- result = stdout.read()
- s.close()
- return result
原文章链接: http://www.linuxyan.com/shell/252.html