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 3 #上传文件 4 import paramiko 5 6 #常见一个传输对象 7 t = paramiko.Transport((‘182.92.219.86‘,22)) 8 #连接服务器 9 t.connect(username=‘wupeiqi‘,password=‘WOshiniba8‘) 10 #实例化一个sftp对象 11 sftp = paramiko.SFTPClient.from_transport(t) 12 #sftp使用put方法上传文件 13 sftp.put(‘/tmp/test.py‘,‘/tmp/test.py‘) 14 #关闭连接 15 t.close() 16 17 18 #下载文件 19 import paramiko 20 21 t = paramiko.Transport((‘182.92.219.86‘,22)) 22 t.connect(username=‘wupeiqi‘,password=‘WOshiniba8‘) 23 sftp = paramiko.SFTPClient.from_transport(t) 24 sftp.get(‘/tmp/test.py‘,‘/tmp/test2.py‘) 25 t.close()
再来看看使用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 rsa.pub root@192.168.1.2 ===>把生成的公钥发送给要设置密钥登录的服务器
使用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连接后,上传下载文件:
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