我有时会错误地使用 关闭远程计算机sudo init 0
,因此我在我的 rc 文件之一中编写了类似的内容:
alias sudo='sudo '
if [ $SSH_CLIENT ]; then
alias init 'echo Never use init when ssh'
fi
然而,尽管 rc 文件被执行,但init
仍然运行/sbin/init
而不是别名。而且我不喜欢将全局包装脚本添加到/usr/local/bin
.那么可以禁用吗sudo init 0
?或者我必须向管理员寻求帮助?
答案1
重新定义sudo
为函数:
sudo() if [ "$1" = init ] && [ -n "$SSH_CLIENT" ]; then
echo >&2 "Never use init when ssh"
return 1
else
command sudo "$@"
fi
如果您希望在之后扩展别名sudo
,您仍然可以添加
alias sudo='sudo '
它仍然会调用我们的sudo
函数。
答案2
对于 Debian 及其衍生品,有一个软件叫做molly-guard
这正是您想要的——如果它检测到远程登录,它会拦截关闭命令,并要求您通过输入系统名称来确认是否确定关闭正确的系统。
答案3
sudo
从您的问题描述来看,我认为您在通过 SSH 登录时使用频率不高。你应该告诉自己:
if [ -n "$SSH_CLIENT" ]; then
alias sudo='echo "Reconsider your wish, you must! "'
fi
这将使每次调用都会sudo
产生警告。如果您仍然想要,sudo init 0
则必须输入\sudo init 0
.这\
将使 shell 使用真正的命令,而不是您的别名。
然而,我对您的实际建议是在未来 5 年内停止使用 sudo。真正的。