Bash shell:找不到命令



我正在使用shell模块执行以下命令

tasks:
- name: Command
shell: "sshpass -p 123 ssh -o 'StrictHostKeyChecking no' root@10.67.13.50 shell << EOF n whoaminEOF | cat"

我得到以下错误

"stderr_lines": [
"/bin/sh: line 2: warning: here-document at line 0 delimited by end-of-file (wanted `EOF')",
"Warning: Permanently added '10.67.13.50' (ECDSA) to the list of known hosts.",
"bash: shell: command not found"
]

我的命令出了什么问题?

tl;dr您可以a(用shbash替换shell,或者b(用whoami替换shell并删除heredoc。

让我们分解shell命令:

sshpass -p 123 ssh -o 'StrictHostKeyChecking no' root@10.67.13.50 shell << EOF n whoaminEOF | cat

这里有几个过程。

  • 具有两个子流程的sh管道:
    • sshpass,然后作为子流程运行…
      • ssh,连接到10.67.13.50并运行…以n whoamin为标准输入的shell
  • …和cat,后者从sshpass过程层次结构获得输出

有几个潜在的错误:

  1. 您可以安全地从管道中删除cat

    正如@KamilCuk所提到的,cat从它的输入中读取并写出它。它在这里什么也没做;它既没用也没害处。

  2. shell不是远程服务器上的命令(10.67.13.50(。如果要运行shell,通常会使用shbash

  3. 此外,您可以将整个shell … EOF序列替换为whoami

    << EOF n whoami nEOF是一个heredoc,用于告诉远程服务器上的shell要执行哪些命令。但是,只有一个命令被执行。

总之,shell:行可以重写为:

sshpass -p 123 ssh -o 'StrictHostKeyChecking no' root@10.67.13.50 whoami

…这是一个奇怪的命令,因为我们知道远程用户root

相关内容

  • 没有找到相关文章

最新更新