sudo 提权时自动输入密码

问题描述

有这么一个场景:我需要使用 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的提示:[email protected]’s password:

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

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

你可能感兴趣的:(问题一堆堆,Linux)