【问题标题】:Using sshpass to run a command on another server使用 sshpass 在另一台服务器上运行命令
【发布时间】:2023-04-01 15:47:01
【问题描述】:

我正在尝试在服务器 X 上运行一个命令,以将该 SSH 连接到服务器 Y 并运行另一个命令

我正在这样做:

sshpass -p 'my_password' ssh -t test-admin@my_ip "sudo su c command_must_be_run_root --arguments"

所以分解一下:

  • 我正在使用“sshpass”将密码传递到我的 ssh 命令中
  • 我正在以“test-admin”用户的身份通过 SSH 连接到新服务器
  • 一旦进入服务器,我正在运行命令"sudo su command_must_be_run_root --arguments
    • 此“command_must_be_run_root”是一个只能以 root 身份运行的命令
    • 它还有我必须传入的参数。但是我看到,当我传入参数时,它会将这些参数传递给“su”命令,而不是将它们传递给我想要运行的新命令

关于如何解决这个问题的任何想法?

【问题讨论】:

    标签: bash shell ssh sshpass


    【解决方案1】:

    无论出于何种原因,当您有一个带有参数的命令时,您实际上需要告诉sudo suroot 登录。如果不先登录,它将运行命令的第一部分,即使所有命令都在单引号中,但不是 args。 (我猜它认为这是命令的结尾,或者每个sudo su -c 只有一个命令,这就是持久登录有效的原因?)。添加sudo su -l root 后,您可以继续使用-c,后面的所有内容都需要单引号。

    应该是这样的: sshpass -p 'my_password' ssh -t test-admin@my_ip "sudo su -l root -c 'command_ran_as_root --arguments'"

    【讨论】:

      【解决方案2】:

      我不认为su 命令在任何情况下都是有效的。 su 的语法是su <someuser> [arguments...],所以你写的内容是尝试以用户c 运行command_must_be_run_root

      我怀疑c 应该是-c,在这种情况下,您需要将参数引用到-c,这将解决您所询问的问题:

      sshpass -p 'my_password' ssh -t test-admin@my_ip "sudo su -c 'command_must_be_run_root --arguments'"
      

      但下一个问题是,如果您已经拥有sudo 访问权限,为什么还要打扰su?你可以改写:

      sshpass -p 'my_password' ssh -t test-admin@my_ip sudo command_must_be_run_root --arguments
      

      【讨论】:

        猜你喜欢
        • 2021-11-27
        • 1970-01-01
        • 2021-09-21
        • 2023-04-04
        • 2019-09-02
        • 1970-01-01
        • 2019-12-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多