bash 脚本中未显示 ssh 密码提示消息

bash 脚本中未显示 ssh 密码提示消息

我正在通过 bash 脚本检查 ssh 连接

echo -e "Checking if you have setup a key for serve ssh connection ..."
timeout 5s ssh uname@host 'exit'
if [ $? -eq 0 ];
then
  echo -e "You're done"
else
  echo -e "Set up a ssh key please or check username password"
fi

脚本运行良好。它提示输入密码。

但问题是它在询问密码时没有任何消息,没有显示任何提示消息,例如:

uname@host's Password:

我希望显示此消息。

答案1

您检查 SSH 密钥是否已设置的方法非常糟糕。

  1. 它可能会失败(例如,当连接需要超过 5 秒才能建立时,或者当用户的 shell 不理解“退出”时,或者当任何事物否则不会在 5 秒内发生)即使用户设置了 SSH 密钥,
  2. 即使用户还没有建立连接(当连接在不到 5 秒内建立并且用户输入密码足够快,这种情况很常见!),或者已经建立连接时,它也可以成功,
  3. 并且它可能会留下半完成的 SSH 连接。

您需要替换该方法。它根本就没有完成它的工作。

这很简单,告诉 SSH 不允许密码验证;根据您的 SSH 版本,有一个选项 ( man ssh);最有可能的是

ssh -n -oControlMaster=no \
       -oPasswordAuthentication=no \
       -oKbdInteractiveAuthentication=no \
       -oPreferredAuthentications=publickey \
       user@host true \
|| \
echo "can't log in"

做你想做的事,没有任何涉及超时等的坏主意。事情要么有效,要么失败。

问题:无论您是否无法连接到主机,或者是否无法进行身份验证,它都会打印相同的内容。这些是不同的事情。


顺便说一句,如果整个事情只是为了让用户确保他们已经设置了公钥身份验证:有ssh-copy-id user@host,它会尝试登录(尽可能),然后检查是否安装了用户的公钥在服务器上。这可能会让你的整个脚本变得过时:)

相关内容