AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1064138
Accepted
vidarlo
vidarlo
Asked: 2018-08-11 03:56:26 +0800 CST2018-08-11 03:56:26 +0800 CST 2018-08-11 03:56:26 +0800 CST

让 sudo 在登录后 n 分钟内不询问密码

  • 772

我定期通过 SSH 登录到 boxen,并以 root 身份运行更新等,使用sudo.

我很感激sudo在一段时间后要求输入密码,以防我离开终端等。但由于我已经输入了登录密码或 SSH 密钥短语,我不希望在 登录后的前 n 分钟内要求输入密码,而是表现得好像 sudo 在登录后立即成功执行一样。sudo

这是否可以配置为登录后首次调用不需要密码?

举例说明所需的行为

ssh [email protected]
[~]$ sudo somecommand
[~]$ #no password asked.
[~]$ sudo somecommand #n minutes later
[sudo] password for foo: 
ssh password sudo
  • 1 1 个回答
  • 588 Views

1 个回答

  • Voted
  1. Best Answer
    zwets
    2018-08-11T05:55:00+08:002018-08-11T05:55:00+08:00

    这是如何完成的一个想法。 注意:这是一个 hack;仅当无密码 sudo使您的眉毛想要爬到头骨上时才使用。

    前提是:我们不能将登录凭据传递给sudo. 所以问题是如何在NOPASSWD登录的前几分钟使用 sudo。我们可以通过在NOPASSWD模式下启动登录 shell 并产生一个后台进程来做到这一点,在.bashrc该进程中,几分钟后撤消NOPASSWD.

    # somewhere near the bottom of ~/.bashrc
    sudo -n /bin/bash -c "$HOME/nopasswd-sudo 60s 12h <&- >&- &"
    

    当然,脚本本身必须以 NOPASSWDsudo 启动,否则仍会提示我们输入密码。 并且脚本必须在 bash 会话结束时恢复NOPASSWD规则,以便NOPASSWD为下次登录设置。

    这是执行此操作的脚本$HOME/nopasswd-sudo:

    #!/bin/bash
    
    SUDO_FILE="/etc/sudoers.d/$(basename "$0")-${SUDO_USER}"
    SUDO_RULE="${SUDO_USER} ALL=(ALL:ALL) NOPASSWD: ALL"
    
    [ -z "$SUDO_USER" ] &&
         echo "$(basename "$0"): must be invoked with sudo" >&2 &&
         exit 1
    
    # Trap exit to recreate SUDO_FILE for next login
    trap "echo '$SUDO_RULE' > '$SUDO_FILE'; exit 0" EXIT
    
    # First time around just exit, creating the SUDO_FILE
    [ -f "$SUDO_FILE" ] || exit 0
    
    # After $1 (default 5m) remove SUDO_FILE to end NOPASSWD sudo
    sleep ${1:-5m} && rm -f "$SUDO_FILE"
    
    # Wait until our parent exits, and we will exit via the trap
    # If after $2 (default 12h) still alive, we assume we missed the HUP
    sleep ${2:-12h}
    

    在第一次运行时(必须从命令行执行,而不是从 执行.bashrc),脚本会创建/etc/sudoers.d/nopasswd-sudo-$USER包含NOPASSWD已登录通配符的文件$USER:

    {username} ALL=(ALL:ALL) NOPASSWD: ALL
    

    然后在每次登录时,它都会启动并在后台等待,直到无密码时间结束,之后它会删除文件,下一次sudo将需要密码。

    之后,它会无限期地等待(实际上最多等待 12 小时,以防止遗漏其父级 HUP 信号的孤儿),或者直到其父级登录 shell 结束。就在它退出之前,它的 EXIT 陷阱会重新创建NOPASSWD文件。


    sudo给喜欢冒险的人的提示:当你弄乱登录脚本或规则时,请记住始终打开一个单独的 root shell 。你不会是第一个把自己锁在外面的人。

    • 5

相关问题

  • 如何更改确定有效用户密码的规则?[关闭]

  • 如何通过一个 SSH 连接拥有多个终端会话?

  • 用户如何避免在启动时输入密码?[关闭]

  • 为什么我需要 root 权限才能在命令行中卸载驱动器,而不是在 Nautilus 中?如何改变它?

  • 如何与无头服务器进行图形交互?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve