Mac 设置开机自动执行脚本,使用 expect 自动输入密码交互

3,426 阅读2分钟

参考

  1. CSDN:Shell脚本交互之:自动输入密码
  2. 简书:mac下解决开机需要每次ssh-add的问题
  3. 博客园:expect简介和使用例子

背景

由于每次开机一些配置需要重新设置,所以设置一个自动执行的脚本就很美滋滋
脚本需要用 shell 来编写 如果需要进行输入密码才能下一步,则须使用 expect 达到目的

步骤

1. 新建一个 onload.sh 文件,名称自定义

2 更改权限为可执行

# 后面的路径是脚本文件所在路径,也可直接把文件拖进终端中查看
chmod a+x /Users/****/Dawn/System/onload.sh

3. 写好后打开系统偏好设置 -> 用户与群组 -> 登陆项 -> 点击加号把脚本添加进来

上面两步其实有更好的方法,详见文首第二条参考文档

4. done!开机重启验证一下,成功执行~

终端可能会提示是否允许执行,点击允许并且勾选不再提示就好了~

5. 如果过程中需要输入密码才能继续执行,则需要安装 expect 进行交互

brew install expect

6. 此时需要更新我们的脚本

#!/usr/bin/expect
# 首行要指定使用 expect
# 设置超时时间 30s
set timeout 30
# 之前的命令都要使用 spawn 来执行
# 这里有个小坑,文件路径不要使用 ~/ 的形式,有时会提示找不到文件,建议使用 /Users/****/ 的方式
spawn ssh-add /Users/****/.ssh/id_rsa
# 如果打印的提示信息中包含 passphrase 字段
expect "passphrase"
# 则发送下面的内容
send "1234567\r"
# 等待 spawn 进程结束后退出信号 eof
expect eof

执行一下 看看最初的操作,需要手动输入密码 使用了 expect 之后,提示信息中含有我们在代码里设置的 passphrase 字段,就自动帮我们输入密码,是不是方便了许多😜