欢迎转载!转载时请注明出处:http://blog.csdn.net/nfer_zhuang/article/details/42454283

引言

使用场景:

我所在的smb环境下,只要出现网络异常断开后,再次打开smb共享目录就会出现问题,这个时候就需要在shell下重新设置smb的密码。

标准用法:

使用sudo smbpasswd nferzhuang来设置nferzhuang的smb密码,输入命令后还需要输入一次sudo的密码和两次smbpasswd的密码

nferzhuang@szmce14:~$ sudo smbpasswd nferzhuang
[sudo] password for nferzhuang:
New SMB password:
Retype new SMB password:
nferzhuang@szmce14:~$

一句话脚本用法:

passwd=nferzhuang && (echo $passwd;echo $passwd) | sudo -A smbpasswd nferzhuang -s

passwd=nferzhuang && printf "${passwd}\n${passwd}\n"  | sudo -A smbpasswd nferzhuang -s

上面的脚本分解步骤是:

  1. 设置一个临时变量passwd,其意义是需要设置smb密码
  2. 通过echo或printf输出passwd的值两次并通过管道传递给smbpasswd命令。(此处输出两次,是因为在smbpasswd的时候需要输入两次密码来确认)
  3. 通过sudo -A参数来避免sudo时输入密码
  4. 通过smbpasswd nferzhuang -s参数来使用上面echo的输出作为smbpasswd的输入

其中临时变量以及echo的操作比较简单,不再赘述。下面分别描述一下sudo -A参数和smbpasswd -s参数。

注:如果你执行上面的一句话脚本失败了,是因为你没有设置SUDO_ASKPASS环境变量,或者SUDO_ASKPASS环境变量指向的文件没有输出有效值,具体见下一章节。

sudo -A参数详解

先看一下sudo的man手册中针对-A参数的说明:

-A         Normally, if sudo requires a password, it will read it from the user's terminal.  If the -A (askpass)
           option is specified, a (possibly graphical) helper program is executed to read the user's password and
           output the password to the standard output.  If the SUDO_ASKPASS environment variable is set, it
           specifies the path to the helper program.

其大致意思是,在使用sudo命令时,如果有-A参数,则需要通过helper program(如果是UI,则可以通过用户输入)来产生sudo密码,而这个helper program的路径是有SUDO_ASKPASS环境变量来指定的。

在博文《让某一个sudo命令不需要输密码》中提供了一种方法,就是写一个最简单的c程序,通过printf来输出sudo的密码。在这里,如果对于安全没有特殊要求,则可以使用下面的一个简单的shell脚本来输出sudo的密码:

#!/bin/bash
echo nferzhuang

注:创建后一定要使用chmod 700 sudo_passwd_helper.sh来设置该文件的读写执行权限完全为当前用户。否则别人直接cat一下就得到你的sudo密码了,这样做坏事就留你名了!!!

创建该脚本后,需要设置SUDO_ASKPASS环境变量来指向该helper program,而为了在每一个ssh窗口都能正常执行,需要将该环境变量设置添加到~/.bashrc文件中:

export SUDO_ASKPASS=~/bin/sudo_passwd_helper.sh

smbpasswd -s参数

同理,先看一下smbpasswd的man手册中针对-s参数的说明:

-s        This option causes smbpasswd to be silent (i.e. not issue prompts) and to read its old and new passwords from
           standard input, rather than from /dev/tty (like the passwd(1) program does). This option is to aid people
           writing scripts to drive smbpasswd

其大致意思是,如果使用-s参数,则smbpasswd会通过标注输入(stdin)来读取需要的密码,而没有该参数时,则通过当前的TTY读取用户输入。因为在之前通过echo或printf已经在stdin产生了两个passwd,并通过"|"管道提供给smbpasswd命令来使用。

总结

本次一句话脚本使用到了以下知识:

  1. 临时变量的设置和读取
  2. echo和printf命令来输出变量的值
  3. &&和;来连接多个命令执行
  4. sudo命令的-A参数
  5. 环境变量的设置
  6. ~/.bashrc文件的作用
  7. smbpasswd的-s参数
  8. chmod命令来设置文件的权限

一句话脚本系列之修改smb用户密码相关推荐

  1. Windows2003使用WEB方式修改域用户密码

    Windows2003使用WEB方式修改域用户密码 1. 前言 在客户端PC加入到域的情况下,用户修改自己的帐户密码非常方便,但是在生产环境中有时候客户端没有加入到域只是用其账号登录到某些应用系统,比 ...

  2. 批量修改linux服务器密码,Linux下批量修改服务器用户密码方法步骤

    Linux下批量修改服务器用户密码方法步骤 密码快要过期.由于机器数量众多,因此采用批量修改密码的方式来进行处理. 下面是具体步骤: 1.配置ssh免key # ssh-keygen -t rsa - ...

  3. Kali Linux 2020.1快速修改root用户密码

    Kali Linux 2020.1快速修改root用户密码 安装Kali Linux 2020.1系统过程中,将要求创建一个普通用户.而且,在安装过程中没有设置过root密码.由于大部分软件需要roo ...

  4. Kali Linux 2020.1修改root用户密码

    Kali Linux 2020.1修改root用户密码 安装Kali Linux 2020.1系统后,需要使用root用户权限安装软件.由于root用户的默认密码未知,所以需要在单用户模式下重新设置r ...

  5. 9、 root修改普通用户密码

    在 MySQL 中,root 用户拥有很高的权限,不仅可以修改自己的密码,还可以修改其他用户的密码.本节主要介绍 root 用户修改普通用户密码的几种方法. 使用SET语句修改普通用户的密码 在 My ...

  6. MySQL的root用户修改普通用户密码

    root用户修改普通用户的密码 GRANT语句 使用GRANT语句,修改普通用户密码 GRANT语句,不仅可以创建用户为用户授权,还可以修改用户的密码 通常情况下,为了不影响当前账户的权限,可以使用G ...

  7. oracle个人版初始密码,不知道普通用户密码,只知道sys用户密码,不修改普通用户密码,即可登录...

    I.查询用户名和用户加密密码 oracle11g执行sql语句: select u.name,u.password from user$ u where u.name in (select usern ...

  8. mysql root密码忘记2018_2018-03-28设置及修改mysql用户密码学习笔记

    退出mysql方法 quit或者exit 设置及修改mysqlroot用户密码 安装mysql后,默认管理员root密码为空,这很不安全,需要设置一个密码,在安装mysql单实例后,有个初始优化的一些 ...

  9. mysql 8.0.16修改root密码_mysql 8.0.16 winx64及Linux修改root用户密码 的方法

    连接数据库等基础操作请自行解决哈,本篇是重点记录如何改密码. 一.查询用户密码: 查询用户密码命令: select host, user, authentication_string from mys ...

最新文章

  1. ffmpeg rtp时间戳
  2. redis缓存数据表
  3. Linux Kbuild文档 3
  4. 30岁学python全栈_知乎热帖!戳痛100万程序员:我30岁了,我还能学Python吗?
  5. Oracle18C RPM安装介绍
  6. 数据库存储时间的时区问题
  7. zabbix系列zabbix3.4监控mysql5.7
  8. 练习题︱基于今日头条开源数据的词共现、新热词发现、短语发现
  9. 我的世界seus光影java版下载_我的世界seus光影mod
  10. Modis数据下载及后处理
  11. php goeasy,如何使用GoEasy实现PHP与Websocket实时通信
  12. 互联网公司大数据,主要有什么优势和劣势?
  13. python回车和换行的区别_换行\ n与回车\ r的区别
  14. 谷歌浏览器如何收藏网站 谷歌浏览器收藏网站的方法步骤
  15. 如何批量将 Excel 文档转为 Svg 格式
  16. 【图床】图床、PicGo进行图片管理与上传
  17. Quasi-Newton Method--LBFGS
  18. Vue关于pdf展示问题——第三方电子签章不能正常展示
  19. 炸鸡块君与FIFA22 线段树(牛客)
  20. 基于时间片延长的轮转调度算法

热门文章

  1. 基于STM32设计的智慧路灯(太阳能+华为云IOT)
  2. 无人驾驶仿真环境LGSVL Simulator的配置
  3. 给自己“帅气”的脸蛋动漫化吧——PyQt5之漫画脸GUI界面(保姆级教程)
  4. python爬虫爬取还未出版的《龙族5悼亡者的归来》小说
  5. WPF运行报错 在MS.Internal.FontCache.FontFaceLayoutInfo+IntMap.TryGetValue(Int32, UInt16 ByRef)
  6. 《CondLaneNet:a Top-to-down Lane Detection Framework Based on Conditional Convolution》论文笔记
  7. android遍历的方法,android中遍历arrayList的四种方法
  8. 部署SharePoint2013
  9. 魅族升级鸿蒙,升级鸿蒙两种态度,“机智”的魅族与“鸡贼”的小米
  10. 【Flink】 java.lang.NoClassDefFoundError: org/apache/kafka/common/serialization/ByteArrayDeserializer