服务器/跳板机登录CMD命令

只要是一家互联网公司,服务器肯定不会少于两台。稍微大一点的,还会有专用的跳板机(堡垒机)作为服务器的跳板。再大一点的,甚至有多台跳板机,几十台服务器。通常的开发拿到这些服务器或跳板机的信息时,都是下载类似SecretCRT的终端软件去登录的,因为这些软件可以保存密码,保存登录所需要的信息。但是作为一名有要求的开发人员,这真的足够方便吗?先要找到这个软件的图标,双击点开,然后找到这个服务器,双击链接上去。好吧,其实也算不上很麻烦,只是不够Geek罢了。
一个酷的程序员会怎么做?快捷键Option+Space呼出命令行终端,敲下

1
jump-servers a1

一般开发来说,命令行终端是始终打开的,其次使用过得命令是有记录的,所以通常键盘敲两下就可以了。对比点击GUI来说,这个才是程序员的打开方式。下面就来教大家怎么写这个命令(不想从头写可以直接跳到最后一节下载源码修改使用)。

主命令jump-servers

用sh命令的case语句控制使用哪个跳板机。语法如下,

1
2
3
4
5
6
7
8
9
10
11
case $变量名 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
*)
默认执行的命令序列
;;
esac

很容易的看出来,变量名就是我们输入的命令参数,命令序列就是对应执行的服务器(跳板机登录)命令。完整的文件如下,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/sh
case $1 in
s1 | server1)
echo server1
server1
;;
s2 | server2)
echo server2
server2
;;
s3 | server3)
echo server3
server3
;;
s4 | server4)
echo server4
server4
;;
*)
echo not match server! s1/s2/s3/s4
esac

$1是匹配输入命令时中第一个参数。对应的匹配名,服务器配置文件server1可以自定义。

服务器配置文件servers

上面主命令控制具体执行哪里机的命令后,对应执行登录命令。下面的例子是私钥需要对应输入密码的情况(若不需要,可以跳过以下内容)。因为命令需要输入密码进行交互,所以要用到 #!/usr/bin/expect
完整例子:

1
2
3
4
5
6
7
#!/usr/bin/expect

set timeout 3
spawn ssh -i ~/.ssh/server1.pem username@127.0.0.1 -p 2222
expect "*passphrase*"
send "yourpassword\r"
interact

  • expect 是监听命令行中出现的字符
  • send 监听到对应字符后,发送字符

后续

假如所有登录方式都是类似可以抽象的,可以把所有服务器信息写到一个配置文件中,然后对应控制匹配,最后传到登录命令中。这样修改添加命令就非常方便了。程序员就是要多动手解决重复的事情,因为这样可以“更懒”。

源码

跳板机登录通用命令-Zack-Ku/jump-servers
适用对象:win10(powershell),linux,macOS。非以上系统,可以回顾上面教程写出类似的命令。
使用方法:

  1. 打开server1/2/3/4文件
  2. 修改里面的私钥路径 ~/.ssh/server1.pem
  3. 修改跳板机登录名 username
  4. 修改跳板机ip以及端口 127.0.0.1 ,2222
  5. 在send的那名命令中,修改私钥对应的密码 yourpassword
  6. 若秘钥对应无密码,删除expect那行开始的剩余代码
听说你想请我喝下午茶?~