在另一台服务器上使用 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"
所以分解一下:
- 我正在使用“sshpass”将密码传递到我的 ssh 命令中
- 我正在以“test-admin”用户身份通过 SSH 连接到新服务器
- 进入服务器后,我运行正在执行命令
"sudo su command_must_be_run_root --arguments
- 这个“command_must_be_run_root”是一个命令,必须 运行 仅作为 root
- 它也有我必须传入的参数。但是我看到当我传入参数时,它会将这些参数传递给“su”命令,而不是将它们传递给我想要的新命令至 运行
关于如何解决这个问题有什么想法吗?
我认为 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 su
以 root
身份登录。如果不先登录,它将 运行 命令的第一部分,即使所有内容都用单引号引起来,但不是参数。 (我猜它认为这是命令的结尾,或者每个 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'"
我正在尝试 运行 服务器 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”命令,而不是将它们传递给我想要的新命令至 运行
关于如何解决这个问题有什么想法吗?
我认为 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 su
以 root
身份登录。如果不先登录,它将 运行 命令的第一部分,即使所有内容都用单引号引起来,但不是参数。 (我猜它认为这是命令的结尾,或者每个 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'"