当前位置:   article > 正文

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

python paramiko 远程命令

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

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

一.paramiko模块的安装

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

二.实际应用

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

  1. import paramiko
  2. ###创建SSH对象
  3. ssh=paramiko.SSHClient()
  4. ###允许将信任的主机自动加入到host_allow 列表,此方法必须放在connect方法的前面
  5. ssh.load_system_host_keys()
  6. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  7. time.sleep(1)
  8. ####连接到服务器,hostname为服务器的IP地址,port为端口号,username为用户名,password为密码.
  9. try:
  10. ssh.connect(hostname='192.168.20.100', port=22, username='root', password='root', compress=True)
  11. ###这边应用实际案例,做了一个判断来检查是否连接上服务器
  12. except:
  13. tkinter.messagebox.showinfo('错误','查看环境是否配置正确!')
  14. ###激活terminal,invoke_shell()函数类似shell终端,可以将执行结果分批次返回
  15. channel = ssh.invoke_shell()
  16. command = ""
  17. ###向服务器发送命令
  18. channel.send(command + 'ls \n')
  19. time.sleep(1)
  20. ###接收服务器的返回值,并打印输出
  21. stdout = channel.recv(1024*100000)
  22. time.sleep(3)
  23. out_list = stdout.decode().split("\n")
  24. time.sleep(3)
  25. print(out_list)
  26. time.sleep(1)
  27. ###关闭服务器连接
  28. ssh.close()

返回值为:

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

2.ftp文件传输

  1. import paramiko
  2. ###创建SSH对象
  3. ssh=paramiko.SSHClient()
  4. ###允许将信任的主机自动加入到host_allow 列表,此方法必须放在connect方法的前面
  5. ssh.load_system_host_keys()
  6. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  7. time.sleep(1)
  8. ####连接到服务器,hostname为服务器的IP地址,port为端口号,username为用户名,password为密码.
  9. try:
  10. ssh.connect(hostname='192.168.20.100', port=22, username='root', password='root', compress=True)
  11. ###这边应用实际案例,做了一个判断来检查是否连接上服务器
  12. except:
  13. tkinter.messagebox.showinfo('错误','查看环境是否配置正确!')
  14. localdeb = r'machine_etag.bin' #Windows下文件路径(需复制的文件)
  15. debpath = '/home/user/' #Linux目录
  16. debname = 'machine_etag.bin' #软件包完整名称
  17. #将本地文件传至Linux中
  18. sftp = paramiko.SFTPClient.from_transport(ssh)
  19. sftp.put(localdeb, debpath + debname)
  20. client= paramiko.SSHClient()
  21. client._transport=ssh
  22. #列出Linux目录中的文件,以便检查是否传送成功
  23. print('上传完成!' + debpath +' 下有如下文件:')
  24. lscmd = 'ls -l ' + debpath;
  25. stdin, stdout, stderr = client.exec_command(lscmd)
  26. print(stdout.read().decode('utf-8'))
  27. #在Linux上安装deb软件
  28. print('安装 ' + debpath + debname)
  29. installcmd = 'dpkg -i ' + debpath + debname
  30. stdin, stdout, stderr = client.exec_command(installcmd)
  31. print(stdout.read().decode('utf-8'))
  32. #检查Linux系统中软件是否安装成功
  33. print('安装结果: ')
  34. stdin, stdout, stderr = client.exec_command('dpkg -s xxx')
  35. print(stdout.read().decode('utf-8'))
  36. ###关闭连接
  37. client.close()

返回值:

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

@Neng

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/603341
推荐阅读
相关标签
  

闽ICP备14008679号