linuxshell脚本自动输入密码

Linux Shell中如何自动输入命令需要接受的键盘输入

传递交互式参数的话,你可以试试这种,比如创建分区的一个例子:

echo “p        主分区
1                   第一分区
                    指定默认从1开始
+200M        分区200M
t                    更改分区类型
若只有一个则不需要指定分区
8e                lvm分区
w“ | fdisk /dev/sdb

linux shell脚本,运行时要输入密码,密码正确才往下跑,这个怎么实现呢

A=123456
read -p “请输入密码:“ PASSWD
    if ;then
        continue
    else
        echo “密码不错误,请重启输入!“
    fi

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

shell脚本在处理自动循环或大的任务方面可节省大量的时间,通过创建一个处理任务的命令清单,使用变量、条件、算术和循环等方法快速创建脚本以完成相应工作,这比在命令行下一个个敲入命令要省时省力得多。
但是有时候我们可能会需要实现和交互程序如ftp,telnet服务器等进行交互的功能,这时候我们需要用到shell的自动交互功能.
最简单的例子就是创建用户,我创建100个用户,初始密码为123,那么要是挨着passwd username ,交互性输入密码,那不得疯掉,但是脚本里应该怎么写呢?将密码123,输入到passwd命令?
本文收集了较常用交互方法,并进行了比较和总结。
自动交互方法一:利用命令的自带参数,将标准输入作为手动输入的内容
自动交互最关键的就是交互信息的自动输入,首先联想到文件重定向,在shell编程中有这样一种用法(参考Linux与UNIX SHELL编程指南 chapt 5.7):“command 《《delimiter p=““ 从标准输入中读入,直至遇到delimiter分界符。?
重定向操作符command 《《delimiter是一种非常有用的命令,shell将分界符delimiter之后直至下一个同样的分界符之前的所有内容都作为输入,遇到下一个分界符, p=““ shell就知道输入结束了。最常见的delimiter分界符是eof,当然完全可以自定为其他字符。
对于需求1 要求的自动登陆ftp,并作系列操作,则可以用这种方法进行自动交互。代码如下:
$ 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基本属于一种编程了
基本任何需要交互式登陆的场合,他都可以解决,是相当的牛逼。
只要是第一种办法解决不了的,基本都可以用这种办法。

shell脚本不用expect怎么实现输入密码

10分 太少了额。。。
如果要方便、安全并且自动化最好使用 expect 。 Shell本身 不能处理 这种问题。
自己随意选择两个端口号
B 服务器 port_B
A 服务器 port_A
B 机器:
安全机制:在B机器上设置iptables 使得 端口XB只能接受 A服务器 IP 来自端口XA 的数据。
nc -l port_B 》 file
监听 port_B 输出到file
A 机器:
nc B_IP portB – p portA 《file
读取file 从本机portA 发送到B_IP:portB
———–
写成两个脚本
由于命令是明文传输的,可以使用md5加密数据。
B 机器上将脚本写成一个监听脚本。
我就不给你写具体的了 给你一个描述。
#!/bin/bash
tmpfile=临时文件绝对路径
OUTPUT=~/out
portA=12345
portB=99999
B_IP=192.168.1.167
while true;do
cmd=“`nc -l port_B`“
#获取由B机器发送来的命令目前假设有2个命令
#如 setoutput XXXX 设置OUTPUT文件绝对路径; starttrans 开始传输
case cmd
命令是 setoutput XXXX
OUTPUT=XXXX
命令是 starttrans
nc -l port_B 》 “$tmpfile“
mv $tmpfile $OUTPUT
esac
done
A 服务器上写成传输脚本sendfile需要一个参数:
# sendfile filename
#!/bin/bash
filename=“$1“
portA=12345
portB=99999
B_IP=192.168.1.167
echo setoutput ”$filename“|nc B_IP portB -s portA
echo starttrans|nc B_IP portB -s portA
nc B_IP portB -s portA《“$filename“

linux 怎么运行shell文件输入密码

echo 密码 | sh 要运行的脚本
解释: 用管道的方式把密码传给下个命令。
如 你想远程连接192.168.X.X
echo “密码“ | ssh user@192.168.x.x 即可把user的密码传过去。

如何在Shell脚本输入密码

这问题太广泛了。想到其中一种可能,下面答案来自

Linux命令大全 网站

终端输入密码时候,不让密码显示出来的例子。

方法1:

#!/bin/bash
read -p “输入密码:“ -s pwdecho
echo password read, is “$pwd“

方法2:

#!/bin/bash
stty -echo
read -p “输入密码:“ pwd
stty echo
echo
echo 输入完毕。

linux里的su命令需要输入密码,如何在shell脚本里实现自动输入su命令和密码

看过man su了,su并不带输入密码的参数,所以需要使用su命令切换用户的话,只能手动输入密码。

在shell中使用linux的su命令 如何输入密码

你是不是直接的在终端里面输入了su

user?
如果是的话,问题就出在那个user上面。user在这里是登录到系统中的具体的用户的名称。在实际使用中,是要依据具体情况来输入的。不是照办照抄的。
如果登录的用户叫u1,那应该是su

u1,如果登录的是user1,那应该是su

user1。不能照抄。除非你哪里那个用于日常应用操作的普通用户的名称就是user。
还有,我看到你在user后面还有《
passwd。那也是错误。不过这个也怪不得你,因为你没有在命令行下操作的经验。在电脑的语法格式中,以一对尖括号,或者说是以小于号和大于号所包裹的部分表示命令中必须输入的部分,没有它这条命令无法执行。
说明这个passwd是su

user这条指令中必须输入的部分。passwd实际上是pass
word的缩写,就是密码。
你应该这样:
su

user回车
输入密码
这个密码是什么。不一定。不同的发行版会有不同设置。有些版本的linux,密码指的是具有超级管理权限的root的密码。有的指的是当前登入系统的普通用户的密码。你自己去试一下就知道了。

Linuxshell 脚本中经常要用到ssh可是ssh又要交互式输密码怎么能不交互的输密码呢

1、登录A机器
2、ssh-keygen -t ,将会在~/.ssh下生成密钥文件和私钥文件 id_rsa,id_rsa.pub或id_dsa,id_dsa.pub
3、将 .pub 文件复制到B机器的 .ssh 目录, 并 cat id_dsa.pub 》》 ~/.ssh/authorized_keys
4、大功告成,从A机器登录B机器的目标账户,不再需要密码了(直接运行 #ssh 192.168.1.100 )
面交互输入,就得使用expect脚本,例:
#!/bin/bash
passwd=’123456’
/usr/bin/expect 《《-EOF
set time 30
spawn ssh root@192.168.1.100
expect {
“*yes/no“ { send “yes\r“; exp_continue }
“*password:“ { send “$passwd\r“ }
}
expect “*#“
send “cd /home/trunk\r“
expect “*#“
send “ls\r“
expect “*#“
send “exit\r“
interact
expect eof
EOF