我有一个用于 ssh 的期望脚本。我的一些主机会提示输入 RSA 主机密钥文本,而另一些则不会。如何在 Expect 中为 if/then 设置脚本。这是我到目前为止所拥有的。
#!/usr/bin/expect -f
set ipaddress [lindex $argv 0];
spawn ssh user@$ipaddress
expect "Are you sure you want to continue connecting (yes/no)?"
send "yes\r"
expect "user@$ipaddress's password:"
send "password\r"
set prompt {\$ $}
expect -re $prompt
send "$command\r"
expect -re $prompt
send "quit\r"
interact
Run Code Online (Sandbox Code Playgroud)
我需要在 if/then 逻辑中构建的部分是这两行:
expect "Are you sure you want to continue connecting (yes/no)?"
send "yes\r"
Run Code Online (Sandbox Code Playgroud)
逻辑流程是:
if expect "Are you sure you want to continue connecting (yes/no)?"
then send …Run Code Online (Sandbox Code Playgroud) 我知道这已经被问过了。但是,我不清楚如何构造命令以完成任务,并且以前的问题从未标记为已回答。我需要发送多个数据包,而我的用例是使用UDP将DNS查询发送到远程服务器。这是我需要使用的命令:
sr1(IP(dst="192.168.155.128")/UDP()/DNS(rd=1,qd=DNSQR(qname="www.oreilly.com")))
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,sr1表示在第3层发送数据包,但是还有更多的函数定义来发送数据包。见这里。大括号之间的其余部分是如何组装带有A记录的大写字母的DNS查询数据包。
但是我想做的是在一个命令中发送多个数据包。上一个问题对此有一个建议的答案:
sendp(p, iface=eth0, inter=1 , count=x )
Run Code Online (Sandbox Code Playgroud)
其中p是您的数据包或数据包列表,而count是重复发送操作的次数。
这是我迷路的地方。如果答案是正确的,我将如何将其集成到命令中,其外观将如何?
提前致谢!
我正在尝试使用expect远程登录服务器并更改用户密码。该应用程序要求,如果您要更改的密码包含特殊字符,则需要将其括起来。问题是,expect send 语句也需要被引用,当我尝试将两者结合起来时,脚本失败了。如果我删除密码周围的引号并且不使用特殊字符,则它可以正常运行。
send "CHANGEUSERPASSWORD $username PASSWORD "etdgsfdh$"\r"
Run Code Online (Sandbox Code Playgroud)
如果我使用上面的行并运行我得到的脚本
extra characters after close-quote
while executing
"send "CHANGEUSERPASSWORD $username PASSWORD "e"
Run Code Online (Sandbox Code Playgroud)
另外,它似乎只不喜欢 $ 字符,因为我可以将 @ 附加到密码末尾,而无需将其括在引号中,并且脚本运行良好。我怎样才能使用包含 $ 的密码来使其工作,这需要我将其用引号引起来,这显然与期望引用冲突?请注意,$ 可以位于密码中的任何位置,而不仅仅是像我的示例中那样位于末尾。
这是我的完整上下文脚本:
#!/usr/bin/expect -f
set password [lindex $argv 0];
spawn telnet 192.168.100.100 106
expect "200 PWD Server ready"
send "USER user\r"
expect "300 please send the PASS"
send "PASS pass\r"
expect "200 login OK, proceed"
send "CHANGEUSERPASSWORD $username PASSWORD "etdgsfdh$"\r"
expect "200 OK"
send "quit\r"
interact
Run Code Online (Sandbox Code Playgroud)
我还尝试使用此行将密码设置为变量:
set password [lindex $argv 0];
Run Code Online (Sandbox Code Playgroud)
并改变这一行: …
我正在使用以下代码来修改文件的内容.
awk '$1 ~ /command/ { s = ""; for (i = 2; i <= NF; i++) s = s $i " "; print $1 " " "text I am inserting after command" " " s }' file
Run Code Online (Sandbox Code Playgroud)
我发现只有这个命令输出(到屏幕)只有我告诉它的文件的更改.
我已经尝试修改命令将更改写回文件.
awk '$1 ~ /command/ { s = ""; for (i = 2; i <= NF; i++) s = s $i " "; print $1 " " "text I am inserting after command" " " s }' file > tmp && …Run Code Online (Sandbox Code Playgroud) 我需要解析一个日志文件,以便以下条目是这样的:
Jul 23 17:38:06 192.168.1.100 638 "this message will always be the same"
Jul 23 17:56:11 192.168.1.100 648 "this message will always be the same."
Jul 23 18:14:17 192.168.1.101 "this message will always be the same."
Jul 23 18:58:17 192.168.1.101 "this message will always be the same."
Run Code Online (Sandbox Code Playgroud)
看起来像这样:
Jul 23 17:56:11 192.168.1.100 648 "this message will always be the same."
Jul 23 18:58:17 192.168.1.101 "this message will always be the same."
Run Code Online (Sandbox Code Playgroud)
基本上我正在做的是获取一个具有重复 IP 地址但具有不同时间戳的文件,并找到每个 IP 地址的最后一次出现(或最近一次出现),并将其打印到屏幕上或将其定向到另一个文件中。
我尝试过的:
我写了一个 bash 脚本,我认为它可以让我这样做,但它不起作用。 …