- 公司远程登录服务器的时候,需要密码与身份验证码(如谷歌验证码)双重验证。每次起一个新窗口都需要重新输入一次验证码,比较麻烦,且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 直接链接服务器了