shell脚本中针对sudo命令等密码输入的问题解决方案
1、 sudo 命令:
sudo是linux操作系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。
充分利用sudo命令不仅减少了root用户的登录和管理时间,同样也提高了安全性。sudo不是对shell的一个代替,它是面向Linux操作系统中每个命令的。
特点:
§ sudo能够限制用户只在某台主机上运行某些命令。
§ sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器。
§ sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票(这个值可以在编译的时候改变)。
§ sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0440。
原理:
在sudo于1980年前后被写出之前,一般用户管理系统的方式是利用su切换为超级用户。但是使用sudo命令的缺点之一在于必须要先告知超级用户的密码。
sudo使一般用户不需要知道超级用户的密码即可获得权限。首先超级用户将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息,登记在特殊的文件中(通常是/etc/sudoers),即完成对该用户的授权(此时该用户称为“sudoer”);在一般用户需要取得特殊权限时,其可在命令前加上“sudo”,此时sudo将会询问该用户自己的密码(以确认终端机前的是该用户本人),回答后系统即会将该命令的进程以超级用户的权限运行。之后的一段时间内(默认为5分钟,可在/etc/sudoers自定义),使用sudo不需要再次输入密码。
由于不需要超级用户的密码,部分Unix系统甚至利用sudo使一般用户取代超级用户作为管理帐号,例如Ubuntu、Mac OS X等。
echo "password"|sudo -S 命令
[password:用户密码;用户在使用sudo命令时系统弹出的需要用户的密码才能去执行sudo后面的命令。]
echo 'password' |sudo -S ifconfig wlan0 down
代码举例1:
代码举例2:
def down_network(ifname): """ down网卡 @param ifname: 网卡名 @return: """ passwd = ini.get_option_data('pc_info', 'pc_user_pwd') command = 'echo {}|sudo -S ifconfig {} down'.format(passwd, ifname) os.system(command) return True
代码举例3:
def up_network(ifname): """ up网卡 @param ifname: 网卡名 @return: """ passwd = ini.get_option_data('pc_info', 'pc_user_pwd') command = 'echo {}|sudo -S ifconfig {} up'.format(passwd, ifname) os.system(command) for i in range(10): ip = get_if_addr_ip(ifname=ifname, ipv6=False) if ip: logger.info(logger.log_info() + '重启网络后获取到的ip: {}'.format(ip)) print('重启网络后获取到的ip: {}'.format(ip)) return ip else: time.sleep(3) return False
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
2021-04-28 使用Python生成静态二维码 || 动态二维码
2021-04-28 Pandas数据预处理的常用函数
2021-04-28 Pandas数据处理
2021-04-28 CSV文件解析