Bash/密码预期超时返回 0

问题描述 投票:0回答:1

我有一个 bash 脚本,其中包含以下代码片段:

function test_sftp_connection() {
expect << EOF
log_user 0
spawn -noecho sftp -P $SFTP_SERVER_PORTNUMBER $SFTP_SERVER_USERNAME@$SFTP_SERVER_HOSTNAME
expect "password:"
send "$SFTP_SERVER_PASSWORD\r"
expect "sftp>"
send "exit\r"
EOF

  # Check the exit status of the expect command
  if [ $? -ne 0 ]; then
    echo "Unable to connect to the SFTP server."
    exit 1
  fi
}

我目前的理解是“期望“sftp>””按照它所说的那样做;它需要 sftp> 提示符。因此,如果脚本输入了错误的密码,系统会要求您再次输入密码;这显然不一样。所以我希望它停止执行;返回一个非零状态代码。

不幸的是,它并没有这样做。相反,它超时并显示状态代码 0。我不明白为什么会这样做,也不明白如何解决这个问题。如果有人知道如何处理这种情况,将不胜感激。

bash expect
1个回答
0
投票

我已将

log_user 0
更改为
log_user 1
以启用输出日志记录,并添加了一个额外的 Expect 块来处理提示不是
sftp>
时的情况,因此在这种情况下,我使用状态代码 1 退出
timeout
关键字!

看看这个:

function test_sftp_connection() {
  expect << EOF
  log_user 1
  spawn -noecho sftp -P $SFTP_SERVER_PORTNUMBER $SFTP_SERVER_USERNAME@$SFTP_SERVER_HOSTNAME
  expect "password:"
  send "$SFTP_SERVER_PASSWORD\r"
  expect {
    "sftp>" {
      send "exit\r"
      expect eof
      exit 0
    }
    timeout {
      exit 1
    }
  }
EOF

  if [ $? -ne 0 ]; then
    echo "Unable to connect to the SFTP server."
    exit 1
  fi
}
© www.soinside.com 2019 - 2024. All rights reserved.