gpt4 book ai didi

使用子流程的 Python 自动化

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:09:00 30 4
gpt4 key购买 nike

我是 python 的初学者,我想从自动化开始。以下是我正在尝试执行的任务。

ssh -p 2024 root@10.54.3.32

root@10.54.3.32's password:

我尝试通过 ssh 连接到特定机器并提示输入密码。但我不知道如何向这个控制台提供输入。这个我试过了

import sys

import subprocess

con = subprocess.Popen("ssh -p 2024 root@10.54.3.32", shell=True,stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr =subprocess.PIPE)

print con.stdout.readlines()

如果我执行这个,输出会是这样

python auto.py

root@10.54.3.32's password:

但我不知道如何为此提供输入。如果有人可以帮助我解决这个问题,将不胜感激。也请你帮我登录后,如何通过 ssh 在远程机器上执行命令。

如果完成,将继续我的自动化

我尝试使用 con.communicate(),因为 stdin 处于 PIPE 模式。但没有运气。

如果这不能通过子进程完成,您能否建议我在远程控制台(其他一些模块)上执行命令的替代方法对自动化有用?因为我的大部分自动化操作都依赖于在远程控制台上执行命令

谢谢

最佳答案

我已经通过pexpect实现了。在运行代码之前,您可能需要pip install pexpect:

import pexpect
from pexpect import pxssh

accessDenied = None
unreachable = None
username = 'someuser'
ipaddress = 'mymachine'
password = 'somepassword'
command = 'ls -al'
try:
ssh = pexpect.spawn('ssh %s@%s' % (username, ipaddress))
ret = ssh.expect([pexpect.TIMEOUT, '.*sure.*connect.*\(yes/no\)\?', '[P|p]assword:'])
if ret == 0:
unreachable = True

elif ret == 1: #Case asking for storing key
ssh.sendline('yes')
ret = ssh.expect([pexpect.TIMEOUT, '[P|p]assword:'])
if ret == 0:
accessDenied = True
elif ret == 1:
ssh.sendline(password)
auth = ssh.expect(['[P|p]assword:', '#']) #Match for the prompt
elif ret == 2: #Case asking for password
ssh.sendline(password)
auth = ssh.expect(['[P|p]assword:', '#']) #Match for the prompt

if not auth == 1:
accessDenied = True
else:
(command_output, exitstatus) = pexpect.run("ssh %s@%s '%s'" % (username, ipaddress, command), events={'(?i)password':'%s\n' % password}, withexitstatus=1, timeout=1000)
print(command_output)
except pxssh.ExceptionPxssh as e:
print(e)
accessDenied = 'Access denied'

if accessDenied:
print('Could not connect to the machine')
elif unreachable:
print('System unreachable')

这仅适用于 Linux,因为 pexpect 仅适用于 Linux。如果需要在 Windows 上运行,可以使用 plink.exe。 paramiko 是您可以尝试的另一个模块,我之前遇到的问题很少。

关于使用子流程的 Python 自动化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40914325/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com