先下载安装
1 pip3 install pycrypto #由于 paramiko 模块内部依赖pycrypto,所以先下载安装pycrypto 2 pip3 install paramiko
1.基于用户名密码连接
import paramiko # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 ssh.connect(hostname='elephant', port=22, username='huwei', password='9999') # 执行命令 stdin, stdout, stderr = ssh.exec_command('df') # 获取命令结果 result = stdout.read() # 输出的结果是bytes类型的 # 关闭连接 ssh.close()
解析:stdin:标准输入,输入的命令;stdout:标准输出,输入命令的执行结果;stderr:标准错误,执行命令报错的返回结果
SSHClient封装Transport:
import paramiko transport = paramiko.Transport(('hostname', 22)) #创建实例 transport.connect(username='huwei', password='huwei123') #建立连接 ssh = paramiko.SSHClient() ssh._transport = transport stdin, stdout, stderr = ssh.exec_command('df') print stdout.read() #输出为bytes类型的 transport.close()
2.基于公钥密钥连接
import paramiko private_key = paramiko.RSAKey.from_private_key_file('id_rsa') # 私钥文件的路径 # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 ssh.connect(hostname='192.168.165.160', port=22, username='huwei', pkey=private_key) # 执行命令 stdin, stdout, stderr = ssh.exec_command('df') # 获取命令结果 result = stdout.read() print(result.decode()) # 关闭连接 ssh.close()
SSHClient 封装Transport
import paramiko private_key = paramiko.RSAKey.from_private_key_file('id_rsa') transport = paramiko.Transport(('192.168.165.160', 22)) transport.connect(username='huwei', pkey=private_key) ssh = paramiko.SSHClient() ssh._transport = transport stdin, stdout, stderr = ssh.exec_command('df') transport.close()
SFTPClient
功能:用于连接远程服务器并执行上传下载
1.基于用户名密码上传下载
import paramiko transport = paramiko.Transport(('192.168.165.160', 22)) transport.connect(username='huwei', password='huwei123') sftp = paramiko.SFTPClient.from_transport(transport) # 将mac.txt 上传至服务器 /tmp/test # 必须要起文件名 sftp.put('/mac.txt', '/tmp/test') # 将test 下载到本地132.txt sftp.get('/tmp/test', '/Users/huwei/PycharmProjects/s14/module_4/132.txt') transport.close()
2.基于公钥密钥上传下载
import paramiko private_key = paramiko.RSAKey.from_private_key_file('id_rsa') #私钥文件路径 transport = paramiko.Transport(('192.168.165.160', 22)) transport.connect(username='huwei‘, pkey=private_key ) sftp = paramiko.SFTPClient.from_transport(transport) # 将mac.txt上传至服务器 /tmp/test sftp.put('mac.txt, '/tmp/test) # 将test下载到本地132.txt sftp.get('/tmp/test', '/Users/huwei/PycharmProjects/s14/module_4/132.txt') transport.close()
注意:Linux主机上的公钥验证文件authorized_keys权限必须修改为属主可读(无其他属组,其他权限),否则连接将会报错。