【问题标题】:expect script doesn't work on ssh session期望脚本在 ssh 会话上不起作用
【发布时间】:2022-02-07 11:15:56
【问题描述】:

我通过 ssh 登录我们公司的服务器,但服务器询问我的密码和 otp 令牌。 因为我知道我的 otp 秘密,所以我可以在我的脚本中生成我的 otp。

提示如下:

$ ssh mike@relay.office.com
Your password: 
Your token:

假设我的密码是“123”,令牌是“456” 我写了一个这样的期望脚本,它应该可以工作

#!/usr/bin/expect

spawn ssh mike@relay.office.com
expect "password:"
send "123\n"
send "456\n"
interact

不过提示是这样的:

$ ./expect.sh
Your [EMAIL] password: 
Your [VPN] token: 
^[[?65;1;9cInvalid credentials

你看,ssh 服务器返回一些大量代码,后跟“无效凭据” 我不明白凌乱的代码是从哪里来的。 在正常情况下。即使我输入了错误的密码或令牌,它也只会提示“无效凭据”而没有任何乱码。是来自我们的 ssh 服务器的某种 anti-script login 方法吗?

一些补给

根据下面的答案,我需要澄清一下,我之前忘记在我的脚本中粘贴 expect 行。但即使有了它,问题仍然存在。

还有一件事我之前没有提到,但可能是相关的。当我输入ssh mike@xxx.com。服务器返回了一个二维码。(是的,终端中的二维码。)它包含color escape 以及some unicode characters。我不确定expect 在处理 unicode 字符方面是否有任何错误

【问题讨论】:

    标签: ssh expect totp


    【解决方案1】:

    “乱码”是一个终端转义序列,可能是为了改变以下错误信息的颜色或字体。

    但这里的主要问题是,如所写,您的脚本将启动 ssh 命令,然后立即发送以下行,而无需等待 ssh 连接到远程计算机。您应该使用expect 命令在发送响应之前等待每个提示,例如

    spawn ssh mike@relay.office.com
    expect "password:"
    send "123\n"
    expect "token:"
    send "456\n"
    interact
    

    【讨论】:

    • 好吧,我忘了粘贴expect 行。但问题仍然存在
    • 在这个问题上,你只有期望密码。在这里检查,因为还有另一个对令牌的期望,这就是关键。我可以告诉你期望 SSH 可以正常工作。
    猜你喜欢
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-14
    • 2020-07-01
    • 2014-05-13
    • 1970-01-01
    相关资源
    最近更新 更多