所以我有一个类似这样的函数。这是一个过于简单的例子,但足以说明我的问题。
由于某种原因,我无法获取 ssh 远程命令的退出状态。无论我给出 exit 0 或 true,还是给出抛出成功命令的命令,最终结果都是一样的,我总是得到1。
问题是,当从脚本运行时,此代码可以完美运行,但如果从函数运行则不行。
function hello(){
while read user password
do
ssh -n -q user@host 'exit 0' ; echo $?
done <<< "$( cat creds.txt )"
}
答案1
请记住,ssh 不允许将密码作为参数传递。您需要使用外部实用程序,如 sshpass 或公钥/私钥。
使用 sshpass 后,该功能将如下所示:
function hello(){
while read user host password
do
sshpass -p "$password" ssh -n -q $user@$host 'exit' ; echo $?
done <<< "$( cat creds.txt )"
}
我尝试使用包含 2 个主机的列表的脚本;一个主机使用好密码,另一个主机使用坏密码:
5 # result of a bad password
0 # result of a good password