Python远程linux执行命令实现


Posted in Python onNovember 11, 2020

1、远程登录到linux上,使用到的模块paramiko

#远程登陆操作系统
def ssh(sys_ip,username,password,cmds):
  try
    #创建ssh客户端
    client = paramiko.SSHClient()
    #第一次ssh远程时会提示输入yes或者no
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    #密码方式远程连接
    client.connect(sys_ip, 22, username=username, password=password, timeout=20)
    #互信方式远程连接
    #key_file = paramiko.RSAKey.from_private_key_file("/root/.ssh/id_rsa")
    #ssh.connect(sys_ip, 22, username=username, pkey=key_file, timeout=20)
    #执行命令
    stdin, stdout, stderr = ssh.exec_command(cmds[key])
    #获取命令执行结果,返回的数据是一个list
    result = stdout.readlines()
    return result
  except Exception, e:
    print e
  finally:
    client.close()
 
if __name__=="__main__":
  sys_ip = "192.168.0.102"
  username = "root"
  password = "1"
  cmds = "pwd"
  print ssh(sys_ip,username,password,cmds)

此处有个主意点,我遇到了,在密码登陆的时候,同样的python连接代码,放在python脚本里面执行就是报下面的错,但是将代码拷贝到python的交互模式下执行就是成功的,这个时候就是需要看下要远程的用户ssh配置是不是只支持键盘交互、密钥验证,如果是这样的话,使用密码远程登录就会报下面的错误

File "/usr/local/lib/python2.7/site-packages/paramiko/client.py", line 337, in connect
    self._auth(username, password, pkey, key_filenames, allow_agent, look_for_keys)
  File "/usr/local/lib/python2.7/site-packages/paramiko/client.py", line 528, in _auth
    raise saved_exception
AuthenticationException: Authentication failed.
 
  File "/usr/local/lib/python2.7/site-packages/paramiko/client.py", line 337, in connect
    self._auth(username, password, pkey, key_filenames, allow_agent, look_for_keys)
  File "/usr/local/lib/python2.7/site-packages/paramiko/client.py", line 528, in _auth
    raise saved_exception
paramiko.SSHException: No existing session

这个是因为linux会检测远程连接有没有tty(键盘交互),脚本方式运行的时候就没有键盘交互,看网上有在connect加,allow_agent=False,look_for_keys=False这2个参数解决的,但是我的没有解决,ssh.connect('localhost',username=name,password=pw,allow_agent=False,look_for_keys=False)

2、使用ssh,需要使用到shell命令expect

首先创建一个shell脚本remotExect.sh

#!/usr/bin/expect
set timeout 2
set local_file [lindex $argv 0]
set username  [lindex $argv 1]
set password  [lindex $argv 2]
set hostname  [lindex $argv 3]
set remote_file [lindex $argv 4]
 
spawn scp $local_file $username@$hostname:$remote_file
expect {
"yes/no"#是为了捕获首次登录,要手动输入yes/no的情况
{send "yes\r";}
"password:"#为例捕获需要输入密码的行为
{send "$password\r";}
}
expect eof

然后在python中执行

import os
cpFileCmd = "./remotecp.sh 1.txt root 1 192.168.0.102 /opt/1.txt"
os.system(cpFileCmd)

到此这篇关于Python远程linux执行命令实现的文章就介绍到这了,更多相关Python远程linux执行命令内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python根据路径导入模块的方法
Sep 30 Python
Python打印scrapy蜘蛛抓取树结构的方法
Apr 08 Python
pandas多级分组实现排序的方法
Apr 20 Python
Python处理菜单消息操作示例【基于win32ui模块】
May 09 Python
Flask框架响应、调度方法和蓝图操作实例分析
Jul 24 Python
Python判断一个文件夹内哪些文件是图片的实例
Dec 07 Python
详解python 3.6 安装json 模块(simplejson)
Apr 02 Python
Pycharm使用之设置代码字体大小和颜色主题的教程
Jul 12 Python
Django中使用haystack+whoosh实现搜索功能
Oct 08 Python
python带参数打包exe及调用方式
Dec 21 Python
Python如何把多个PDF文件合并代码实例
Feb 13 Python
matplotlib bar()实现多组数据并列柱状图通用简便创建方法
Feb 24 Python
python 实现简单的计算器(gui界面)
Nov 11 #Python
python海龟绘图之画国旗实例代码
Nov 11 #Python
python 实现倒计时功能(gui界面)
Nov 11 #Python
windows+vscode安装paddleOCR运行环境的步骤
Nov 11 #Python
Django基于Models定制Admin后台实现过程解析
Nov 11 #Python
Django Admin后台模型列表页面如何添加自定义操作按钮
Nov 11 #Python
Django启动时找不到mysqlclient问题解决方案
Nov 11 #Python
You might like
PHP大批量插入数据库的3种方法和速度对比
2014/07/08 PHP
在php和MySql中计算时间差的方法详解
2015/03/27 PHP
Codeigniter中集成smarty和adodb的方法
2016/03/04 PHP
深入浅析Yii admin的权限控制
2016/08/31 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
thinkPHP5.0框架事务处理操作简单示例
2018/09/07 PHP
php中file_get_contents()函数用法实例
2019/02/21 PHP
Yii2处理密码加密及验证的方法
2019/05/12 PHP
PHP Trait代码复用类与多继承实现方法详解
2019/06/17 PHP
B/S开发中常用javaScript技术与代码
2007/03/09 Javascript
js树形控件脚本代码
2008/07/24 Javascript
JavaScript DSL 流畅接口(使用链式调用)实例
2015/03/15 Javascript
jq实现左侧显示图片右侧文字滑动切换效果
2015/08/04 Javascript
jquery实现点击变换导航样式的方法
2015/08/31 Javascript
AngularJS进行性能调优的7个建议
2015/12/28 Javascript
jQuery简单实现页面元素置顶时悬浮效果示例
2016/08/01 Javascript
Vue.js项目部署到服务器的详细步骤
2017/07/17 Javascript
Vue利用canvas实现移动端手写板的方法
2018/05/03 Javascript
element-ui table span-method(行合并)的实现代码
2018/12/20 Javascript
Vue框架TypeScript装饰器使用指南小结
2019/02/18 Javascript
vue项目前端知识点整理【收藏】
2019/05/13 Javascript
[03:37]2016完美“圣”典 风云人物:Mikasa专访
2016/12/07 DOTA
python MySQLdb Windows下安装教程及问题解决方法
2015/05/09 Python
python 文本单词提取和词频统计的实例
2018/12/22 Python
python opencv摄像头的简单应用
2019/06/06 Python
Python 循环终止语句的三种方法小结
2019/06/24 Python
Python CSV文件模块的使用案例分析
2019/12/21 Python
python中可以声明变量类型吗
2020/06/18 Python
欧洲最大的笔和书写专家:The Pen Shop
2017/03/19 全球购物
房产转让协议书
2014/04/11 职场文书
村主任个人对照检查材料
2014/10/01 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
云冈石窟导游词
2015/02/04 职场文书
旷工检讨书大全
2015/08/15 职场文书
聊聊基于pytorch实现Resnet对本地数据集的训练问题
2022/03/25 Python
KVM基础命令详解
2022/04/30 Servers