一句话脚本系列之修改smb用户密码

引言

使用场景:

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

标准用法:

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

[email protected]:~$ sudo smbpasswd nferzhuang
[sudo] password for nferzhuang:
New SMB password:
Retype new SMB password:
[email protected]:~$

一句话脚本用法:

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命令来设置文件的权限
时间: 2024-10-29 16:42:20

一句话脚本系列之修改smb用户密码的相关文章

通过WMI接口,修改VisualSVN用户密码

VisualSVN 控制台通过 WMI 接口实现各功能,如果需要修改用户密码,就可以利用这个接口来实现,以下是示例脚本(在本机运行): var strComputer="."; var objWMIService = GetObject("winmgmts:\\\\" + strComputer + "\\root\\VisualSVN"); var colItems = objWMIService.ExecQuery("SELECT

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

1. 前言 在客户端PC加入到域的情况下,用户修改自己的帐户密码非常方便,但是在生产环境中有时候客户端没有加入到域只是用其账号登录到某些应用系统,比如邮件.Radius等,但此时又需要用户可以修改自己的密码,此时就需要通过Web方式来修改密码: Windows 2003已经自己带了修改域用户密码的相关ASP网页文件,位置在C:\WINDOWS\system32\inetsrv\iisadmpwd中(在安装IIS以及支持脚本的情况下),也即只需要在IIS里将其发布即可. 2. 安装IIS 1. 安

在非域环境中修改域用户密码的方法

前几天有个单位,新配置了一台服务器,做文件服务器,为网络中提供共享文件夹服务,该单位大约有50多个用户.服务器采用Windows Server 2008 R2操作系统,升级到Active Directory,为单位每个职工创建了一个用户名,在服务器上除了为每个用户创建一个"共享文件夹"保存个人数据外,还创建了"公共"共享文件夹,保存单位的数据,并且在公共文件夹中创建了若干子目录,通过用户权限,设置只让指定用户上传.修改其中的文件. 在开始规划的时候,是计划让单位的所

RHEL7修改root用户密码

linux中忘记管理员密码是很麻烦的事情,RHEL5和RHEL6中修改root用户密码我们都已经很熟悉了,下面说一下RHEL7中修改root密码; 重新启动RHEL7,到启动菜单按e键: 找到linux16开始的行,按end键把光标移动到该行的末尾 在该行的末尾添加rd.break,然后按ctrl+x组合键启动系统: 进入命令提示符后连续输入命令,如图: 关闭selinux,修改/etc/selinux/config配置文件,把SELINUX=enforcing修改为SELINUX=disabl

在虚拟机下安装ubuntu 10.04 64bit,并修改root用户密码

实验的环境: 笔记本是:HP 虚拟机:VMware  9 准备安装的操作系统: ubuntu 10.04  64bit 实验步骤: 一:让自己的hp支持虚拟化技术(由于ubuntu 10.04  64bit需要CPU支持虚拟化技术,所以要通过bios来更改电脑的默认设置) 启动时根据提示按 Esc 键 按 F10 键以配置 BIOS 使用箭头键滚动到"System Configuration" 选择"Virtualization Technology",然后按 En

修改mysql用户密码

修改mysql用户密码 目录 mysqladmin命令 UPDATE user 语句 SET PASSWORD 语句 root密码丢失的情况(待验证) mysqladmin命令(回目录) 格式如下(其中,USER为用户名,PASSWORD为新密码): mysqladmin -u USER -p password PASSWORD 该命令之后会提示输入原密码,输入正确后即可修改.例如,设置root用户的密码为123456,则 mysqladmin -u root -p password 12345

通过JAVA开发的修改AD用户的工具,修改AD用户密码时报错

今天遇到1个用户反馈的问题,他们通过JAVA开发了一个工具(修改AD用户密码),在此工具中如果将LDAP指向1台辅助DC时就报错,详细信息如下: 问题描述: ========= 通过JAVA开发的修改AD用户密码的工具,LDAP指向1台辅助域控时,修改用户密码报错,JAVA上报错如下: javax.naming.CommunicationException: simple bind failed: 10.10.10.23:636 [Root exception is javax.net.ssl.

修改linux用户密码

对于初学者来说,如何修改linux用户密码也不是件容易的事,其实非常简单,下面举例说明: 如果是以root身份登录,修改root密码.只要输入 passwd 就会出现: New password:  Retype new password:  按提示输入密码确认即可. 如果想更改其他用户密码,只要输入passwd. 对于初学者来说,如何修改linux用户密码也不是件容易的事,其实非常简单,下面举例说明: 如果是以root身份登录,修改root密码.只要输入 passwd 就会出现: New pa

2018-03-28设置及修改mysql用户密码学习笔记

退出mysql方法 quit或者exit 设置及修改mysqlroot用户密码 安装mysql后,默认管理员root密码为空,这很不安全,需要设置一个密码,在安装mysql单实例后,有个初始优化的一些安全措施: 为root设置了密码 删除无用的mysql库内的用户账号. 删除默认存在的test数据库 除了以上方法,针对mysql数据库的用户处理,我们还有更严格的做法如下: 增加system并提升为超级管理员,即和root等价的用户,只是名字不同. mysql>grant all privileg