Linux 期望脚本+;如果未显示字符串,如何忽略字符串
我编写了以下expect脚本,以便将ssh自动登录到远程Linux机器 并运行命令“cat/etc/APP_VERSION.txt file” 有时我没有从ssh命令中询问-Linux 期望脚本+;如果未显示字符串,如何忽略字符串,linux,bash,shell,expect,tk,Linux,Bash,Shell,Expect,Tk,我编写了以下expect脚本,以便将ssh自动登录到远程Linux机器 并运行命令“cat/etc/APP_VERSION.txt file” 有时我没有从ssh命令中询问- "Are you sure you want to continue connecting (yes/no)?" 因此,在本例中,第一个expect仍然等待字符串“(yes/no)?”——:( 而不是继续第二个期望——“密码:” 如何解决这个问题 我的意思是如果这句话“你确定要继续连接吗(是/否)?” 不是从ss
"Are you sure you want to continue connecting (yes/no)?"
因此,在本例中,第一个expect仍然等待字符串“(yes/no)?”——:(
而不是继续第二个期望——“密码:”
如何解决这个问题
我的意思是如果这句话“你确定要继续连接吗(是/否)?”
不是从ssh中显示的
然后我们必须转到下一个预期的“password:”,但是如何做到这一点呢
备注1-如果出现问题“是否确实要继续连接(是/否)”,则expect脚本可以正常工作,没有任何问题
remark2-我不能使用timeout正值(作为timeout 10),因为ssh本身有延迟
。
.
.
我的expect脚本:(此expect是我的ksh脚本的一部分)
。
.
.
.
来自我的linux机器的ssh示例
ssh APP_MACHINE
The authenticity of host 'APP_MACHINE (172.12.6.190 )' can't be established.
RSA key fingerprint is 1e:8a:3d:b3:e2:8c:f6:d6:1b:16:65:64:23:95:19:7b.
Are you sure you want to continue connecting (yes/no)?
设置一个超时
设置超时10
将等待预期的行10秒,如果未在指定的超时内收到,则继续执行脚本中的下一行
参考文献
更新:
如果超时不是一个可接受的解决方案,您可以尝试使用一系列替代响应来推动脚本前进
expect {
"(Are you sure you want to continue connecting yes/no)?" { send "yes\r"; exp_continue }
password: {send PASS123\r; exp_continue}
}
您可能希望使用Python的pexpect模块来实现这一点,因为它可以为您提供类似于case的东西:)
有关更多详细信息,请参阅:生成SSH时执行以下操作:
spawn ssh -o "StrictHostKeyChecking no" "$user\@ip"
很抱歉,我不能使用它,因为ssh有时本身有时间连接——有时是5秒或10秒,谁知道呢对我来说,这不是一个好的解决方案。再次抱歉,这一定是另一个解决方案!!!无论如何,这不是一个好主意,因为我的应用程序需要在expect脚本中快速运行,没有任何延迟。我添加exp_continue字符串,正如您在此处显示的那样,但它仍然被卡住。请注意,这两个字符串位于同一expect{…}中,而不是与原始脚本中的两个单独的expect中。-1表示超时建议,但是+2对于
exp\u continue
(您不希望在“密码”块中使用)thx felix sun,但我更愿意首先在expect中解决它,因为我的shell脚本中有allot expect脚本,所以我不想花分配的时间将其翻译到pylon,但您的想法对新的scratch cod很有好处
spawn ssh -o "StrictHostKeyChecking no" "$user\@ip"