【问题标题】:Sudo SU in Bash script without asking user for passwordBash脚本中的Sudo SU而不询问用户密码
【发布时间】:2019-03-14 13:16:51
【问题描述】:

我的用户在根组中。我无法以 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 错误消息

【问题讨论】:

  • 如果你有root权限,你可以在远程主机上配置sudo,让你用sudo运行某些命令不需要需要密码。
  • 您还应该设置公钥身份验证,这样您就不需要在脚本中以明文形式公开您的密码。
  • 检查 sudoers 配置的 NOPASSWD 选项。

标签: bash shell ssh


【解决方案1】:

出于安全原因,通常不允许 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 以允许访问轮组成员的所有命令,而无需密码。您可能希望将组名更改为您的用户所属的组。

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

groups

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-27
    • 2021-07-19
    • 2021-06-13
    • 1970-01-01
    • 2018-09-11
    • 2011-04-20
    • 2019-02-12
    • 1970-01-01
    相关资源
    最近更新 更多