需求

需求很简单,通过脚本自动登陆跳板机。
因为最近换的是mac M2,然后碰到了一堆问题。

问题

intel芯片换到m2出现很多问题。
首先mac m2 没有python2,默认是python3,所以脚本的命令要调整成python3相关的。
然后是 ssh 登陆,原来正常可以登陆方式也有问题,默认的ssh密钥失效,需要替换成新的密钥。
就导致原来的免密登陆也失效了,添加了公钥,依然需要输密码,下面的脚本,有一段是补偿输入密码的操作,
如果不需要,可以删了输密码的部份。

自动登陆脚本

需要准备两个脚本:

  1. login.sh, shell 脚本
  2. jump.python, python3脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/sh
expect -c "
set pwd you_pass_word
spawn ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa test@10.10.10.10
set timeout 2
expect "*assword:*"
send \"\$pwd\r\"

set timeout 2
expect \"\[MFA auth\]:\"
set password \"`python3 ~/.ssh/jump.python`\"
send \"\$password\r\"
interact
"

解释上面的脚本

说明一下,新的 ssh 需要输入:

ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa

原来 ssh 只需要:

ssh username@10.10.10.10 就可以登陆了

python3 部分

python3 脚本提取google验证码。

my_secret 是谷歌的密钥。

1
2
3
4
5
6
#!/usr/bin/python3
import onetimepass as otp

my_secret = 'XXXXXXXXXXXXX'
my_token = otp.get_totp(my_secret)
print ("%06d" % my_token)

iterm2 配置

在 Open Profiles 中添加一下自动登陆脚本:

iterm2自动登陆配置.jpg

login shell 或 Command 都可以,用sh:

1
sh ~/.ssh/jump.sh

不要使用 expect 开头:

1
expect ~/.ssh/jump.sh

这样就可以登陆成功了,即不需要输密码,也不需要验证码。
需要注意的是,如果需要使用lrzsz 这样的功能的话,不可以使用expect执行脚本,会失败,只能使用sh进行登陆。