Python Paramiko模块

代码来自http://www.cnblogs.com/wupeiqi/articles/4356675.html

今天学到了一个运维方面的利器:python的paramiko模块。

paramiko可以远程连接服务器系统并执行相应操作

paramiko远程连接服务器的方式有两种:用户名密码连接、ssh_key连接。

先看使用用户名密码进行连接方法:

 1 #用户名和密码连接
 2 import paramiko
 3 
 4 #创建一个ssh对象
 5 ssh = paramiko.SSHClient()
 6 #允许连接不在know_hosts文件中的主机
 7 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 8 #连接服务器
 9 ssh.connect('192.168.1.22',port=22,username='root',password='123456')
10 #使用exex_command方法来执行要在服务器执行的命令,并返回一个元组(包含输入的命令,命令正确时的返回值,命令出错时出错信息)
11 stdin,stdout,stderr = ssh.exec_command('df -h')
12 #输出命令返回值
13 print stdout.read()
14 #关闭ssh连接
15 ssh.close()
用户名和密码连接

用户名密码连接后,上传下载文件:

 1 #用户名密码连接
 2 #使用paramiko的SFTPClient方法实现
 3 
 4 #上传文件
 5 import paramiko
 6 
 7 #创建一个传输对象
 8 t = paramiko.Transport(('182.92.219.86',22))
 9 #连接服务器
10 t.connect(username='wupeiqi',password='WOshiniba8')
11 #实例化一个sftp对象
12 sftp = paramiko.SFTPClient.from_transport(t)
13 #sftp使用put方法上传文件
14 sftp.put('/tmp/test.py','/tmp/test.py')
15 #关闭连接
16 t.close()
17 
18 
19 #下载文件
20 import paramiko
21 
22 t = paramiko.Transport(('182.92.219.86',22))
23 t.connect(username='wupeiqi',password='WOshiniba8')
24 sftp = paramiko.SFTPClient.from_transport(t)
25 sftp.get('/tmp/test.py','/tmp/test2.py')
26 t.close()
27 
28 
29 
30 
31 #paramiko的SFTPClient其他常用方法
32 sftp.mkdir('/home/userdir',0755)  #创建名为userdir的目录,权限为0755
33 sftp.remove('/home/userdir')  #删除名为userdir的目录
34 sftp.rename('test.py','testfile.py')  #将test.py重命名为testfile.py
35 sftp.stat('/home/testfile.py')   #获取testfiel.py文件的信息
36 sftp.listdir('/home')   #获取home目录列表,以python的List形式返回
上传和下载文件

再来看看使用ssh_key连接。使用这种连接方式的关键是使用密钥认证。例如:

要使用a服务器通过密钥来访问b服务器,就要在a服务器上生成密钥对,并将a服务器上生成的公钥发送给b服务器,这样a服务器就可以不通过账号密码直接访问b服务器了

注:第一次访问b服务器的时候还是需要输入用户名密码的,之后才不需要使用用户名密码

生成密钥对的过程:

1 #bash下设置密钥过程:
2 ssh-keygen -t rsa  ====>生成密钥对(rsa和rsa.pub)
3 ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.23     ===>把生成的公钥发送给要设置密钥登录的服务器(-i:指定公钥文件路径)
生成密钥对

使用ssh_key进行连接:

 1 import paramiko
 2 
 3 #私钥文件路径
 4 private_key_path = '/root/.ssh/id_rsa'
 5 #从私钥文件读取私钥
 6 key = paramiko.RSAKey.from_private_key_file(private_key_path)
 7 
 8 #创建一个ssh对象
 9 ssh = paramiko.SSHClient()
10 #允许连接不在know_hosts文件中的主机
11 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
12 #连接服务器
13 ssh.connect(hostname='192.168.1.22',port=22,username='root',pkey=key)
14 stdin,stdout,stderr = ssh.exec_command('df -h')
15 print stdout.read()
16 ssh.close()
ssh_key连接

ssh_key连接后,上传下载文件:

 1 #密钥连接
 2 
 3 #上传文件
 4 import paramiko
 5 
 6 pravie_key_path = '/home/auto/.ssh/id_rsa'
 7 key = paramiko.RSAKey.from_private_key_file(pravie_key_path)
 8 
 9 t = paramiko.Transport(('182.92.219.86',22))
10 t.connect(username='wupeiqi',pkey=key)
11 sftp = paramiko.SFTPClient.from_transport(t)
12 sftp.put('/tmp/test3.py','/tmp/test3.py')
13 t.close()
14 
15 
16 
17 #下载文件
18 import paramiko
19 
20 pravie_key_path = '/home/auto/.ssh/id_rsa'
21 key = paramiko.RSAKey.from_private_key_file(pravie_key_path)
22 
23 t = paramiko.Transport(('182.92.219.86',22))
24 t.connect(username='wupeiqi',pkey=key)
25 sftp = paramiko.SFTPClient.from_transport(t)
26 sftp.get('/tmp/test3.py','/tmp/test4.py')
27 t.close()
上传和下载文件
原文地址:https://www.cnblogs.com/MacoLee/p/5614197.html