bash - 可以 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 失败,即密码无效,则需要打印密码无效。
解决方案
使用来自的返回值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
推荐阅读
- r - 如何在 Shiny 的 data.frame 中将列名设置为数学公式?
- java - Intellij 插件开发 - 如何创建和复制文件和文件夹
- python - 无法在 Mac 上的 PycharmCE 中导入 cv2
- javascript - node js - 不推荐使用 body-parser 未定义扩展:提供扩展选项
- reactjs - 输入标签不起作用(redux-form)
- c# - 在 FluentEmail 中的后续电子邮件中不断添加收件人
- javascript - MERN STACK throw new ERR_HTTP_HEADERS_SENT('set'); 获取 github 存储库
- javascript - 浏览器崩溃没有任何错误 - 原因
- django - 如何使用 Django 根据特定时间段更改模型字段?
- python - (TypeError: donehovering() 接受 0 个位置参数但给出了 1 个)问题