首页 > 解决方案 > Bash脚本中的Sudo SU而不询问用户密码

问题描述

我的用户在根组中。我不能以 root 身份 ssh 到服务器,因为Permission denied, please try again.我通常做的是我作为我的用户 ssh,一旦我登录,我输入sudo su并提供我的用户密码成为 root。

我想自动化我的部分工作,所以我想编写一个 bash 脚本,它将作为我的用户 ssh,切换到 root,然后调用命令集。

到目前为止,我附带了以下脚本,但我无法在不询问用户密码的情况下切换到 root 用户:

while read p; do
   p=$(echo $p|tr -d '\r')
   sshpass -p "myPasswd" ssh  -T -o StrictHostKeyChecking=no myUser@remoteServer << EOT
   cd /var/log/jboss/   #here I am getting 'permission denied' message as only root has access
   exit
EOT
done < $nodes

我也试过:

sshpass -p "myPasswd" ssh  -tt -o StrictHostKeyChecking=no myUser@remoteServer 'cd /var/log/jboss/'

但我得到了同样的permission denied错误信息

标签: bashshellssh

解决方案


出于安全原因,通常不允许 root 用户进行 ssh 访问。

PermitRootLogin no # value in /etc/ssh/sshd_config

上述设置首先阻止您以 root 身份登录。如果您对网络的安全性“满意”,您可以考虑修改该设置。如果您对 sshd 配置进行过修改,则需要重新启动 ssh 服务:

sudo service sshd restart

当然,如果您想遵循常识,您可能需要更改您的 sudoers 文件(如 chepner 和 Nic3500 建议的那样)。这是一个合理的配置更改:

将以下行添加到 /etc/sudoers 文件的底部:

#includedir /etc/sudoers.d

并将以下文件添加到您的 /etc/sudoers.d 目录:

cat /etc/sudoers.d/10_wheel:
%wheel ALL=(ALL) NOPASSWD: ALL

上面的示例将 sudo 配置为允许访问 wheel 组成员的所有命令,无需密码。您可能希望将组名更改为您的用户所属的组。

您可以通过发出以下命令来确定您的组:

groups

此外,为避免使用 sshpass,您可以将 ssh 公钥部署到远程主机。最后,如果您根本不想更改服务器,您可以使用期望实现您想要做的事情。如果您对 python 编码感到满意,我推荐 pexpect - 我发现它比通常讨论的基于 TCL 的期望要容易得多。


推荐阅读