如何在脚本里面自动输入密码

shell脚本在处理自动循环或大的任务方面可节省大量的时间,通过创建一个处理任务的命令清单,使用变量、条件、算术和循环等方法快速创建脚本以完成相应工作,这比在命令行下一个个敲入命令要省时省力得多。

但是有时候我们可能会需要实现和交互程序如ftp,telnet服务器等进行交互的功能,这时候我们需要用到shell的自动交互功能.

最简单的例子就是创建用户,我创建100个用户,初始密码为123,那么要是挨着passwd username ,交互性输入密码,那不得疯掉,但是脚本里应该怎么写呢?将密码123,输入到passwd命令?

本文收集了较常用交互方法,并进行了比较和总结。

自动交互方法一:利用命令的自带参数,将标准输入作为手动输入的内容

自动交互最关键的就是交互信息的自动输入,首先联想到文件重定向,在shell编程中有这样一种用法(参考Linux与UNIX SHELL编程指南 chapt 5.7):"command <

重定向操作符command <

对于需求1 要求的自动登陆ftp,并作系列操作,则可以用这种方法进行自动交互。代码如下:

[yjwan@test ~]$ ftp -i -n 192.168.21.46 <

user dbftp dbftp101

ls

EOF

下面是得到的结果:

Connected to 192.168.21.46.

220 developerjail FTP server (Version 6.00LS) ready.

331 Password required for dbftp.

230 User dbftp logged in.

Remote system type is UNIX.

Using binary mode to transfer files.

229 Entering Extended Passive Mode (|||54281|)

150 Opening ASCII mode data connection for '/bin/ls'.

total 8847424

-rw-r--r-- 1 dbftp www 9055318991 Aug 28 14:28 ewiz90.sql_2010-08-29

226 Transfer complete.

221 Goodbye.

测试可以发现,如上代码使用帐号名dbftp,密码dbftp101成功登陆了ftp服务器,并进入目录,ls出当前目录的文件。

注意事项:

1 这里一定要加-i ,否则必定失败!!

这里ftp用的-I 参数 结束了交互式输入,因此可以用文本的方式自动地输入用户密码以及操作方式

如果不用-I 参数,那么必定要求你手动输入密码的!!那么就达不到自动登陆的要求了

你可以man ftp找到这个参数

-i 关闭多文件传送中的交互式提示。请参考 prompt、mget、mput 和 mdelete 子命令,以取得多文件传送中的提示的描述。

-n 防止在起始连接中的自动登录。否则, ftp 命令会搜索 $HOME/.netrc 登录项,该登录项描述了远程主机的登录和初始化过程。请参考 user 子命令。

2 举一反三:只要是要求输入密码的命令,一般都带有一个参数,允许你从标准输入,输入用户密码,以及操作。

其他常用的自动登陆命令的参数

1) Passwd命令

Linux下 Passwd有参数

--stdin

This option is used to indicate that passwd should read the new password from standard input, which can be a pipe.

所以linux下自动改变用户密码的办法就是

Echo 密码 |passwd –stdin 用户名

Freebsd没有以上参数 注意

他的方法是echo passwd |pw mod user username -h 0

2)smbpasswd

-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

3)sudo

在shell脚本中需要用root用的来执行指令:

sudo 自动输入密码

echo "password" | sudo -S netstat -tlnp

-S

The -S (stdin) option causes sudo to read the password from the standard input instead of the terminal device.

3 标准输入还可以用以下两种写法:

可以将下面的内容写入到一个文本

然后ftp -I –n ip <文本

或者echo “..” |ftp –I –n ip

都是可以的!

因为他们都满足“有一个标准的输入”这个条件

4 ssh的自动登陆没有这样的自动输入密码的参数

一般都是使用公钥/私钥的方式自动登录

这种文章满街都是,网上google一下ssh自动登陆就可以找到答案。

或者用下面的办法。

自动交互方法2:利用expect脚本自动登陆

这个 expect基本属于一种编程了

基本任何需要交互式登陆的场合,他都可以解决,是相当的牛逼。

只要是第一种办法解决不了的,基本都可以用这种办法。

按键精灵-自动输入帐号和密码

//假设"账号密码.txt" 存有一行“zhh123,mm456” (不含引号,逗号前面为账号,后面为密码)

Text = Plugin.File.ReadFileEx("D:\帐号密码.txt") //读取帐号密码,存到text.

arr=split(text,",") //以逗号为界,分割成两个字符串,放到数组中。

MoveTo zhx, zhy //鼠标移动到帐号输入框里

LeftClick 1 //单击左键。

SayString arr(0) //在当前光标下输入字符串(帐号,zhh123)。

MoveTo mmx, mmy

LeftClick 1

SayString arr(1)

//前提是光标在输帐号框里面闪动

GG=InputBox("请输入您的帐号!!!"&Vbcrlf&"无内容输入时直接按[确定]或[取消]退出!!!")

If StrComp("",GG)=0 Then

Goto 结束

End If

MM=InputBox("请输入您的密码!!!"&Vbcrlf&"无内容输入时直接按[确定]或[取消]退出!!!")

If StrComp("",MM)=0 Then

Goto 结束

End If

KEY=InputBox("请输入启动按键码! 如:F1~F12键为112~123码;a~z键为65~90码;"&Vbcrlf&"无内容输入时直接按[确定]或[取消]退出!!!")

If StrComp("",KEY)=0 Then

Goto 结束

End If

//转换按键码

KEY=CInt(KEY)

Rem ID

Delay 100

K=WaitKey()

//122为F11键(只要在你的脚本加入按F11键就可以)

If K=KEY Then

//GG为帐号

SayString GG

Delay 500

KeyPress 9 ,1

Delay 200

//MM为密码

SayString MM

Delay 500

KeyPress 13, 1

End If

Goto ID

Rem 结束

EndScript

bat自动输入密码

|

-p 后面直接输入密码即可。如果是*, 那么dsquery就是要提示输入密码的。dsquery user -samid %e% -d 172.**.*.** -u 172.**.*.**\tss943355 -p your_password

technet上的文档:-p { | *}

Specifies to use either a password or an asterisk (*) to log on to a remote server. If you type *, dsquery prompts you for a password.

自动输入密码的批处理

批处理做不到,它不能模拟键盘按钮,VBS可以。。

Dim WshShell, GamePath

GamePath="""这里填你游戏程序的绝对路径"""

Set WshShell=WScript.CreateObject("WScript.Shell")

WshShell.Run GamePath

WScript.Sleep 2000

WshShell.AppActivate "这里填你程序窗口的标题"

WshShell.SendKeys "这里填密码"

WScript.Sleep 200

WshShell.SendKeys "{ENTER}"

以上代码保存为.vbs文件,根据你的需要改动下..~!

是一串数还是多组数,如果是多组数,可以用SnInput。虽然写个小程序也很容易,但还得找程序员。

我认为楼下的VBS不错的,你可以在这基础上进行压缩,压缩成exe格式、带简易密码的压缩文件,并设置自动运行该VBS。