scp ssh自动填入密码

scp和ssh方便好用而且安全,也许是为了更安全所以默认不会提供密码传参。

但如果你像我一样需要在运行脚本中自动填入scp或ssh的密码可以采用下面两种方法

第一种比较简单,直接使用sshpass命令传递密码

sshpass -p "your password" scp ./abc.txt hostname/abc.txt

第二种可以用expect

#!/usr/bin/expect

set timeout 30

spawn /bin/bash
expect -re "#|$"
send "rsync -e 'ssh ' -avzc youname@server_address:/mydata/game_log/ /data/log/\r"
expect {
<span style="white-space:pre">	</span>"password" { send "YOU_PASSWORD\r" }
<span style="white-space:pre">	</span>"yes/no" { send "yes\r"; exp_continue; }
}

expect -re "total size is"
expect -re "#|$"
send "exit\r"


其实可以看出expect是一个更灵活的设计,他其实是脱胎于tcl语言,也就是说你需要安装expect才能使用,这里注意脚本的第一行

#!/usr/bin/expect -f

这里就是告诉shell由expect来执行这个脚本,spawn命令则是与expect交互的shell命令。而在后面你可以通过expect来将交互命令中输出作为输入条件(这里的expect可不是shell里的而是expect中的expect),如果带-re表示采用正则。之后可以用send或exp_send对交互命令输入。总之你可以用这做出非常有意思的功能。


这样就OK了,祝你好运


猜你喜欢

转载自blog.csdn.net/bigcat133/article/details/46924371