我想在 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以 的用户身份登录到 localhostxyzuser
以abcuser
实现您的尝试。您需要将abcuser
的公钥添加为 的 authorized_key xyzuser
。
然后,当您以 身份登录时abcuser
,您可以执行以下操作:
ssh xyzuser@localhost do_something_as_xyzuser
如果您已阻止 ssh 访问xyzuser
,请仅通过环回允许它。如果您使用的是 Linux,请参阅您的/etc/security/access.conf
或同等版本以了解如何执行此操作。
答案2
放弃使用su
sudo 并使用正确的权限进行配置。这涉及编辑/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) 的解决方案。这不需要您具有管理员权限,只需访问两个帐户,因此可能适用于更多情况。
但如果出于某种原因两者都不这些解决方案适合您......
然后你想使用预计为此。它可能已经安装在您的机器上了。它是任何类型的交互式命令行自动化的标准工具。