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

问题描述

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

这是代码片段:

#!/bin/bash

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

是否尝试过检查 $ 的建议方法?值(如果密码不正确,$? 值将是 5,但是对于有效或无效的密码,shell 脚本不会回显“密码错误”,它总是按照以下代码回显“可以 ssh 到框 - 密码正确”:

#!/bin/bash

filename="$1"
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 失败,即密码无效,则需要打印密码无效。

标签: bashshellsshpass

解决方案


使用来自的返回值sshpass

根据man sshpass

返回值

与任何其他程序一样,sshpass 成功时返回 0。如果失败,将使用以下返回码: 5 密码无效/错误

运行后sshpass,在 bash 中,命令的返回值存储在$?变量中。

证明:

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

推荐阅读