如何在shell脚本中自动输入密码?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在shell脚本中自动输入密码?相关的知识,希望对你有一定的参考价值。

ssh或者rsync的时候 如何自动输入密码?

参考技术A 使用ssh public key..登录就不需要输入密码了。追问

……你说的这个是linux么

追答

我也姓米..相信叔。自己百度一下。。乖..什么事情自己动手丰衣足食。要学会自己谷歌。
自己翻翻关于ssh登录公钥的文档..然后开虚拟机自己学着弄弄。
今天我肚子疼,就不跟你多说了。

追问

……别啊 讲讲吧 完全不懂啊

追答

你百度一下。就有文档了,我给你讲,你还不如照着文档自己做一遍。这种10年前就有的文档。
真没必要手把手教你。

本回答被提问者采纳

Shell脚本交互之:自动输入密码

平时在控制台输入指令如:sudo、ssh、ftp或者修改admin权限的文件时候都会要求输入password,但是在she‘ll脚本运行过程中该如何交互实现自动输入密码呢?

下面总结三种实现方法:

一、重定向:用重定向方法实现交互的前提是指令需要有参数来指定密码输入方式,如ftp就有-i参数来指定使用标准输入来输入密码

shell用重定向作为标准输入的用法是:cmd<<delimiter ,shell 会将分界符delimiter之后直到下一个同样的分界符之前的内容作为输入

实现ftp自动登录并运行ls指令的用法如下:其中zjk为用户名,zjk123为密码

ftp -i -n 192.168.21.46 <<EOF
user zjk zjk123
ls
EOF

二:管道:跟重定向一样,指令同样要有参数来指定密码输入方式,如sudo的-S参数,passwd的-stdin参数

所以实现sudo自动输入密码的脚本如下:其中zjk123为密码

echo ‘zjk123‘ | sudo -S cp file1 /etc/hosts

实现自动修改密码的脚本写法如下:

echo ‘password‘ | passwd -stdin username


三:expect:上面介绍的两种方法前提条件是指令有参数来设定密码输入方式,像ssh指令就没有这样的参数,第三种交互方式就派上用场了

expect就是用来做交互用的,基本任何交互登录的场合都能使用,但是需要安装expect包

CentOS下安装命令:yum install expect

语法如下:

#!/bin/expect
set timeout 30
spawn ssh -l jikuan.zjk 10.125.25.189
expect "password:"
send "zjk123 "
interact

注意:expect跟bash类似,使用时要先登录到expect,所以首行要指定使用expect

在运行脚本时候要expect file,不能sh file了

上面语句第一句是设定超时时间为30s,spawn是expect的语句,执行命令前都要加这句

expect "password:"这句意思是交互获取是否返回password:关键字,因为在执行ssh时会返回输入password的提示:[email protected]‘s password:

send就是将密码zjk123发送过去

interact代表执行完留在远程控制台,不加这句执行完后返回本地控制台

expect基础
expect常用的四个命令:
spawn
启动新的进程
expect
从进程接收字符串
send 用于向进程发送字符串
interact 允许用户交互
详细解释:
spawn命令用来启动新的进程,spawn后的send和expect命令都是和使用spawn打开的进程进行交互。
send命令接收一个字符串参数,并将该参数发送到进程。
expect命令和send命令相反,expect通常用来等待一个进程的反馈,我们根据进程的反馈,再发送对应的交互命令。
interact命令用的其实不是很多,一般情况下使用spawn、send和expect命令就可以很好的完成我们的任务;但在一些特殊场合下还是需要使用interact命令的,interact命令主要用于退出自动化,进入人工交互。比如我们使用spawn、send和expect命令完成了ftp登陆主机,执行下载文件任务,但是我们希望在文件下载结束以后,仍然可以停留在ftp命令行状态,以便手动的执行后续命令,此时使用interact命令就可以很好的完成这个任务。

---------------------

转自:https://blog.csdn.net/zhangjikuan/article/details/51105166

 























以上是关于如何在shell脚本中自动输入密码?的主要内容,如果未能解决你的问题,请参考以下文章

当界面要求输入密码时,如何使用 shell 脚本提供密码

Shell脚本自动输入密码的三种方式

Shell脚本交互之:自动输入密码

shell脚本中ssh到远程机子时,提示输入密码?用变量给出密码 要怎么做?请各位帮忙

用shell脚本写ftp时,怎么自动填写用户名和密码,而不用执行shell脚本后手动输入用户名和密码?

如何自动输入密码ssh连接到其他机器