Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash脚本可以ssh到远程机器并执行命令,当密码不正确时抛出错误_Bash_Shell_Sshpass - Fatal编程技术网

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

bash脚本可以ssh到远程机器并执行命令,当密码不正确时抛出错误,bash,shell,sshpass,Bash,Shell,Sshpass,我正在尝试一个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'

我正在尝试一个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"
#/bin/bash
filename=“$1”
而read-r行;做
sshpass-p'test'ssh-o StrictHostKeyChecking=无测试@$行'df-h'
完成<“$filename”
您是否尝试过建议的方法来检查$?值(如果其密码不正确,$?值将为5,但是如果密码有效或无效,shell脚本不会回显“错误密码”,它总是回显“Can ssh to box-密码正确”,如下代码所示:

#!/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"
!/bin/bash
filename=“$1”
当读取-r行时;执行
sshpass-p'test'ssh-o StrictHostKeyChecking=无测试@$行'df-h'
如果[$?-等式5]
然后
回显“错误密码”
其他的
echo“Can ssh to box-密码正确”
fi
完成<“$filename”

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

使用
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

空间在5之后丢失,因此如果条件没有得到成功评估。 下面是修改后的代码,它可以工作:


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"

filename=“$1”
当读取-r行时;执行
sshpass-p'test'ssh-o StrictHostKeyChecking=无测试@$行'df-h'
如果[$?-等式5]
然后
回显“错误密码”
其他的
echo“Can ssh to box-密码正确”
fi
完成<“$filename”

如果我想向远程机器执行命令,我可以在哪里提供命令?@Pooja:这不是你在OP中提出的问题。如果你有其他问题与“密码不正确时出错”无关,不需要在新问题中以适当的详细信息提问。抱歉,如果我没有明确的问题,但是在原始问题中,我也要求同样的问题:如果不是sshpass,我是否需要使用其他cmd,进行远程登录和执行cmds?问题的标题也是一样的。请让我知道您是否可以在查询中提供帮助?@Pooja:但是我们使用了
sshpass
,因此您的“if”条件得到了满足。现在出现了什么问题?df-h
是否在目标主机上运行?我尝试了您建议的方法从shell脚本中检查$。即使密码不正确,也不会回显错误的密码消息。但是,对于不正确的密码$?为5表示不正确的密码。
#!/bin/bash filename=“$1”同时读取-r行;执行sshpass-p'test'ssh-o strichhostkeychecking=no test@$行'df-h'如果[$?-eq 5],则回显“错误的密码”否则回显“可以通过ssh发送到框,详细信息可以选中“fi完成”<“$filename”