微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用 sshpass 在另一台服务器上运行命令

我正在尝试在服务器 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”命令中,而不是将它们传递到我想要运行的新命令中

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

解决方法

无论出于何种原因,当您有一个带参数的命令时,您都需要实际告诉 sudo suroot 的身份登录。如果不先登录,它将运行命令的第一部分,即使所有内容都在单引号中,但不会运行 args。 (我猜它认为这是命令的结尾,或者每个 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'"

,

我认为 su 命令在任何情况下都无效。 su 的语法是 su <someuser> [arguments...],因此您编写的内容将尝试以用户 command_must_be_run_root 的身份运行 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。