- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用pexpect.py脚本登录并获取主机名信息。
基本上我是这样运行的
~$:./pexpect.py -h{hostname} -u{user} -p{password}
~$:./pexpexct.py -h{hostname} -u{username} -p{password} -x{user defined} -z{user defined}
#!/usr/bin/env python
# -h : hostname of the remote server to login to.
# -u : username to user for login.
# -p : Password to user for login.
import os, sys, time, re, getopt, getpass
import traceback
import pexpect
COMMAND_PROMPT = '[#$] '
TERMINAL_PROMPT = '(?i)terminal type\?'
TERMINAL_TYPE = 'vt100'
SSH_NEWKEY = '(?i)are you sure you want to continue connecting'
def exit_with_usage():
print globals()['__doc__']
os._exit(1)
def main():
global COMMAND_PROMPT, TERMINAL_PROMPT, TERMINAL_TYPE, SSH_NEWKEY
## Parse the options, arguments, get ready, etc.
try:
optlist, args = getopt.getopt(sys.argv[1:], 'h:u:p:', ['help','?'])
except Exception, e:
print str(e)
exit_with_usage()
options = dict(optlist)
if len(args) > 1:
exit_with_usage()
if [elem for elem in options if elem in ['-?','--?','--help']]:
print "Help:"
exit_with_usage()
if '-h' in options:
host = options['-h']
else:
host = raw_input('hostname: ')
if '-u' in options:
user = options['-u']
else:
user = raw_input('username: ')
if '-p' in options:
password = options['-p']
else:
password = getpass.getpass('password: ')
## Login via SSH
child = pexpect.spawn('ssh -l %s %s'%(user, host))
i = child.expect([pexpect.TIMEOUT, SSH_NEWKEY, COMMAND_PROMPT, '(?i)password'])
if i == 0:
print 'ERROR! could not login with SSH. Here is what SSH said:'
print child.before, child.after
print str(child)
sys.exit (1)
if i == 1: # In this case SSH does not have the public key cached.
child.sendline ('yes')
child.expect ('(?i)password')
if i == 2:
# This may happen if a public key was setup to automatically login.
# But beware, the COMMAND_PROMPT at this point is very trivial and
# could be fooled by some output in the MOTD or login message.
pass
if i == 3:
child.sendline(password)
# Now we are either at the command prompt or
# the login process is asking for our terminal type.
i = child.expect ([COMMAND_PROMPT, TERMINAL_PROMPT])
if i == 1:
child.sendline (TERMINAL_TYPE)
child.expect (COMMAND_PROMPT)
COMMAND_PROMPT = "\[PEXPECT\]\$ "
child.sendline ("PS1='[PEXPECT]\$ '") # In case of sh-style
i = child.expect ([pexpect.TIMEOUT, COMMAND_PROMPT], timeout=10)
if i == 0:
print "# Couldn't set sh-style prompt -- trying csh-style."
child.sendline ("set prompt='[PEXPECT]\$ '")
i = child.expect ([pexpect.TIMEOUT, COMMAND_PROMPT], timeout=10)
if i == 0:
print "Failed to set command prompt using sh or csh style."
print "Response was:"
print child.before
sys.exit (1)
# Now we should be at the command prompt and ready to run some commands.
# print '---------------------------------------'
# print 'Report of commands run on remote host.'
# print '---------------------------------------'
# Run uname.
child.sendline ('uname -a')
child.expect (COMMAND_PROMPT)
print child.before
if 'linux' in child.before.lower():
LINUX_MODE = 1
else:
LINUX_MODE = 0
# Run and parse 'uptime'.
child.sendline ('uptime')
child.expect('up\s+(.*?),\s+([0-9]+) users?,\s+load averages?: ([0-9]+\.[0-9][0-9]),?\s+([0-9]+\.[0-9][0-9]),?\s+([0-9]+\.[0-9][0-9])')
duration, users, av1, av5, av15 = child.match.groups()
days = '0'
hours = '0'
mins = '0'
if 'day' in duration:
child.match = re.search('([0-9]+)\s+day',duration)
days = str(int(child.match.group(1)))
if ':' in duration:
child.match = re.search('([0-9]+):([0-9]+)',duration)
hours = str(int(child.match.group(1)))
mins = str(int(child.match.group(2)))
if 'min' in duration:
child.match = re.search('([0-9]+)\s+min',duration)
mins = str(int(child.match.group(1)))
print
print 'Uptime: %s days, %s users, %s (1 min), %s (5 min), %s (15 min)' % (
duration, users, av1, av5, av15)
child.expect (COMMAND_PROMPT)
# Run Current Date.
child.sendline ('date')
child.expect (COMMAND_PROMPT)
print child.before
# Run vmstat.
# child.sendline ('vmstat')
# child.expect (COMMAND_PROMPT)
# print child.before
# Run free.
# if LINUX_MODE:
# child.sendline ('free') # Linux systems only.
# child.expect (COMMAND_PROMPT)
# print child.before
# Run df.
# child.sendline ('df')
# child.expect (COMMAND_PROMPT)
# print child.before
# Run lsof.
# child.sendline ('lsof')
# child.expect (COMMAND_PROMPT)
# print child.before
# Run netstat
# child.sendline ('netstat')
# child.expect (COMMAND_PROMPT)
# print child.before
# Run MySQL show status.
# child.sendline ('mysql -p -e "SHOW STATUS;"')
# child.expect (PASSWORD_PROMPT_MYSQL)
# child.sendline (password_mysql)
# child.expect (COMMAND_PROMPT)
# print
# print child.before
# Now exit the remote host.
child.sendline ('exit')
index = child.expect([pexpect.EOF, "(?i)there are stopped jobs"])
if index==1:
child.sendline("exit")
child.expect(EOF)
if __name__ == "__main__":
try:
main()
except Exception, e:
print str(e)
traceback.print_exc()
os._exit(1)
最佳答案
在此行中,您具有使用的选项(粗体)
optlist,args = getopt.getopt(sys.argv [1:],' h:u:p:',['help','?'])
为运行时间添加-x,您可以执行以下操作:
optlist,args = getopt.getopt(sys.argv [1:],' h:u:p:x ',['help','?'])
然后在部分中进行正常运行时间检查,只是将其放在下面,如果是这样的话:
如果选项中为“-x”:
并针对每个选项重复此操作,不要忘记在其上添加一些说明
关于python - Python Pexpect SSH命令行登录参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13231717/
我对ansible非常陌生,我正在尝试运行一个剧本来更改主机的root密码,所以我使用pexpect模块的expect命令。我成功地在主机和运行 playbook 的本地服务器上安装了带有 pytho
我对 python 非常陌生,我有一个简单的问题我有这个功能 def testU(self): b = pexpect.spawn('users') b.expect(
是否可以同时“等待”来自 expect 命令的不同答案? 例如:child.expect('first', 'second') 如果是,如何区分是哪个触发了它? 最佳答案 是的,你可以这样做: i =
我正在尝试编写一个程序来运行一些带有模拟用户数据的 shell 命令。 问题在于,如果代码末尾没有这一行,shell 命令将无法正确运行: raw_input('press to exit') 我怎
我想连接到运行 CLISH 的服务器,在给出密码提示时提供密码(有效),然后发出“shell”命令将我跳转到 bash shell(有效),然后测试是否存在如果文件丢失则打印“true”,如果存在(有
我正在 CentOS 上自动执行几个配置步骤。为此,我还需要重新启动系统。我正在通过 python pexepct 调用“重启”命令,但是我需要等到系统启动才能执行剩余的脚本。为此,我编写了这段小代码
我是Python新手,我正在尝试使用pexpect,对interact的输入/输出过滤器感兴趣。但我不知道如何使用过滤器。 在Pexpect的文档中,关于交互方法,提到: interact(escap
我只是想设置一个脚本来从基于 unix 的设备中检索一些输出,在这里你可以找到我的代码: import pexpect import time,sys, traceback, os telconn =
我正在使用 python 的 pexpect 模块来自动执行任务,我需要帮助来找出与 sendcontrol 一起使用的关键字符。如何发送控制键 ENTER ?为了将来引用,我们如何找到关键人物? 这
我试图在从未知状态恢复后清除行中的任何字符,因为在某些情况下它们包含提示和我在未来 expect 方法调用中使用的其他关键字。我尝试了多种方法,结果好坏参半,因为我不断遇到非预期的行为。 看到意外行为
我正在使用 python pexpect 编写脚本以在远程计算机上执行另一个脚本。它在正常情况下工作正常,但如果远程脚本中有 time.sleep,它会失败。 我想到达远程机器,在后台启动脚本然后退出
背景介绍 Expect 程序主要用于人机对话的模拟,就是那种系统提问,人来回答 yes/no ,或者账号登录输入用户名和密码等等的情况。因为这种情况特别多而且繁琐,所以很多语言都有各种自己的实现。
我正在使用pexpect.py脚本登录并获取主机名信息。 基本上我是这样运行的 ~$:./pexpect.py -h{hostname} -u{user} -p{password} 您将在下面看到,它
在下面的代码片段中,如何找到make的退出代码?具体来说,我需要知道 make 是否失败或成功。感谢您提供任何意见。 process = pexpect.spawn("/bin/bash") proc
我正在使用pexpect命令学习python,试图将usign ssh脚本编写到多个服务器并运行远程安装,但是当脚本运行到child.expect('$')时,它超时了,并且没有执行后续任务,可以看看
我正在浏览 pexpect 文档,它说您可以调用 run() 函数来执行命令并返回输出 所以我执行了以下操作,但出现错误。我在这里错过了什么吗? >>> pexpect.run('pwd') '/ho
我们的“共享”服务器上有一些奇怪的设置,在某些情况下不会记住我的 git 密码。我努力解决真正的问题;但在某个时候我放弃了并创建了这个 python 脚本: #!/usr/bin/env python
我正在尝试编写非常简单的程序,使用 pexpect 控制远程计算机。但远程系统不会对发送的命令使用react。 这是源代码: #!/usr/bin/env python3 # -*- coding:
我想 ssh 到网络上的另一个节点作为更大的 python 脚本的一部分,我正在使用 pexpect,当我执行以下操作时它可以工作: session=spawn('ssh root@172.16.21
我正在稳步研究如何通过运行命令来 ssh 和解析设备上的数据。在这一努力的过程中,我遇到了一些问题,并且我提出的问题得到了很多帮助。我现在正在使用 pexpect,但我在文档中没有看到太多与我正在做的
我是一名优秀的程序员,十分优秀!