paramiko 不通过密钥文件登陆,这很好解决,直接connect输入用户名和密码就ok


  1. # -*- coding: utf-8 -*-  

  2. import paramiko  

  3. paramiko.util.log_to_file('paramiko.log'#记录日志文件  

  4. ssh = paramiko.SSHClient()  

  5. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())  

  6. ssh.connect('127.0.0.1',username = 'root',password='******')  

  7. cmd = 'cd'    #进入用户目录home  

  8. stdin,stdout,stderr = ssh.exec_command(cmd)  

  9. print stdout.readlines()   

  10.   

  11. cmd = 'ls >test'  #管道,ls命名的输出到文件test里面  

  12. stdin,stdout,stderr = ssh.exec_command(cmd)  

  13. print stdout.readlines()  

  14.   

  15. cmd = 'cat test'  # 显示test的内容,即ls命名的结果  

  16. stdin,stdout,stderr = ssh.exec_command(cmd)  

  17. #print stdout.readlines()   #结果 汉字用的字符显示


通过以上方式可以实现。

在需要密匙文件时,paramiko 则需要通过如下方式登陆:

  1. # -*- coding: utf-8 -*-  

  2. import paramiko  

  3.   

  4. pkey='E:/wamp/www/tools/id_rsa'  #本地密钥文件路径[此文件服务器上~/.ssh/id_rsa可下载到本地]  

  5. key=paramiko.RSAKey.from_private_key_file(pkey,password='******'#有解密密码时,  

  6. paramiko.util.log_to_file('paramiko.log')  

  7. ssh = paramiko.SSHClient()  

  8. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #通过公共方式进行认证 (不需要在known_hosts 文件中存在)  

  9. #ssh.load_system_host_keys() #如通过known_hosts 方式进行认证可以用这个,如果known_hosts 文件未定义还需要定义 known_hosts  

  10. ssh.connect('127.0.0.1',username = 'root',password='******',pkey=key) #这里要 pkey passwordkey 密钥文件  

  11. stdin,stdout,stderr=ssh.exec_command('hostname')  

  12. print stdout.read()  

  13. stdin,stdout,stderr=ssh.exec_command('ls')  

  14. print stdout.read() 

通过sftp方式进行文件传输:


  1. # -*- coding: utf-8 -*-  

  2. import paramiko  

  3. import os  

  4.   

  5. pkey='E:/wamp/www/tools/id_rsa'  

  6. key=paramiko.RSAKey.from_private_key_file(pkey,password='******')  

  7. paramiko.util.log_to_file('paramiko.log')  

  8.   

  9. ssh = paramiko.SSHClient()  

  10. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())  

  11. ssh.connect('127.0.0.1',username = 'root',password='******',pkey=key)  

  12. t = ssh.get_transport()  

  13. sftp=paramiko.SFTPClient.from_transport(t)  

  14. d = sftp.put("mm.txt","/home/www/mm.txt")   

  15. print d  

  16. t.close()  

通过sftp方式进行文件下载:

  1. # -*- coding: utf-8 -*-  

  2. import paramiko  

  3. import os  

  4.   

  5. pkey='E:/wamp/www/tools/id_rsa'  

  6. key=paramiko.RSAKey.from_private_key_file(pkey,password='******')  

  7. paramiko.util.log_to_file('paramiko.log')  

  8.   

  9. ssh = paramiko.SSHClient()  

  10. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())  

  11. ssh.connect('127.0.0.1',username = 'root',password='******',pkey=key)  

  12. t = ssh.get_transport()  

  13. sftp=paramiko.SFTPClient.from_transport(t)  

  14. d = sftp.get("/home/www/mm.txt","mm.txt")   

  15. print d  

  16. t.close()

本问出自http://blog.csdn.net/wzm112/article/details/18359469

参考http://lizhenliang.blog.51cto.com/7876557/1880856 Python批量paraniko、fabric