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实现一个简单的能够上传下载的HTTP服务器
May 05 Python
Python实现字符串格式化输出的方法详解
Sep 20 Python
解决Mac安装scrapy失败的问题
Jun 13 Python
python 自动去除空行的实例
Jul 24 Python
Django框架自定义session处理操作示例
May 27 Python
使用Python进行中文繁简转换的实现代码
Oct 18 Python
Django框架ORM数据库操作实例详解
Nov 07 Python
使用pygame写一个古诗词填空通关游戏
Dec 03 Python
Python类中self参数用法详解
Feb 13 Python
PyQt使用QPropertyAnimation开发简单动画
Apr 02 Python
在 Python 中使用 7zip 备份文件的操作
Dec 11 Python
利用python实现后端写网页(flask框架)
Feb 28 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安全编程之加密功能
2006/10/09 PHP
增加反向链接的101个方法 站长推荐
2007/01/31 PHP
深入了解PHP类Class的概念
2012/06/14 PHP
PHP UTF8中文字符截断函数代码
2012/09/11 PHP
php配合jquery实现增删操作具体实例
2013/12/12 PHP
使用PHP生成二维码的方法汇总
2015/07/22 PHP
php中switch语句用法详解
2015/08/17 PHP
PHP 表单提交及处理表单数据详解及实例
2016/12/27 PHP
JavaScript的Function详细
2006/11/14 Javascript
json数据与字符串的相互转化示例
2013/09/18 Javascript
js修改input的type属性问题探讨
2013/10/12 Javascript
js中继承的几种用法总结(apply,call,prototype)
2013/12/26 Javascript
jQuery响应enter键的实现思路
2014/04/18 Javascript
在JavaScript中构建ArrayList示例代码
2014/09/17 Javascript
javascript中replace( )方法的使用
2015/04/24 Javascript
JS实现鼠标滑过折叠与展开菜单效果代码
2015/09/06 Javascript
详谈js中window.location.search的用法和作用
2017/02/13 Javascript
移动端效果之Swiper详解
2017/10/09 Javascript
jQuery除指定区域外点击任何地方隐藏DIV功能
2017/11/13 jQuery
详解vue指令与$nextTick 操作DOM的不同之处
2018/08/02 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
详解使用webpack+electron+reactJs开发windows桌面应用
2019/02/01 Javascript
微信小程序文章详情页跳转案例详解
2019/07/09 Javascript
[02:49]2018DOTA2亚洲邀请赛主赛事决赛日战况回顾 Mineski鏖战5局夺得辉耀
2018/04/10 DOTA
Python3.x中自定义比较函数
2015/04/24 Python
Python中property函数用法实例分析
2018/06/04 Python
python实现ID3决策树算法
2018/08/29 Python
解决python3中cv2读取中文路径的问题
2018/12/05 Python
python实现kmp算法的实例代码
2019/04/03 Python
农行实习自我鉴定
2013/09/22 职场文书
成品仓管员工作职责
2013/12/29 职场文书
酒店销售主管岗位职责
2014/01/04 职场文书
2014年党员自我评价材料
2014/09/22 职场文书
店铺转让协议书
2015/01/29 职场文书
Redis模仿手机验证码发送的实现示例
2021/11/02 Redis
CentOS7设置ssh服务以及端口修改方式
2022/12/24 Servers