如何在bash脚本中的一系列命令中重用sudo

协调员

我有一个脚本,该脚本打开几个正在运行的终端窗口iftop以观察各种端口活动。

每个打开的终端都要求我输入sudo密码...考虑到总共有5个终端,这有点麻烦。

所以我的问题是,我如何一次输入sudo password并让所有窗口都使用该权限运行,而不是在每个窗口中都输入它?

#!/bin/bash

TITLE="${USER}@${HOSTNAME}"' iftop (h=help, L=lin/log scales, t=line display mode, T=line totals, p=port display)'
gnome-terminal --title "$TITLE" -e 'sh -c "sudo iftop -P -f \"port 22\""' --hide-menubar --zoom=0.85

TITLE="${USER}@${HOSTNAME}"' iftop (h=help, L=lin/log scales, t=line display mode, T=line totals, p=port display)'
gnome-terminal --title "$TITLE" -e 'sh -c "sudo iftop -P -f \"port 33 or port 44\""' --hide-menubar --zoom=0.85

TITLE="${USER}@${HOSTNAME}"' iftop (h=help, L=lin/log scales, t=line display mode, T=line totals, p=port display)'
gnome-terminal --title "$TITLE" -e 'sh -c "sudo iftop -P -f \"(port 55) or (port 66)\""' --hide-menubar --zoom=0.85 

我确实尝试运行整个脚本sudo,结果导致打开的所有终端也都是sudo终端。我需要的是运行该终端的常规终端sudo iftop

案件

timestamp_type/etc/sudoers/etc/sudoers.d/*设置为ttyppidtty是根据sudo的手册页的默认设置

timestamp_type -sudoers使用每个用户的时间戳文件凭据缓存。timestamp_type选项可用于指定所使用的时间戳记记录的类型。它具有以下可能的值:

global单个时间戳记录用于所有用户的登录会话,而与终端或父进程ID无关。一条附加记录用于sudo在管道中多次使用时序列化密码提示,但这不会影响身份验证。

ppid单个时间戳记录用于具有相同父进程ID(通常是shell)的所有进程。从同一外壳(或其他公共父进程)运行的命令在timestamp_timeout几分钟之内将不需要密码(默认15)。通过具有不同父进程ID的sudo运行的命令(例如来自shell脚本的命令)将分别进行身份验证。

tty每个终端使用一个时间戳记录,这意味着用户的登录会话将分别进行身份验证。如果没有终端,则行为与ppid相同。从同一终端运行的命令在timestamp_timeout几分钟之内将不需要密码(默认15)。

默认值为tty

仅1.8.21版或更高版本支持此设置。

如果它设置为ttyppid,那么这可以解释为什么你被要求每次都输入密码。sudo您正在运行的每个命令都在一个单独的中执行gnome-terminal,因此在一个单独的tty一个不同的父PID中执行。

看起来global是唯一会允许您想要的设置。


如果那没有帮助,那么您的timestamp_timeout设置是什么?是否设置为0默认值应为15分钟。

还要检查其他timestamp*设置(timestampdirtimestampowner)。如果timestampdir(我的debian sid系统上的默认值为/ run / sudo / ts)不存在或者不是timestampowner(默认rootrwX,它们可能会导致此问题

sudo将记录通过syslog一个描述性错误消息如果这些设置导致错误的电子邮件管理员(root)。


另一种选择是进行编辑,/etc/sudoers以便您的用户iftop无需输入密码即可运行例如

yourusernamehere ALL= NOPASSWD: /usr/sbin/iftop

请参阅如何在没有密码提示的情况下以root用户身份运行特定程序?有关此的更多详细信息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Bash脚本中列出一系列文件?

来自分类Dev

如何创建一个简单的脚本(在Linux中)执行一系列命令?

来自分类Dev

如何对bash中的一系列数字求和

来自分类Dev

如何在python中搜索一系列行?

来自分类Dev

如何在python中添加一系列数字

来自分类Dev

如何在Django中迭代一系列功能?

来自分类Dev

如何在一系列整数中除以a?

来自分类Dev

如何在JavaScript中检查一系列数字

来自分类Dev

如何在ansible中循环一系列任务

来自分类Dev

如何在bash中设置一系列数组元素

来自分类Dev

如何在bash中设置一系列数组元素

来自分类Dev

调试期间暂时禁用R脚本中的一系列命令

来自分类Dev

在bash脚本中的特定范围内创建一系列不同的随机数

来自分类Dev

在DigitalMicrograph脚本中定义一系列功能

来自分类Dev

在MySQL中运行一系列脚本

来自分类Dev

在ubuntu终端中执行一系列命令

来自分类Dev

对目录中的每个文件运行一系列命令

来自分类Dev

对字段中的每个值执行一系列命令

来自分类Dev

一系列sed命令可在命令行上运行,但不能在脚本中运行

来自分类Dev

一系列sed命令可在命令行上运行,但不能在脚本中运行

来自分类Dev

如何在一行中调用一系列的多个过程

来自分类Dev

如何从一系列样本中创建Observable?

来自分类Dev

如何从数组中删除一系列值?

来自分类Dev

如何按熊猫中的一系列值分组?

来自分类Dev

如何从Python文件中解脱一系列对象?

来自分类Dev

如何添加一系列数字中的Java

来自分类Dev

如何更改一系列绘图在ggplot中的标题?

来自分类Dev

如何更改一系列绘图在ggplot中的标题?

来自分类Dev

如何从一系列事件中创建日历?

Related 相关文章

热门标签

归档