Bash

sudo 測試憑據

  • February 24, 2014

我有一個可用的 bash 腳本,它可能執行 0 到 8-9 分鐘。它需要sudo是否發現問題並需要更改文件的權限/所有權。我不想等待sudo提示,因為這可能需要幾分鐘才能執行,所以我sudo -v在腳本的開頭就這樣做了。

如果我預計劇本會花很長時間,我經常會走到自助餐廳。所以前段時間我包含了一個陷阱處理程序,它呼叫一個函式sudo -k來刪除我的憑據。這樣,當我還沒有回來時,按Ctrl+C不會讓某人有權訪問。sudo我也會在腳本末尾呼叫該函式,以防腳本在我回來之前終止。

sudo如果我在呼叫腳本之前已經執行了一個命令sudo -v,它不會詢問我的憑據。那很好。

根據我從哪裡開始,我知道腳本不會花很長時間,我等待它完成。如果我在剛剛完成sudo命令後啟動它,那麼每次完成後我都沒有sudo憑據

我確實檢查了sudo -v. 在出口 0 上,這並沒有告訴我憑據是否已經存在(從執行腳本之前開始)或者密碼是否在之前正確輸入。這並不能幫助我知道我是否應該sudo -k在最後跑步。

我考慮過製作兩個版本的腳本,一個有 / 一個沒有sudo -v/ sudo -k,但我認為這不是一個好的解決方案,而且我有時會選擇錯誤的版本。

有沒有更好的方法來解決這個問題?我錯過了什麼嗎?

sudo -nv 2> /dev/null當憑據存在而不提示輸入密碼時,您可以使用它來獲取退出值 0。

fdisk如果一開始就沒有憑據,我有類似的東西來執行和刪除憑據。結合 catch Ctrl+C你會得到類似的東西(我不是一個好的 bash 程序員!):

#! /bin/bash
# this only removes credentials if logging in at the start was necessary

reset_sudo()
{
if [ $SUDOCREDCACHED != 0 ] ; then 
 # drop credentials if acquired in script
 sudo -k
fi
}

Ctrl_C()
{
 reset_sudo
 exit 0
}

sudo -nv 2> /dev/null
SUDOCREDCACHED=$?
if [ $SUDOCREDCACHED != 0 ] ; then 
 # acquire credentials
 sudo -v 
 if [ $? != 0 ] ; then 
   exit 1
 fi
fi

trap Ctrl_C SIGINT
### your stuff here ###
reset_sudo

引用自:https://unix.stackexchange.com/questions/115506