【python】之paramiko库操作Linux完成远程控制以及SFTP文件传输

paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。

由于使用的是python这样的能够跨平台运行的语言,所以所有python支持的平台,如Linux, Solaris, BSD, MacOS X, Windows等,paramiko都可以支持,因此,如果需要使用SSH从一个平台连接到另外一个平台,进行一系列的操作时,paramiko是最佳工具之一。

一.paramiko模块的安装

这边使用pip的方式进行安装

二.实际应用

1.远程控制,输入输出指令获取想要的数据

import paramiko

###创建SSH对象
ssh=paramiko.SSHClient()

###允许将信任的主机自动加入到host_allow 列表,此方法必须放在connect方法的前面
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
time.sleep(1)

####连接到服务器,hostname为服务器的IP地址,port为端口号,username为用户名,password为密码.
try:
    ssh.connect(hostname='192.168.20.100', port=22, username='root', password='root', compress=True)

###这边应用实际案例,做了一个判断来检查是否连接上服务器
except:
    tkinter.messagebox.showinfo('错误','查看环境是否配置正确!')
 
###激活terminal,invoke_shell()函数类似shell终端,可以将执行结果分批次返回  
channel = ssh.invoke_shell()
command = ""

###向服务器发送命令
channel.send(command + 'ls \n') 
time.sleep(1)

###接收服务器的返回值,并打印输出
stdout = channel.recv(1024*100000)
time.sleep(3) 
out_list = stdout.decode().split("\n")
time.sleep(3)
print(out_list)
time.sleep(1)

###关闭服务器连接
ssh.close()

返回值为:

###可以按照想要输入的指令来获取相对应的数据,并提取出来数据

2.ftp文件传输

import paramiko

###创建SSH对象
ssh=paramiko.SSHClient()

###允许将信任的主机自动加入到host_allow 列表,此方法必须放在connect方法的前面
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
time.sleep(1)

####连接到服务器,hostname为服务器的IP地址,port为端口号,username为用户名,password为密码.
try:
    ssh.connect(hostname='192.168.20.100', port=22, username='root', password='root', compress=True)

###这边应用实际案例,做了一个判断来检查是否连接上服务器
except:
    tkinter.messagebox.showinfo('错误','查看环境是否配置正确!')

localdeb = r'machine_etag.bin' #Windows下文件路径(需复制的文件)
debpath = '/home/user/' #Linux目录
debname = 'machine_etag.bin' #软件包完整名称

#将本地文件传至Linux中
sftp = paramiko.SFTPClient.from_transport(ssh)
sftp.put(localdeb, debpath + debname)

client= paramiko.SSHClient()
client._transport=ssh

#列出Linux目录中的文件,以便检查是否传送成功
print('上传完成!' + debpath +' 下有如下文件:')
lscmd = 'ls -l ' + debpath;
stdin, stdout, stderr = client.exec_command(lscmd)
print(stdout.read().decode('utf-8'))

#在Linux上安装deb软件
print('安装 ' + debpath + debname)

installcmd = 'dpkg -i ' + debpath + debname
stdin, stdout, stderr = client.exec_command(installcmd)
print(stdout.read().decode('utf-8'))

#检查Linux系统中软件是否安装成功
print('安装结果: ')
stdin, stdout, stderr = client.exec_command('dpkg -s xxx')
print(stdout.read().decode('utf-8'))

###关闭连接
client.close()

返回值:

###这样就能完成windows和Linux文件的互传了

@Neng

你可能感兴趣的:(python,python,pip)