代码来自: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连接后,上传下载文件:
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