Ssh 退出代码在函数内不起作用

Ssh 退出代码在函数内不起作用

所以我有一个类似这样的函数。这是一个过于简单的例子,但足以说明我的问题。

由于某种原因,我无法获取 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

答案2

看起来你想实现 Linux 机器的自动化。是时候开始学习了ansible或任何其他配置管理

另请阅读XY问题

相关内容