expect 实现 scp ssh 自动输入密码登录

本贴最后更新于 1438 天前,其中的信息可能已经时异事殊

expect 是一种自动交互语言,能实现在 shell 脚本中为 scp 和 ssh 等自动输入密码自动登录。
下面给出 ssh 和 scp 的使用示例:

1.ssh

#!/bin/bash
expect -c "
spawn ssh root@192.168.81.11 \"ls;\"
expect {
    \"*assword\" {set timeout 30; send \"password\r\";}
    \"yes/no\" {send \"yes\r\"; exp_continue;}
      }
expect eof"

其中,password 代表机器的密码,并且最后必须以 \r 结束

2.scp

 expect -c "
  spawn scp root@192.168.81.11:/root/1.log /root
  expect {
    \"*assword\" {set timeout 30; send \"password\r\";}
    \"yes/no\" {send \"yes\r\"; exp_continue;}
  }
  expect eof"

同理,password 代表机器的密码,并且最后必须以 \r 结束

3.参数解释

  • spawn:spawn 是 expect 的语句,执行命令前都要加这句
  • expect “assword:“:这句意思是交互获取是否返回 password:关键字,因为在执行命令时会返回输入 password 的提示 xxxxxxxx password:
  • set:设定变量为某个值
  • send:将密码发送出去
  • exp_continue:重新执行 expect 命令分支
  • set timeout -1 :设置超时方式为永远等待
  • set timeout 30 "设置超时时间为 30 秒
  • interact:代表执行完留在远程控制台,不加这句执行完后返回本地控制台
  • expect eof:等待 spawn 进程结束后退出信号 eof

4.参考

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...