【问题标题】:bash/expect script that continues if password provided is correct如果提供的密码正确,bash/expect 脚本将继续
【发布时间】:2021-10-19 16:13:50
【问题描述】:

我不习惯在 bash 脚本中使用期望,无论如何我想要实现的是一个 bash 脚本,当询问密码时,它会检查与远程机器的连接是否正确,然后如果正确远程执行一些命令,然后退出

直到现在我设法将期望放在一个变量中进行检查(我知道这很丑):

SCRIPT1=$(expect -c "

spawn ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $USER@$HOST

expect \"assword:\"
send \"$PASS\r\"
expect \"\\\\$\"
send \"show \/SP\/clock\r\"
expect -re \"$USER.*\"
send \"exit\r\"
")

echo "$SCRIPT1"

有没有办法在 bash 脚本中实现密码检查?

编辑:在这种情况下,公钥身份验证不是一个选项,抱歉

【问题讨论】:

  • 为什么不直接运行ssh,让它提示用户输入密码?
  • 跳过密码,设置公钥认证。
  • 在 shell 脚本中嵌入 Expect 很棘手。看看我的sexpect
  • 如果您无论如何都要信任每个主机 (-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no),为什么不直接使用 telnet? ;)

标签: linux bash expect


【解决方案1】:

我找到了答案,事实是,一旦状态正常并且期望“正确转义”,它就会起作用(不确定将来是否对某人有用)...

echo "Enter the Remote Password:"
read -s PASS
echo "Verifying password..."
CHECK=$(expect -c "

spawn ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ${u}@${H}

expect \"assword:\"
send \"$PASS\r\"
expect {
        \"\\\\$\" {exit 0}
        \"assword:\" { exit 1}
}
expect -re \"${u}.*\"
send \"exit\r\"
")


if [ $? == 1 ]
then
echo "Password validation failed. Please execute again with correct password for the ILOM and user selected. Exiting..."
exit
else
echo "Password validation correct..."

【讨论】:

    猜你喜欢
    • 2011-06-14
    • 2021-07-19
    • 2016-03-13
    • 2015-09-21
    • 2013-05-31
    • 2017-05-01
    • 2020-07-24
    相关资源
    最近更新 更多