bash脚本可以ssh到远程机器并执行命令,当密码不正确时抛出错误
我正在尝试一个bash脚本,其中我获取了一个文件的参数,该文件具有IP地址。我使用的是sshpass,但是我无法知道ssh登录是否成功。有办法检查这个吗? 如果不是sshpass,请建议我是否需要使用任何其他cmd来远程登录和执行cmds 以下是代码片段: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'
#!/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”