将密码传递给 sudo su

将密码传递给 sudo su

我想在 ssh 进入远程服务器后使用 sudo 切换到不同的用户,为此我尝试了以下操作:

cat remote-test.sh
ssh -t -t [email protected] 'bash -s' << EOF
  /tmp/test.sh
EOF

当我从 development-server.net 执行 remote-test.sh 时,我想以 abcuser 身份通过 ssh 连接到 test-server.net,然后以 xyzuser 身份通过 sudo 连接到 test-server.net。

cat /tmp/test.sh

echo "password" | sudo -S su - xyzuser
cd /tmp/some/directory

有人可以建议如何在脚本中执行 sudo su 时传递密码吗?

答案1

你设置无密码 ssh以 的用户身份登录到 localhostxyzuserabcuser实现您的尝试。您需要将abcuser的公钥添加为 的 authorized_key xyzuser

然后,当您以 身份登录时abcuser,您可以执行以下操作:

ssh xyzuser@localhost do_something_as_xyzuser

如果您已阻止 ssh 访问xyzuser,请仅通过环回允许它。如果您使用的是 Linux,请参阅您的/etc/security/access.conf或同等版本以了解如何执行此操作。

答案2

放弃使用susudo 并使用正确的权限进行配置。这涉及编辑/etc/sudoers和添加条目,以允许用户在不提供密码的情况下执行命令。

你可以让它更高级一点

User_Alias SCRIPT_USER johndoe
Cmnd_Alias SCRIPT_PATH /usr/local/bin/myscript.sh

SCRIPT_USER ALL = NOPASSWD: SCRIPT_PATH

或者用一行代码获取同样的东西。

johndoe ALL = NOPASSWD: /usr/local/bin/myscript.sh

答案3

高度建议您使用@pkhamre 提出的解决方案(正确配置 sudoers 文件)。这是最佳选择,并赋予管理员最大控制权。

如果无法实现,我建议您使用@skjaidev (ssh authorized_keys) 的解决方案。这不需要您具有管理员权限,只需访问两个帐户,因此可能适用于更多情况。

但如果出于某种原因两者都不这些解决方案适合您......

然后你想使用预计为此。它可能已经安装在您的机器上了。它是​​任何类型的交互式命令行自动化的标准工具。

相关内容