用了整整一周MacBook Pro了,一个字 好用,真香。
前几天把,参考《iTerm2 + Oh My Zsh 打造舒适终端体验》把iTerm2装完了,今天想找个服务器开始敲命令了。
检查版本
检查是否安装好(显示安装好的版本号就是已经安装好了)
➜ bin expect -v
expect version 5.45
填写iTerm2的配置文件
首先找到 iTerm2,然后选择 Preferences,点击+ 添加新的General配置,配置基础Name,如有需要可以添加一个新的Tags,然后在Commond中,找一个可以 expect的文件夹下的任意一个文件,随便任意指定。
在指定文件夹下面创建新建的配置文件
- 新建文件夹
cd ~
mkdir .ssh/akina
- 新建配置文件
touch yunqi
- 配置文件中添加一下内容
#!/usr/bin/expect -d
set host 192.168.100.119(服务器ip地址)
set user root(登录服务器的用户名)
set password admin(登录服务器的密码)
spawn ssh $user@$host
expect "*password:*"
send "$password\r"
interact
简单在这记录下下面会用到的一些命令
set timeout #设置超时时间,默认超时时间10s.
spawn shell command # spawn后面接的是我们要执行的shell命令
expect "hi" #匹配输出内容“hi”
{send “hello\r”} # 匹配到内容''hi"后输出“hello”,“\r”是代表是返回字符。
interact #执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行一段命令就退出,可改为[expect eof]
此时已经配好了,可以自动连接
第一种方式
能看到新的配置,就说明配置完毕,直接点击就可以自动连接了。
第二种方式
终端界面,直接右键,New Tab 选中即可~
第三种方式
快捷键操作,command+o ,选择你设定的Profile即可。
其他expect脚本示例
简单更改密码脚本
[root@localhost shell]# cat password.exp
#!/usr/bin/expect -d #"#!/usr/bin/expect"这一行告诉操作系统脚本里的代码使用那一个shell来执行。 -d 启用调试模式(可加可不加)。
set timeout 30 #设置超时时间为30s
spawn passwd user5 #spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。所以不要用 “which spawn“之类的命令去找spawn命令。好比windows里的dir就是一个内部命令,这个命令由shell自带,你无法找到一个dir.com 或 dir.exe 的可执行文件。它主要的功能是给ssh运行进程加个壳,用来传递交互指令。
expect "New password:" {send "123456\r" } #这个命令的意思是判断上次输出结果里是否包含“New password:”的字符串,如果有则立即返回"123456","\r"代表是返回字符,否则就等待一段时间后返回,这里等待时长就是前面设置的30秒 。
expect "new password:" {send "123456\r"} #在平常我们设置密码的时候会让我输入一次后再输入一次进行确认,这个是匹配第二次输出,然后再次输入密码。
expect eof #表示读取到文件结束符
登陆远程服务器并停留在远程服务器上
[root@localhost shell]# cat login.exp
#!/usr/bin/expect
spawn ssh 192.168.123.218 #ssh 远程登陆
expect {
"*yes/no" {send "yes\r";exp_continue} #匹配输出内容,返回内容,exp_continue表示继续执行下一步
"*password" {send "123456\r"}
}
interact #执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。如果你只是登录过去执行一段命令就退出,可改为[expect eof]
传输参数执行登陆
[root@localhost shell]# cat login2.exp
#!/usr/bin/expect
set ip [lindex $argv 0] #这条命令是将变量ip的值设置为传入进来的第一个参数。[lindex $argv 0]表示的就是第一个参数的值
set port [lindex $argv 1] #这条命令是将变量port的值设置为传入进来的第二个参数。[lindex $argv 1]表示的就是第二个参数的值
set passwd "123456"
spawn ssh $ip -p$port #使用变量,这里使用的方法跟shell脚本一样
expect {
"yes/no" {send "yes\r";exp_continue}
"password:" {send "$passwd\r"}
}
interact
[root@localhost shell]# ./login2.exp 192.168.123.218 22 #多个参数直接以空格间隔,第一个参数:192.168.123.218 第二个参数22
You can't get something for nothing.