paramiko的安装与使用
paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接,支持在远程登录服务器执行命令和上传下载文件的功能。
安装
pycrypto下载地址:
http://www.voidspace.org.uk/python/modules.shtml#pycrypto
ecdsa下载地址:
https://pypi.python.org/pypi/ecdsa/0.9
paramiko安装:pip install paramiko
登陆
基于用户名密码的SSHClient登陆
#!/usr/bin/env python # -*- coding:utf-8 -*- __Author__ = 'kongZhaGen' import paramiko # 建立SSH服务器的高级会话模式 ssh = paramiko.SSHClient() # 允许连接不在known_hosts中的服务器 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 通过用户名及密码登陆服务器 ssh.connect(hostname='172.10.228.2', port=22, username='root', password='654321') # 执行结果返回三个值 stdin, stdout, stderr = ssh.exec_command('df -h') print stdout.read() print '------------------' print stderr.read() ssh.close()
结果
基于RSAKEY的SSHClient登陆
#!/usr/bin/env python # -*- coding:utf-8 -*- __Author__ = 'kongZhaGen' import paramiko # 本地可用的私钥文件路径,生成私钥时如果有密码,需要加password参数 key = paramiko.RSAKey.from_private_key_file('id_rsa.txt') # 建立SSH服务器的高级会话模式 ssh = paramiko.SSHClient() # 允许连接不在known_hosts中的服务器 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 通过用户名及密码登陆服务器 ssh.connect(hostname='192.168.56.41', port=22, username='root', pkey=key) # 执行结果返回三个值 stdin, stdout, stderr = ssh.exec_command('df -h') print stdout.read() print '------------------' print stderr.read() ssh.close()
结果
基于用户名密码的Socket连接
#!/usr/bin/env python # -*- coding:utf-8 -*- __Author__ = 'kongZhaGen' import paramiko # 初始化一个paramiko的Socket对象 trans = paramiko.Transport(('192.168.56.41', 22)) # 建立基于Socket的ssh2连接 trans.connect(username='root', password='rootroot') # 建立SSH服务器的高级会话 ssh = paramiko.SSHClient() # 将Socket连接赋与ssh会话 ssh._transport = trans # 通过SSH会话执行命令 stdin, stdout,stderr = ssh.exec_command("df -h") print stdout.read() # 会话关闭 ssh.close() trans.close()
基于RSA的SOCKET连接
#!/usr/bin/env python # -*- coding:utf-8 -*- __Author__ = 'kongZhaGen' import paramiko # 私钥的本地路径 key = paramiko.RSAKey.from_private_key_file("id_rsa.txt") # 初始化一个paramiko的Socket对象 trans = paramiko.Transport(('192.168.56.41', 22)) # 建立基于Socket的ssh2连接 trans.connect(username='root', pkey=key) # 建立SSH服务器的高级会话 ssh = paramiko.SSHClient() # 将Socket连接赋与ssh会话 ssh._transport = trans # 通过SSH会话执行命令 stdin, stdout,stderr = ssh.exec_command("df -h") print stdout.read() # 会话关闭 ssh.close() trans.close()
数据传输
#!/usr/bin/env python # -*- coding:utf-8 -*- __Author__ = 'kongZhaGen' import paramiko # 私钥的本地路径 key = paramiko.RSAKey.from_private_key_file("id_rsa.txt") # 初始化一个paramiko的Socket对象 trans = paramiko.Transport(('192.168.56.41', 22)) # 建立基于Socket的ssh2连接 trans.connect(username='root', pkey=key) # 建立一个SFTP会话,建立一个SFTP通道,用于传输数据 sft = paramiko.SFTPClient.from_transport(trans) # sft.put("kongtest.py","/root/kongtest.py") sft.get('/root/install.log','install.log') trans.close()