最近在学习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
原文章链接:
阅读(10649) | 评论(0) | 转发(0) |