问题描述
我正在将{"inline_keyboard":[[{"text":"Nightclub","callback_data":"{\"a\":(menu[i]),\"b\":(menu[i])}"}],[{"text":"Parks",\"b\":(menu[i])}"}]]}
用于简化的登录脚本,使其仅进入白名单(因此漏洞较少){"inline_keyboard":[[{"text":"Nightclub","callback_data":'{"a":"Nightclub","b":"Nightclub"}'}],"callback_data":'{"a":"Parks","b":"Parks"}'}]]}
实例。这是编辑过的脚本
expect
让我们运行它:
postgres
三个问题:
- 假设最初进入
#!/usr/bin/expect set RDSI [lindex $argv 0] spawn /usr/local/bin/psql -U postgres -h $RDSI -d clips expect "Password" send "myPassword\r" interact expect eof # I have tried with and without this line
的速度非常快(基本上是立即进入),随后20秒钟以上的延迟又是怎么回事? - 有什么办法可以抑制 myPassword 的显示?
- 鉴于我们在打印
19:00:38/ciderapp $./exp.sh spawn /usr/local/bin/psql -U postgres -h -d clips SET psql (12.4) Type "help" for help. clips=# # We get into the db v quickly # Delays here for about 20+ seconds myPassword # we don't necessarily want this printed! clips-#
之前已经已经连接了, (a)等待约20秒,然后(b)打印clips
的行为令人困惑。可以解释吗?
解决方法
您看到的是expect
的预期行为。您等待它接收密码提示或超时(默认为10秒),然后一旦它执行了这些操作之一,便无条件发送密码。如果要在提示不出现的情况下使用密码,则需要以接收密码提示为条件发送密码。
但是无论如何,将expect
与psql
一起使用毫无意义,因为PostgreSQL提供了比完成任务更好的方法。
您可以使expect
命令有条件地执行操作。在这里,您需要输入密码提示,但不会出现。
假设交互式提示为"clips-#"
,则可以执行以下操作:
#!/usr/bin/expect
set RDSI [lindex $argv 0]
spawn /usr/local/bin/psql -U postgres -h $RDSI -d clips
set prompt "clips-#"
expect {
"Password"
send "myPassword\r"
exp_continue
}
$prompt
}
interact
该Expect语句中有2种模式。如果看到“密码”,它将发送密码,然后继续执行相同的Expect语句。看到提示时,由于没有任何操作,所以期望命令返回。
对于期望脚本的最后一行,使用
-
interact
,如果您(人类)需要与产生的过程进行互动,或者 -
expect eof
如果不需要交互,则只需等待该过程结束即可。