macOS Mojave(配置篇):使用iTerm2 Profiles快捷登录ssh(自动连接远程服务器)

用了整整一周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.

发布了178 篇原创文章 · 获赞 132 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/Soinice/article/details/97559183