在另一台服务器上使用 sshpass 运行 命令

Using sshpass to run a command on another server

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

我正在这样做:

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

所以分解一下:

关于如何解决这个问题有什么想法吗?

我认为 su 命令在任何情况下都无效。 su 的语法是 su <someuser> [arguments...],所以你写的是要尝试 运行 command_must_be_run_root as user c.

我怀疑 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

无论出于何种原因,当您使用带有参数的命令时,您实际上需要告诉 sudo suroot 身份登录。如果不先登录,它将 运行 命令的第一部分,即使所有内容都用单引号引起来,但不是参数。 (我猜它认为这是命令的结尾,或者每个 sudo su -c 只有 1 个命令,这就是持久登录有效的原因?)。添加 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'"