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"
我正在尝试一个 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"