如何防止 pexpect 回显密码?

2023-11-21

默认情况下,pexpect.spawn()不会输出任何东西。但是当我指定logfile=sys.stdout它还会回显密码(例如ssh)。那么我怎样才能看到与spawned 进程没有回显密码(就像Expect (the Tcl扩展)吗)?

预期示例:

# cat expect.py
import pexpect, sys

logfile = sys.stdout if len(sys.argv) == 2 else None

ssh = pexpect.spawn('ssh foo@localhost', logfile=logfile)
ssh.delaybeforesend = 1
ssh.expect('assword:')
ssh.sendline('123456')

ssh.expect('\r\n\\$')
ssh.sendline('exit')
ssh.expect(pexpect.EOF)
ssh.wait()
# python expect.py                 <-- no output
# python expect.py stdout
foo@localhost's password: 123456   <-- the password is visible
Last login: Tue Mar 22 10:32:49 2016 from localhost
$ exit
exit
Connection to localhost closed.
#

期望示例:

# cat ssh.exp
spawn ssh foo@localhost
expect assword:
send "123456\r"
expect {\$}
send "exit\r"
expect eof
wait
# expect ssh.exp
spawn ssh foo@localhost
foo@localhost's password:          <-- the password is invisible
Last login: Tue Mar 22 10:45:03 2016 from localhost
$ exit
Connection to localhost closed.
#

只是为了让问题得到解答。功劳归于Thomas K。有关更多详细信息,请参阅问题下他的评论。

# cat foo.py
import pexpect, sys

spawn = pexpect.spawnu if sys.version_info[0] >= 3 else pexpect.spawn
ssh = spawn('ssh -t foo@localhost bash --noprofile --norc')
ssh.logfile_read = sys.stdout

ssh.expect('assword:')
ssh.sendline('123456')

ssh.expect('bash-[.0-9]+[$#]')
ssh.sendline('exit')
ssh.expect(pexpect.EOF)
ssh.wait()
# python2 foo.py
foo@localhost's password:
bash-5.1$ exit
exit
Connection to localhost closed.
# python3 foo.py
foo@localhost's password:
bash-5.1$ exit
exit
Connection to localhost closed.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何防止 pexpect 回显密码? 的相关文章

  • from __future__ import ... 能否保证 Python 2 和 3 的兼容性?

    我对热身 Python 2 还是 Python 3 不感兴趣 问题 尽管最近的一个 https stackoverflow com q 5478518 321973我发现已经一岁多了 但我偶然发现 如果您的文件开始 您可以在 Python
  • 如何在 shell 脚本中通过命令行传递 Expect 中的参数

    我通过 shell 脚本中的命令行在 Expect 中传递参数 我试过这个 usr bin expect f set arg1 lindex argv 0 spawn lockdis p expect password send arg1
  • 当我使用ansible模块expect时,我得到这个消息:The pexpect python module is required

    我正在尝试使用 ansible 来部署我们的系统 我在 yml 文件中使用了 Expect 模块并尝试使用ansible playbook运行它并收到此错误 致命 192 168 100 132 失败 gt 更改 错误 失败 true ms
  • shell脚本中的top命令

    我正在尝试通过 Expect 脚本获取 top 命令的前 5 行 我从 shell 脚本中调用这个期望脚本以及其他一些东西 top head 5给我以下输出 即没有 cpu 统计信息 顶部 09 10 58 向上 46 天 17 03 12
  • Python字符串和str()方法编码和解码

    我看到Python 手册 http docs python org 2 library stdtypes html string methods提及 encode and decode 字符串方法 在 Python CLI 上运行我发现我可
  • 在Python中将外部函数分配给类变量

    我试图将其他地方定义的函数分配给类变量 以便稍后可以在实例的方法之一中调用它 如下所示 from module import my func class Bar object func my func def run self self f
  • 如何在我的 docker 映像中安装 python-tk [重复]

    这个问题在这里已经有答案了 当我在 docker 映像中运行 python 脚本时出现此错误 ImportError No module named tkinter please install the python tk package
  • Tcl + 检查文件存在

    我正在尝试检查 Tcl 中是否存在文件 但我似乎无法得到真实的结果 尽管我知道它的存在 while true if file exists file name 1 exp send copy file txt destination r p
  • Python 中的“类型错误:无法实例化抽象类”

    我有一个模块fi定义了以下类 class Asset metaclass abc ABCMeta pass abc abstractmethod def get price self dt datetime date kwargs Noth
  • 在“expect”中使用条件语句

    我需要使用自动登录到 TELNET 会话expect 但我需要处理同一用户名的多个密码 这是我需要创建的流程 打开与 IP 的 TELNET 会话 发送用户名 发送密码 密码错误 再次发送相同的用户名 然后发送不同的密码 此时应该已经成功登
  • 自定义类排序:没有抛出错误,Python 测试的目的是什么?

    在不指定对象的相等比较属性的情况下 Python在使用时仍然在做一些事情 gt and lt 如果您不指定 Python 实际上是通过什么来比较这些对象的 gt or lt 我预计这里会出现不受支持的操作数错误 就像在尝试将两个对象添加在一
  • pip 升级后的 PyOpenSSl 版本 0.13.1

    我在 Mac El Capitan 上 我的系统显示我卡在 PyOpenSSl 版本 0 13 1 上 当我升级到16 2 0时 升级成功 然而 当我检查版本时 它仍然是0 13 1 为什么是这样 MacBook Air include s
  • 在 bash 脚本中期望

    我正在尝试将 Expect 脚本实现到 bash 脚本中 请耐心等待 因为我对 bash expect 还很陌生 这是按预期工作的期望脚本 log user 0 file delete foo txt set fh open foo txt
  • 如何使用 bash/expect 检查 SSH 登录是否有效

    我的团队管理着许多服务器 公司政策规定这些服务器上的密码必须每隔几周更改一次 有时 我们的官方密码数据库会因某种原因而过时 人们通常会忘记更新它 但有时我们要到几个月后才能识别这一点 因为我们并不总是使用每台服务器 我想编写一个脚本 从数据
  • 登录失败时生成 Python PXSSH GUI

    当登录失败时 我无法阻止 GUI 的生成 失败并生成 GUI 的简单示例 gt gt gt import pxssh gt gt gt gt gt gt ssh pxssh pxssh gt gt gt ssh force password
  • 如何在 Python 中使用 tkinter 选择目录并存储位置

    我正在创建一个带有浏览按钮的 GUI 我只想返回路径 我一直在寻找使用如下代码的解决方案 Tkinter Button subframe text Browse command self loadtemplate width 10 pack
  • 为什么我的 git 自动更新 Expect 脚本不起作用?

    我想制作一个脚本来更新我所有的 GitHub 存储库 我只需要输入我的用户名和密码 脚本将遍历存储库列表 调用git push并通过补充 Expect 脚本提供必要的信息 这是我的 bash 脚本 bin bash echo Updatin
  • 更改 urllib2.urlopen 上的用户代理

    如何使用非默认用户代理下载网页urllib2 urlopen urllib2 urlopen is not available in Python 3 x q 2792650 the 3 x equivalent is urllib req
  • 河内塔与蟒蛇“柜台”

    我已经用 python 编写了 河内塔 的代码 我试图添加一个计数器来显示它运行了多少次 我尝试了一些东西 例如 while 循环和 for 循环等 但它不起作用 我确信答案很简单 但我的大脑现在运行在最低设置上 我的代码如下所示 def
  • 如何在 {expect} 脚本中创建“循环”语句?

    假设是 这是脚本 usr bin expect set a test 我想在这个脚本中创建一个循环 以便它可以打印值 a 前面有一个基于循环的数字 所以如果我想让它循环3次 最终产品将变成 1 test 2 test 3 test 您可以使

随机推荐

  • 从 ASP.Net 页面运行批处理文件

    我试图通过 ASP Net 页面在服务器上运行批处理文件 这让我抓狂 当我运行下面的代码时 没有任何反应 我可以从一些日志语句中看到该代码运行 但我传递给该函数的 bat 文件从未运行 有人可以告诉我我做错了什么吗 public void
  • jQuery 无法在 AJAX 加载页面中工作

    我正在使用 jQuery 使用 ajax 假设 test html 通过 AJAX 加载页面 它是一个简单的 HTML 文档 带有一些按钮和单击它们时关联的动画 也使用 jQuery 当我直接加载页面时 关联的 click 属性工作正常 但
  • 用纯JS动画最大高度?

    我想要为 div 的高度设置动画 这通常在 CSS 中通过动画来完成max height财产 但是我需要在 JS 中执行此操作 div 填充了经常变化的动态内容 因此无法提前知道实际高度 这是一个jsfiddle https jsfiddl
  • 神经网络如何使用遗传算法和反向传播来玩游戏?

    我碰到YouTube 上这段关于遗传算法的有趣视频 正如您在视频中看到的 机器人学会了战斗 现在 我已经研究神经网络一段时间了 我想开始学习遗传算法 这在某种程度上将两者结合起来 如何结合遗传算法和神经网络来做到这一点 在这种情况下 人们如
  • Web API 和 ValidateAntiForgeryToken

    我们有一些现有的 MVC Web 服务 它们在网页中称为 AJAX 样式 这些服务利用 ValidateAntiForgeryToken 属性来帮助防止请求伪造 我们正在寻求将这些服务迁移到 Web API 但似乎没有等效的防伪功能 我错过
  • 注释会影响 Perl 性能吗?

    我正在优化一些经常运行的 Perl 代码 每个文件每天一次 注释会减慢 Perl 脚本的速度吗 我的实验倾向于不 use Benchmark timethese 20000000 comments gt b 1 comment 100 ti
  • 访问 Scala 中的注释值

    TL DR 基本上 我正在寻找 Java 的 Scala 等价物 MyAnnotation Thing getClass getAnnotations 0 尽管我可以很高兴地发现注释并根据其类型进行查询 但我似乎无法从scala refle
  • 使用 EBS 和 ELB 环境在 Node.js Express 应用程序中将 http 转发到 https

    我使用以下命令将所有 http 请求重定向到 https 请求 我可以从日志中看到标头 x forwarded proto 从未被填充且未定义 app get function req res next http docs aws amaz
  • db2 中更新表失败,SQLCODE:-668,SQLSTATE:57016,SQLERRMC:7;

    我正在使用 db2 9 5 我在表中创建了一个列 该列已成功创建 但我无法更新表列并出现以下错误 错误 脚本行 1 1 DB2 SQL 错误 SQLCODE 668 SQLSTATE 57016 SQLERRMC 7 DB2ADMIN XC
  • 使用多个帐户登录时,Google OAuth2 返回错误请求

    当我使用多个帐户登录谷歌时 我正在尝试授权自己https stackoverflow com users login 或任何其他使用 OAuth2 的网站 I get a Bad Request Error 400 当我处于隐身模式时不会发
  • Pygame:重新调整像素大小

    使用 pygame 我创建了一个 20x20 像素窗口并添加了一个 2x2 像素矩形 当我运行该程序时 窗口尺寸非常小 我几乎看不到矩形 如何在保持像素数量不变的情况下增加窗口大小 即增加像素大小 我知道这个类似的问题 但讨论了更复杂的情况
  • 在 C# 中将 ushort 值转换为两个字节值

    如何在 C 中将 ushort 拆分为两个字节变量 我尝试了以下方法 package FrameID 是 ushort 当我尝试用纸和铅笔计算时 我得到了正确的结果 另外 如果 FrameID 大于一个字节 因此第二个字节不为零 则它可以工
  • 进行多个 ajax 回调时保持请求顺序

    我循环遍历几个项目并对每个项目发出 ajax 请求 使用 jQuery 我希望它们独立执行 但按照它们被调用的顺序填充到 DOM 中 而不是它们返回的顺序 由于某种原因 某些请求比其他请求花费的时间更长 关于此类事情的最佳实践有什么建议吗
  • sizeof (int) == 1 的实现可以“完全符合”吗? [复制]

    这个问题在这里已经有答案了 根据C标准 返回的任何字符fgetc以以下形式返回unsigned char值 转换为int 该引用来自 C 标准 表明确实存在转换 When sizeof int 1 many unsigned char值超出
  • 如何设置 udev 规则以使用 Android Studio 调试物理 Android 设备?

    过去我从来不需要设置这个 但今天我将 Android Studio 更新到版本 2 3 1 并在单击调试时收到此错误 05 03 17 19 19 Launching app adb push app debug apk path on m
  • 可捕获的致命错误:传递给 UsernamePasswordToken::__construct() 的参数 4 必须是一个数组,给定 null

    登录我的 Symfony 应用程序 使用正确的用户名和密码 时出现以下错误 ContextErrorException 可捕获的致命错误 传递给 Symfony Component Security Core Authentication
  • 从 SharePoint 网站打开 Excel 文件

    我正在尝试使用 VBA 从 SharePoint 打开 Excel 文件 由于每次运行宏时我要查找的文件可能会有所不同 因此我希望能够查看 SharePoint 文件夹并选择我需要的文件 当我想在网络驱动器上查找文件时 下面的代码工作正常
  • innerHTML 适用于 IE 和 Firefox,但不适用于 Chrome

    数据不会在 Chrome 中显示 除非我在 Chrome 中打开 IE 选项卡 转到该网站 然后将其关闭回 Chrome 抱歉 如果这没有多大意义 window onload function var url http freeiz com
  • python中的k-means:确定哪些数据与每个质心相关联

    我一直在使用scipy cluster vq kmeans用于进行一些 k 均值聚类 但想知道是否有一种方法可以确定每个数据点 假定 与哪个质心相关联 显然你可以手动执行此操作 但据我所知 kmeans 函数不会返回此值 有一个功能kmea
  • 如何防止 pexpect 回显密码?

    默认情况下 pexpect spawn 不会输出任何东西 但是当我指定logfile sys stdout它还会回显密码 例如ssh 那么我怎样才能看到与spawned 进程没有回显密码 就像Expect the Tcl扩展 吗 预期示例