当前位置:首页 » 编程语言 » python远程执行命令

python远程执行命令

发布时间: 2023-05-14 20:46:13

‘壹’ pythonftp连接远程执行cmd

pythonftp连接远程执行cmd操作方法如下:
1、pipinstallpywinrm安装模块即可。
2、windows系统服务器需要开启winrm服务。
3、cmd命令可以写成一个.bat文件,在服务器上直接执行即可。

‘贰’ 通过python脚本实现ansible远程命令

import paramiko

import getpass

import sys

import threading

import os

def rcmd(host, port=22, user='root', passwd=None, cmd=None):

    ssh = paramiko.SSHClient()

    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    ssh.connect(host, port=port, username=user, password=passwd)

    stdin, stdout, stderr = ssh.exec_command(cmd)

    out = stdout.read()

    err = stderr.read()

    if out:

        print(f'[{host}] \033[32;1mOUT\033[0m:\n{out.decode()}')

    if err:

        print(f'[{host}] \033[31;1mERROR\033[0m:\n{err.decode()}')

if __name__ == '__main__':

    # rcmd('127.0.0.1', passwd='redhat', cmd='id root; id zhangsan')

    if len(sys.argv) < 3:  # 命令加参数长度不能小于3

       塌悔 print(f'团罩正Usage: {sys.argv[0]} ipfile commands')

 闷陪       exit(1)

    if not os.path.isfile(sys.argv[1]):  # ip地址文件必须存在

        print(f'No such file: {sys.argv[1]}')

        exit(2)

    ipfile = sys.argv[1]

    cmd = ' '.join(sys.argv[2:])  # 拼接出命令

    passwd = getpass.getpass()

    with open(ipfile) as fobj:

        for line in fobj:

            ip = line.strip()  # 去除行尾的的\n

            t = threading.Thread(target=rcmd, args=(ip, 22, 'root', passwd, cmd))

            t.start()

‘叁’ Python中执行系统命令常见的几种方法

作为胶水语言,Python可以很方便地执行系统命令,从而帮助我们快速的完成任务;而且Python执行系统命令可采用的方法有很多,本文重点介绍一下:os.system()、os.popen()和subprocess模块。
1. os.system()
这个方法直接调用标准C的system()函数,仅仅在一个子终端运行系统命令,而不能获取执行返回的信息。
>>> import os
>>> output = os.system('cat /proc/cpuinfo')
processor : 0
vendor_id : AuthenticAMD
cpu family : 21
... ...
>>> output # doesn't capture output
0
2. os.popen()
这个方法执行命令并返回执行后的信息对象,是通过一个管道文件将结果返回。
>>> output = os.popen('cat /proc/cpuinfo')
>>> output
>>> print output.read()
processor : 0
vendor_id : AuthenticAMD
cpu family : 21
... ...
>>>
3. subprocess模块
该模块是一个功能强大的子进程管理模块,是替换os.system, os.spawn*等方法的一个模块。
>>> import subprocess
>>> subprocess.Popen(["ls", "-l"]) # python2.x doesn't capture
output
>>> subprocess.run(["ls", "-l"]) # python3.x doesn't capture
output
>>> total 68
drwxrwxr-x 3 xl xl 4096 Feb 8 05:00 com
drwxr-xr-x 2 xl xl 4096 Jan 21 02:58 Desktop
drwxr-xr-x 2 xl xl 4096 Jan 21 02:58 Documents
drwxr-xr-x 2 xl xl 4096 Jan 21 07:44 Downloads
... ...
>>>

‘肆’ python udp可以远程执行cmd命令吗

1 import paramiko,os,sys
2
3 ip = raw_input("input ip address :>>>")
4 password = raw_input("input password:>>>")
5 cmd = raw_input("input your cmd:>>> ")
6
7 print '''
8 ------connecting to %s ,--------
9 '''%ip
10 def ssh_cmd(ip,port,cmd,user,passwd):
11 result = ""
12 try:
13 ssh = paramiko.SSHClient()
14 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
15 ssh.connect(ip,port,user,passwd)
16 stdin, stdout, stderr = ssh.exec_command(cmd)
17 result = stdout.read()
18 print result
19 ssh.close()
20 except:
21 print "ssh_cmd err."
22 return result

‘伍’ 我想用python写个web界面简单执行远程linux命令 web界面要能自由填写执行shell命令和脚本

首先python基察简禅础你得会:
最简单套路:web用flask,linux交互用subprocessor模块
说白了就三点:python基础、flask框咐州架、败尘subprocessor模块

‘陆’ 如何使用python远程登录一个操作系统,并执行某条命令

你可以使用python的灶判pexcpct包通过ssh调用远程服务器指令:
import pxssh
import getpass
try:
s = pxssh.pxssh()
hostname = raw_input('hostname: ')
username = raw_input('username: ')
password = getpass.getpass('password: '隐衡改)
s.login (hostname, username, password)
s.sendline ('uptime') # run a command
s.prompt() # match the prompt
print s.before # print everything before the propt.
s.sendline ('ls -l')
s.prompt()
print s.before
s.sendline ('df'拦含)
s.prompt()
print s.before
s.logout()
except pxssh.ExceptionPxssh, e:
print "pxssh failed on login."
print str(e)

‘柒’ python 模拟 ssh 执行远程命令

日常开发连接 Linux 服务器,都会用到 ssh 客户端的软件
其实 python 有一个模块,可以简单模拟一个 ssh 客户端/服务端
编写一些自动化的的任务时,会经常和它打交道
简单记录一下 paramiko 的基本使用

paramiko 不是标准库,需要自行安装
要腔粗求 py2.7,3.4 版本以上 [1]

在得到一个 ssh_client 客户端连接对象后

第一次和服务器建立连接,需要选择是否自动将服务器的 host_key 公钥,记录在本地

因为,在计算机的世界里,没有永久的朋友-- IP 短时间里不会刷新,但是山颂系统可能随时被重置

否则会报错提示:

可以加入 logging 模块,查看详细的通讯过程

使用三个变量,获取返回的信息对象

读取命令的执行结伍唯镇果

‘捌’ linux环境下,用python脚本远程登录到其他机器执行命令,如果将命令执行的结果返回到当前的机器

result=os.popen("袜陵含汪稿ssh A; grep -r hello ./* "告笑)
print("".join(result))

‘玖’ 如何在Python中执行DOS命令

关于python调用cmd命令,主要介绍两种方式:

一、Python的OS模块

OS模块调用CMD命令有两种方式:os.system(),os.popen()。 都是用当前进程来调用。

1、os.system()

a、简单粗暴的执行cmd指令

b、返回结果为0表示执行成功,无法获取命令输出的内容,本在cmd输出的内容会直接在控制台输出。

c、当命令运行结束后接着往下面执行程序(同步阻塞式)。用法如:os.system("ipconfig")。

2、os.popen()

a、能获取DOS命令输出的内容。

b、os.popen()返回的是一个file对象,那么可以跟打开文件一样操作,r是以读的方式打开。

c、当命令运行结束后接着往下面执行程序(同步阻塞式)。

注意:os.popen() 方法用于从一个命令打开一个读写管道,在Unix,Windows中有效。

用法如:

with os.popen(r"adb devices","r")as f:

    text = f.read()

    print(text)# cmd输出结果

二、管道subprocess模块

a、在当前进程下产生子进程。

b、用wait()函数等待结果(异步非阻塞式)。

【方法1】

result = subprocess.check_output(r'adb devices') ## 命令执行的输出结果放到了result里

print(result)

【方法2】

process = subprocess.Popen(r'adb devices',shell=True,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)

command_output = process.stdout.read().decode('gbk')

print(command_output)

Notices: 

有些命令行是异步执行的不会马上返回输出,所以有时候我们要先等这个命令行执行完毕才能从stdout读出来数据。这个时候要加上

process.wait()

我的GitHub

‘拾’ python 实现ssh的执行远端命令和scp的不同机器文件传输功能

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pexpect
def ssh_cmd(ip, passwd, cmd):
ret = -1
ssh = pexpect.spawn('ssh root@%s "%s"' % (ip, cmd))
try:
i = ssh.expect(['password:', 'continue connecting (yes/no)?'], timeout=5)
if i == 0 :
ssh.sendline(passwd)
elif i == 1:
ssh.sendline('yes\n')
ssh.expect('password: ')
ssh.sendline(passwd)
ssh.sendline(cmd)
r = ssh.read()
print r
ret = 0
except pexpect.EOF:
print "EOF"
ssh.close()
ret = -1
except pexpect.TIMEOUT:
print "TIMEOUT"
ssh.close()
ret = -2
return ret

利用pexpect模块我们可以做很多事情,由于他提供了自动交互功能,因此我们可以实现ftp,telnet,ssh,scp等的自动登录,还是比较实用的。根据上面的代码相信读者已经知道怎么实现了(python就是那么简单!)。

上面的代码去完成任务还是比较费时间的,因为程序要等待自动交互出现,另外ubuntu用ssh连接就是比较慢,要进行一系列的验证,这样才体现出ssh
的安全。我们要提高效率,在最短的时间内完成。后来我发现了python里面的paramiko模块,用这个实现ssh登录更加简单。看下面的代码:

复制代码 代码如下:

#-*- coding: utf-8 -*-
#!/usr/bin/python
import paramiko
import threading
def ssh2(ip,username,passwd,cmd):
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,22,username,passwd,timeout=5)
for m in cmd:
stdin, stdout, stderr = ssh.exec_command(m)
# stdin.write("Y") #简单交互,输入 ‘Y'
out = stdout.readlines()
#屏幕输出
for o in out:
print o,
print '%s\tOK\n'%(ip)
ssh.close()
except :
print '%s\tError\n'%(ip)
if __name__=='__main__':
cmd = ['cal','echo hello!']#你要执行的命令列表
username = "" #用户名
passwd = "" #密码
threads = [] #多线程
print "Begin......"
for i in range(1,254):
ip = '192.168.1.'+str(i)
a=threading.Thread(target=ssh2,args=(ip,username,passwd,cmd))
a.start()

上面的程序还是有些技巧的:
1.
利用多线程,同时发出登录请求,同时去连接电脑,这样速度快很多,我试了一下,如果不用多线程,直接一个一个挨着执行的话,大约5~10秒钟才能对一台电
脑操作完,具体时间要根据命令的来决定,如果是软件安装或者卸载时间要更长一些。这样下来怎么也要一二十分钟,用多线程后就快多了,所有的命令执行完用了
不到2分钟!
2.最好用root用户登录,因为安装或者卸载软件的时候如果用普通用户又会提示输入密码,这样又多了一次交互,处理起来就比较麻
烦!安装软件时apt-get install xxx
最好加上“-y”参数,因为有时安装或删除软件时提示是否继续安装或卸载,这又是一次自动交互!加上那个参数后就没有人机交互了。
3. 循环时循环所有ip,因为计算机的ip是路由器自动分配的,保险起见,最好全部都执行,保证没有遗漏的主机
4.远端执行命令时如果有交互,可以这样用 stdin.write("Y")来完成交互,“Y”就是输入“Y”。
5.把所有的命令放到一个列表里面,遍历列表可以依次执行列表里面的命令
6.为了更好的进行控制,最好在电脑上提前把root用户打开,装好ssh服务器并让其开机自动执行。

热点内容
算法1b 发布:2025-07-17 14:17:48 浏览:514
安卓系统快捷方式叫什么名字 发布:2025-07-17 14:16:44 浏览:746
安卓机投屏用什么app 发布:2025-07-17 14:10:50 浏览:223
php在线培训 发布:2025-07-17 13:50:07 浏览:350
广播广告的脚本 发布:2025-07-17 13:47:51 浏览:904
pythonid3 发布:2025-07-17 13:31:50 浏览:326
文件被加密如何破解 发布:2025-07-17 13:31:50 浏览:29
网络编程经验 发布:2025-07-17 13:13:20 浏览:68
学编程小孩 发布:2025-07-17 13:13:16 浏览:999
关电源能释放缓存吗 发布:2025-07-17 13:07:14 浏览:932