如何检查 SFTP 会话是否已成功通过身份验证

How to check if SFTP session was authenticated successfully

我正在尝试在两台服务器之间使用 SFTP,目前我已经为两台服务器设置了密钥,但如果未设置密钥,我想知道身份验证失败。

该脚本包含 sftp 命令,后跟 EOF 结构中的一堆其他命令,但会话卡在输入密码的提示中,并且在未设置密钥时不会继续前进。我已经尝试在 10 秒后对 'password:' 进行 grep,如果 grep 成功则打印 'authentication failure',但无法正确执行此操作。

我尝试通过 grepping 获取密码提示以了解密钥未设置,但此脚本卡在密码提示上并且无法前进

#/!bin/ksh

FILE=`echo "getme.txt"`

TARGET_IP=`echo "targethost"`
USER=`echo "user01"`

kgen_path=`echo "/pet1usr/ph/pet01/backupssh"`

echo "connecting"

sftp ${USER}@${TARGET_IP} << EOF 2>&1 | grep 'password: '
cd $kgen_path
cd 2019
put $FILE
bye

EOF

if [[ $? -eq 1 ]];
then
  echo "Authentication successful"
else
  echo "Authentication failure"
fi

echo "done"

我也尝试添加超时命令,但没有提示输入任何密码,脚本在 10 秒后结束

timeout 10s sftp ${USER}@${TARGET_IP} << EOF 2>&1 | grep 'password: '

这个脚本不起作用,我得到 "Authentication Successful" 或者它卡在密码提示中,有没有更好的方法来检查身份验证是否成功或代码是否有任何更改,请告诉我知道吗?

禁用密码提示:

sftp -o BatchMode=yes user@host

您可以使用 "sftp -vv" 使用详细模式并检查所有过程。