【问题标题】:sshpass and SU and command all together in one liner querysshpass 和 SU 和命令一起在一个线性查询中
【发布时间】:2023-03-27 13:40:01
【问题描述】:

在我的脚本中: 1.我必须通过用户名和密码对机器进行ssh 2.比我必须做的su - 用户,它提示输入密码 3. 比我必须运行我的命令,即 ls 。

之前,没有第 2 步,我很高兴能够使用 sshpass 并通过我的脚本在单行命令中触发我的查询。像这样的东西。 sshpass -p pass user@host "command or ls"

但是现在我在 ssh 之后还有一个额外的步骤来执行 su。所以有人可以帮助我理解,我如何在一行查询中同时使用所有 3 个,即 sshpass、su 和命令。

谢谢

【问题讨论】:

    标签: bash su sshpass


    【解决方案1】:

    假设您只想更改该命令的用户,则需要“-c”标志。

    su - user -c "[command]"
    

    嵌套引号可能会有点复杂,但在这种情况下,您只需要转义内部的引号。

    su - user -c "sshpass -p pass user@host \"command or ls\""
    

    【讨论】:

    • 我将解释我是如何手动完成的。我不确定您的解决方案是否有效。 cmd1 : ssh hostname -l user 它提示我输入密码。我输入它。 hostname> su - user 它再次提示输入密码。然后我在这里运行我的命令,比如 ls。貌似你是先su再sshpass,你的cmd没地方输入su密码。
    • @TajinderSingh - 为什么用户需要对自己进行自我介绍?请记住 ssh -l user host 以用户 user 的身份登录。
    • 不是他自己。我运行的命令是 1. sshpass -p abc123 ssh alpha@tyco@company.com 2. su - beta 然后输入这个用户的密码 beta ***** 3. 比我运行我的实际命令。例如 cat log.txt 我首先必须使用 alpha 执行 ssh,然后必须对用户 beta 执行 su,然后必须以 beta 身份运行命令。有可能在一个班轮中吗?谢谢你的时间:)
    • @TajinderSingh - 是什么阻止你运行sshpass -p betapass beta@tyco.company.com?显然,您正在以用户 beta 的身份运行命令,但不是以用户 alpha 和用户 beta 的身份依次运行。
    • Approach1 step1: 我试过这个 sshpass -p betapass beta@tyco.company.com "command" 我得到错误 - "command" command not found。 Approach2 step1:但是当我这样做时 sshpass -p betapass beta@tyco.company.com step2: [betauser@tyco.com ~]$ command ...... 它可以工作。 Approach1 不工作,而 Approach2 工作,但我想要一个班轮中的东西,因为我想从我的代码中运行这个单行命令。在我的代码中,我无法执行方法 2 中提到的这两个步骤。