bash 可以ssh到远程机器并执行命令的脚本,当密码不正确时抛出错误

bash script which can ssh to a remote machine and execute commands, throws error when password is incorrect

我正在尝试一个 bash 脚本,我正在使用一个具有 IP 地址的文件作为参数。我正在使用 sshpass,但是我无法知道 ssh 登录是否成功。有没有办法检查这个? 请建议如果不是 sshpass,我是否需要使用任何其他 cmd 来进行远程登录和执行 cmds?

这是代码片段:

#!/bin/bash

filename=""
while read -r line; do
  sshpass -p 'test' ssh -o StrictHostKeyChecking=no test@$line 'df -h'
done < "$filename"

是否尝试过建议的方式检查$?值(如果其密码不正确,$? 值将为 5,但是对于有效或无效密码,shell 脚本不会回显 'wrong password',它始终按照以下代码回显 "Can ssh to box- Password is correct":

#!/bin/bash

filename=""
while read -r line; do
  sshpass -p 'test' ssh -o StrictHostKeyChecking=no test@$line 'df -h'
  if [ $? -eq 5]
  then
     echo "Wrong password"
  else
    echo "Can ssh to box- Password is correct"
  fi
done < "$filename"

我的要求是ssh 到远程框并执行命令。如果 ssh 失败,即密码无效,则需要打印密码无效。

使用 sshpass 中的 return 值。

根据man sshpass

RETURN VALUES

As with any other program, sshpass returns 0 on success. In case of failure, the following return codes are used: 5 Invalid/incorrect password

在 运行 sshpass 之后,在 bash return 中来自命令的值存储在 $? 变量中。

证明:

devilan@localhost:~ $ sshpass -p 'test' ssh smurf@localhost
devilan@localhost:~ $ echo $?
5

建议用法:

sshpass -p 'test' ssh smurf@localhost
if [ $? -eq 5 ]
then
    echo "Wrong password"
else
    echo "Something else"
fi

Space 在 5 之后丢失,因此如果条件未成功评估。 这是修改后的有效代码:


filename=""
while read -r line; do
  sshpass -p 'test' ssh -o StrictHostKeyChecking=no test@$line 'df -h'
  if [ $? -eq 5 ]
  then
     echo "Wrong password"
  else
    echo "Can ssh to box- Password is correct"
  fi
done < "$filename"