たとえば、Firewall-cmd(実行するにはroot権限が必要です)を使用するときにオプションをオートコンプリートしようとすると(たとえば、「--perm」を書く)、ウィンドウにプロンプトが表示されます(したがって、端末のsudoとは異なります)。パスワードを入力してTabキーを押します。オートコンプリートを使用するたびに以前にパスワードを入力するか、sudoを使用してコマンドを実行しても(特定の時間にメッセージを再表示しないように設定されています)、これが発生します。
一定期間パスワードを永久に入力するか、オートコンプリートの認証を完全に無効にする方法はありますか(まだ実際の実行プログラムに認証したいですか?
確実な解決策はrootとしてログインすることです(suまたはsudo -iを使用)。しかし、私はこれを避けたいと思います。
私はbashを使用しており、私のソースコードは.bashrc
Debianパッケージに付属の標準ファイルです。bash_completion
bash-completion
. /etc/bash_completion
私のものを使うことができます.bashrc
。
実行complete -p firewall-cmd
結果は
bash: complete: firewall-cmd: no completion specification
私がpolkitが関連していると思う理由(元のタグを参照)は、認証会話を中断したときに標準出力に次のものが表示されるためです。
Authorization failed.
Make sure polkit agent is running or run the application as superuser.
答え1
通常、Firewall-cmdなどのコマンドに関連する完了を表示するには、次の内容が返されるとcomplete -p firewall-cmd
予想しますcomplete -F _firewall_cmd firewall-cmd
。その後、以下を_firewall_cmd
使用してtype _firewall_cmd
機能を確認できます。
Debian の bash コンプリートパッケージは、complete -D
コマンドを使用してデフォルトのコンプリート機能を設定します。この機能は、初めて使用するときに特定の完成機能が使用可能であることを確認し、その場合はロードします。
したがって、どのように設定されているかを見る前に一度試してみることが重要です。
firewall-cmd
そのために文書現在の起動の完了機能を定義します。
_firewall_cmd()
{
local cur prev words cword split
_init_completion -s || return
firewall-cmd --state 1> /dev/null || return
/usr/bin/firewall-cmd プログラム自体は最終的に root アクセスと認証を必要とする Python スクリプトです。firewall-cmd --state
ファイアウォールが実行中の場合、呼び出しは true を返します。したがって、完了コードの目的は、ファイアウォールが実行されていないときに完了を実行しないようです。ただし、ファイアウォールが実行されていることを確認するには、権限が必要なように作成され、不要なメッセージが表示されます。
firwall-cmd --state 1> /dev/null || return
補完機能からその行を削除すると、パスワードを求めるプロンプトが表示されずにすばやく完了でき、その他の一般的な利点があります。
答え2
sudo の nopasswd オプションを使用できます。 suodersファイルにユーザーのnopasswdオプションを追加するだけです。
たとえば、ユーザー名がimosdinの場合は、コマンドを実行してsudoersの項目を変更し、visduo
以下の項目を追加/変更します。
imsodin ALL=(ALL) NOPASSWD: ALL
これで、システムでは、imsodinユーザーがパスワードを要求せずにsudoを介してすべてのコマンドを実行できるようになりました。