sudo 提权时自动输入密码

本文介绍了如何在需要sudo提权执行命令时避免频繁输入密码的两种方法。方案一是利用命令的参数结合管道自动输入数据,例如通过创建脚本配合sudo的-t选项。方案二是使用expect工具,它能模拟交互输入密码,但需要额外安装。这两种方法旨在提高日常操作的效率。

问题描述

有这么一个场景:我需要使用 sudo 提权来执行一条命令,可能是打开一个常用的APP,或者是经常需要 pacman进行系统更新。那么,问题来了,由于这个APP我经常使用,而使用sudo时每次都需要输入密码,显然过于麻烦,那么,有没有什么办法可以自动填充密码呢?

嗯哼,办法是有的。

解决方案

目前找到两种解决方案,方案一亲测有效,方案二未试过,仅做记录。

方案一

有的应用自带选项,可以直接从标准输入读入数据,这时候只需要结合管道就好了。比如sudo-S参数,以及passwdde -stdin参数。

举个例子,使用该方法运行netease-cloud-music

使用 sudo-S选项,结合shell 的输入重定向。比如,我每次都需要提权打开netease-cloud-music,那么我可以写这么一个脚本:

#!/usr/bash

# netease-cloud-music.sh
echo "your password" | sudo -S netease-cloud-music --force-device-scale-factor=2 --no-sandbox

然后赋予执行权限:sudo chmod +x netease-cloud-music.sh,然后再执行sh netease-cloud-music.sh即可,无需再次输入密码。

与快捷键绑定之后,每次只需要按下快捷键,他就能自动打开了,很方便。

方案二

这个办法涉及一个额外的应用叫做expect,在manajro上可以使用pacman来安装。expect就是用来做交互的,基本任何交互登录的场合都能使用,但是需要安装expect包。

语法如下:

#!/bin/expect  
set timeout 30  
spawn ssh -l jikuan.zjk 10.125.25.189  
expect "password:"  
send "zjk123\r"  
interact 

上述命令解释如下:

  • expect跟bash类似,使用时要先登录到expect,所以首行要指定使用expect

  • 在运行脚本时候要expect file,不能sh file了

  • 上面语句第一句是设定超时时间为30s,spawn是expect的语句,执行命令前都要加这句

  • expect "password:"这句意思是交互获取是否返回password:关键字,因为在执行ssh时会返回输入password的提示:jikuan.zjk@10.125.25.189’s password:

  • send就是将密码zjk123发送过去

  • interact代表执行完留在远程控制台,不加这句执行完后返回本地控制台

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值