开发提升效率的小工具

最近在维护老项目的过程中, 经常需要跳转到各服务器上 查看调试, 或者需要查看各服务器的日志什么的. 虽然后好多 服务器连接工具,但是用起来没有那么方便, 而且每次都要重新输入密码, 很麻烦. 于是就自己写了一个小工具, 方便自己使用.

效果图如下:

类似 jumpserver 的效果, 用起来比较方便

代码结构

1
2
3
4
5
6
7
├── LICENSE
├── README.md
├── password
├── password.example
├── pfs.sh
└── ssh_login.exp

运行

1
sh pfs.sh

然后选择对应的服务器,1,2,3…..

注意: pfs.sh 需要执行权限

说明

密码保存在 password 文件中, 一行一个, 格式如下:

1
2
3
4
5
6
7
8
9
# id:hostname:port:username:password:description
1:127.0.0.1:2221:root:123456:host1

# id:hostname:port:username:private_key:description
2:127.0.0.1:2222:root:/root/.ssh/id_rsa:host2

# TODO private_key start with "~"
3:127.0.0.1:2222:root:~/.ssh/id_rsa:host3

核心

核心原理就是 对 ssh命令做了一个简单的 封装成 shell 脚本, 然后用 expect 调用, 实现自动输入密码.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
echo "序号 |       主机      | 说明"
underline
# awk 'BEGIN {FS=":"} {printf("\033[0;31m% 3s \033[m | %15s | %s\n",$1,$2,$6)}' $direc/password
awk '{if(!NF || /^#/){next}} BEGIN {FS=":"} {printf("\033[0;31m% 3s \033[m | %s@%s:%s | %s\n",$1,$4,$2,$3,$6)}' $passwd_file
underline
read -p '[*] 选择主机: ' number
#pw="$direc/password"
ipaddr=$(awk -v num=$number 'BEGIN {FS=":"} {if($1 == num) {print $2}}' $passwd_file)
port=$(awk -v num=$number 'BEGIN {FS=":"} {if($1 == num) {print $3}}' $passwd_file)
username=$(awk -v num=$number 'BEGIN {FS=":"} {if($1 == num) {print $4}}' $passwd_file)
passwd=$(awk -v num=$number 'BEGIN {FS=":"} {if($1 == num) {print $5}}' $passwd_file)

case $number in
[0-9]|[0-9][0-9]|[0-9][0-9][0-9])
#echo $passwd | grep -q ".pem$"
#RETURN=$?
if [ -f "$passwd" ];then
#echo "$passwd 文件存在"
echo "ssh -i $passwd $username@$ipaddr -p $port"
ssh -i $passwd $username@$ipaddr -p $port
else
#echo "$passwd 文件不存在"
expect -f $direc/ssh_login.exp $ipaddr $username $passwd $port
fi
;;
"q"|"quit")
exit
;;

*)
echo "Input error!!"
;;
esac

最后就可以方便的进行各服务器登录了, 不用下载什么连接工具了.方便快捷

工具地址:

https://github.com/PFinal-tool/pf-shell