Mac跳板机身份验证器自动填充

356 阅读2分钟
  1. 公司远程登录服务器的时候,需要密码与身份验证码(如谷歌验证码)双重验证。每次起一个新窗口都需要重新输入一次验证码,比较麻烦,且mac中没有找到如win中xshell可以直接复制隧道的链接工具(找到一个很好用的个人开发的远程链接工具nuoshell但是不支持隧道复制)。以下方法解决了在mac终端连接公司服务器每次都需要收入输入验证码的问题。

方法思路(可直接跳到python版使用)

1、能够以接口的形式获得验证码或者自己能够生成验证码

2、使用expect交互试填充

获取验证码

使用aerogear-otp-java计算身份验证码。

java项目pom中引入依赖

      <dependency>
            <groupId>org.jboss.aerogear</groupId>
            <artifactId>aerogear-otp-java</artifactId>
            <version>1.0.0</version>
        </dependency>
package aaa;
import org.jboss.aerogear.security.otp.Totp;
public class MainClass {
    public static void main(String[] args) {
        String tokey = System.getProperty("tokey");
        System.out.println(new Totp(tokey).now());
    }
}

打包 使用命令 java -jar -Dtokey=GE2TOLRRGVPW2YLY totp.jar 即可输出验证码。把tokey修改成要使用的就行

脚本以及全局命令设置

1、mkdri ~/ssha

2、cp totp.jar ~/ssha

3、在ssha问价夹下新建脚本bl.sh 注:需本机环境安装spawn(自行查找安装方式)

#!/bin/bash
ip=$1
id=$2
args=$3
user=用户名
pw=密码
tokey=""
code="$(java -jar -Dtokey=$tokey ~/opt/ssha/totp.jar)"
expect -c "
spawn ssh -p2222 $user@跳板机地址
expect {
"*password*" {send "${pw}\r";exp_continue}
"*OTP Code*" {send "${code}\r";exp_continue}
"*Opt*" {send "${ip}\r";exp_continue}
"*ID>*" {send "${id}\r";exp_continue}
"*ip*" {send "${args}\r"}
}
interact
"

4、设置命令

在~/.zshrc文件里面添加(可以把自己常用的服务器都加上,起不同名字就行)

alias ssha_自己起名字="bash ~/opt/ssha/bl.sh 服务器ip 登录id '进去执行的命令 如su - hadoop'"
alias ssha_10="bash ~/opt/ssha/bl.sh 10.10.10.10 2 'cd /mnt/root'"

然后执行source ./zshrc

就可以直接使用ssha_name 直接链接服务器了

附件 已经打好的jar包下载

链接: pan.baidu.com/s/1xo9t_BJz… 提取码: dj6q

---------python版-----

1、pip install mintotp

2、mkdri ~/ssha

3、cp totp.jar ~/ssha

4、在ssha问价夹下新建脚本bl.sh 注:需本机环境安装expect(brew install expect)

#!/bin/bash
ip=$1
id=$2
args=$3
user=用户名
pw=密码
tokey=""
code=$(python3.9 -c "import mintotp; print(mintotp.totp('$tokey'))")
expect -c "
spawn ssh -p2222 $user@跳板机地址
expect {
"*password*" {send "${pw}\r";exp_continue}
"*OTP Code*" {send "${code}\r";exp_continue}
"*Opt*" {send "${ip}\r";exp_continue}
"*ID>*" {send "${id}\r";exp_continue}
"*ip*" {send "${args}\r"}
}
interact
"

5、设置命令

在~/.zshrc文件里面添加(可以把自己常用的服务器都加上,起不同名字就行)

alias ssha_自己起名字="bash ~/opt/ssha/bl.sh 服务器ip 登录id '进去执行的命令 如su - hadoop'"
alias ssha_10="bash ~/opt/ssha/bl.sh 10.10.10.10 2 'cd /mnt/root'"

然后执行source ./zshrc

就可以直接使用ssha_name 直接链接服务器了