1.依赖条件

1. expect

expect是一个自动化交互套件,主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信。

1
2
# 安装 expect
brew install expect

2. 自定义脚本

在/usr/local/bin 目录下创建 login.sh 文件,内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/usr/bin/expect

# 检查参数数量
if {[llength $argv] != 4} {
puts "Usage: ./login.sh <port> <username> <host> <password>"
exit 1
}

# 设置超时时间
set timeout 30

# 从参数中读取值
set port [lindex $argv 0]
set user [lindex $argv 1]
set host [lindex $argv 2]
set password [lindex $argv 3]

# 启动 SSH
spawn ssh -p $port $user@$host
expect {
# 首次连接,确认密钥
"*yes/no*?" {
send "yes\n"
exp_continue
}

# 处理密码提示
"*assword:*" {
send -- "$password\n"
}

# 连接超时
timeout {
puts "Error: Connection timed out. Check your network or host information."
exit 1
}

# 其他错误
eof {
puts "Error: Unexpected EOF or connection failure."
exit 1
}
}

# 切换到交互模式
interact

脚本授权,可执行权限

1
sudo chmod +x login.sh

测试脚本

1
2
# 找台远程服务器测试下:
login.sh 22 root 110.110.110.110 '123456'

3.iTerm2 配置远程服务器保存账号密码

打开 profile 编辑页面,把登录脚本拷贝到指定输入框,如图:

image1.png

在profile中选择刚才做好的的标签

image2.png