自动su登录,无需密码提示

自动su登录,无需密码提示

我正在编写一个 shell 脚本,我想在多个 Unix 服务器上自动执行服务重新启动过程。我作为普通用户无权运行服务重新启动命令。仅有的s_用户有权运行它们。

重启服务的步骤:

  1. 使用我的用户名和密码登录服务器。
  2. 要运行重新启动服务,我需要使用以下命令将用户切换到 s_user:(我需要这个命令而不提示密码)

    sudo su - s_user 
    

上面的命令提示输入密码,我将提供密码以重新启动服务。我必须在所有服务器上执行此过程。我想通过标准输入向 su 提供密码来跳过密码提示。

到目前为止我已经尝试过以下命令:

1.   echo 'password'|sudo -S su -c " .../bin/services stop" 
Output:
[sudo]password for abc.xyz: Sorry, user abc.xyz is not allowed to execute '/bin/su - s_user' -c /bin/services stop' as root on [Servername]                        

在上面的命令中我给出了我的密码。我也尝试过提供 s_user 密码,但它给出以下输出:

[sudo]password for abc.xyz: Sorry,try again.
[sudo]password for abc.xyz:
sudo:pam_authenticate:Conversation error

我在下面的命令中将“su”替换为“u”,但仍然得到与第一个命令相同的输出错误。

2.  echo 'password'|sudo -S u -c " .../bin/services stop" 

我在下面的命令中提供了 s_user,但仍然收到与第一个命令相同的输出错误。

3.  echo 'password'|sudo -S su - s_user -c ".../bin/service stop" 

接下来我尝试了以下命令。

4.  echo 'my password'|su -c ".../bin/services stop" -s /bin/sh abc.xyz
Output:
Standard in must be a tty

我也尝试过以下命令。

5.  su -c "command_to_restart_the_services" -s /bin/sh abc.xyz 

我能够成功运行该命令。

6.  echo password|sudo -S su - user-to-switch
    sudo -S su - user-to-switch

上面的命令仍然要求输入密码。

限制:

• 我无法使用“预计”,它没有安装在我的机器上。

• 我无法编辑“须多儿”文件。我没有权利。

答案1

我看到你正在使用sudo成为root,然后su成为s_user.为此,您将使用您的密码(用于sudo)。您不需要 的密码s_user

您可以通过将 ssh 密钥添加到帐户来做到这一点s_user,但我认为这种情况下的解决方案不是最佳的。

首先我要指出的是,你不需要su,而且最好不要使用它。因此sudo su - s_user -c command,不要这样做sudo -u s_user command。系统仍会要求您输入密码。但是您现在可以配置/etc/sudoers

添加一个文件/etc/sudoers.d/s_commands,包含类似的内容(但已检查,带有/usr/bin/visudo):

Cmnd_Alias S_COMMAND=/usr/bin/command, /usr/bin/anotherCommand
%s_group ALL = (s_user) NOPASSWD : S_COMMAND

这将允许以 s_user 身份使用这些命令的密码较少,但仅限于组 s_group 中的用户(您必须添加该组)。

然后设置一个 shell 别名,例如:alias s_command="sudo -u s_user command"


笔记:

  • su获取您要切换到的用户的密码。
  • sudo默认情况下,采用您所在用户(您要切换的用户)的密码。
  • sudo不从 stdin 读取密码,而是从 tty 读取。

答案2

一种方法是使用 ssh。

使用 ssh-copy-id 您可以存储身份验证:

ssh-copy-id [email protected]

(如果没有设置密钥,则用于ssh-keygen生成一个)

接下来你可以使用ssh而不是 sudo 来执行命令而无需密码提示:

ssh [email protected] " .../bin/services stop"

答案3

这并不完全是您问题的答案,但可能是您任务的解决方案。

我想您知道每台服务器上 s_user 的密码,并且sshd在这些服务器上安装了该密码(并且按预期工作;取决于服务器上运行的操作系统)。

作为普罗莫内特如上所述,您可以使用 ssh,但无需使用自己的凭据登录服务器。

在你的电脑:

首先,使用 生成您自己的密钥对ssh-keygen。默认情况下,这将存储在 ~/.ssh 目录中。

接下来,对于每个涉及的服务器调用ssh-copy s_user@<server>;系统会要求您输入服务器上 s_user 的密码。

现在检查是否一切顺利,只需尝试即可ssh s_user@<server>。如果无需输入密码即可完成此操作。

在您的脚本(在本地计算机上)中,您现在可以调用

ssh s_user@<server> "whatever-command-you-need-to-run"

无需输入密码。

Rem.:我想您的本地计算机也运行类似 UN*X 的操作系统。如果您运行的是 Windows,则可以使用 Windows 数据包附带的程序putty

相关内容