在完成交叉编译OPENSSH后,又有一个需求:要求自动登录服务器,并从服务器传输文件。如何处理呢?
这里要用到expect,分别实现一个发送和接收程序。参考此程序可以实现ftp/ssh等需要用户输入的场景。
server_send.sh
#!/usr/bin/expect -f
set password 123456 #变量赋值
set master_file [lindex $argv 0] #将第一个输入参数赋值给master_file
set slave_ip [lindex $argv 1] #将第二个输入参数赋值给slave_ip
set slave_file [lindex $argv 2] #将第三个输入参数赋值给slave_file
#send to stb
spawn scp -r $master_file root@$slave_ip:$slave_file #spawn启动一下进程来处理scp命令
set timeout 300 #设置超时300s
expect "*password:" #如果屏幕打印中有“*password:”,则发送密码
set timeout 300
send "$password\r" #发送密码,这样免去用户手动输入,实现自动化
set timeout 300
send "exit\r"
expect eof #等待进行结束
server_recv.sh
recv与send本质相同,只是scp命令拷贝的方向不一致。
root@inspur:/home/liufei/github/shell/expect# cat server_recv.sh
#!/usr/bin/expect -f
set password 123456
set master_file [lindex $argv 0]
set slave_ip [lindex $argv 1]
set slave_file [lindex $argv 2]
spawn scp -r root@$slave_ip:$slave_file $master_file
set timeout 300
#expect "root@10.180.89.199's password:"
expect "*password:"
set timeout 300
send "$password\r"
set timeout 300
send "exit\r"
expect eof
root@inspur:/home/liufei/github/shell/expect#