最近在维护老项目的过程中, 经常需要跳转到各服务器上 查看调试, 或者需要查看各服务器的日志什么的. 虽然后好多 服务器连接工具,但是用起来没有那么方便, 而且每次都要重新输入密码, 很麻烦. 于是就自己写了一个小工具, 方便自己使用.
效果图如下:
类似 jumpserver 的效果, 用起来比较方便
代码结构
1 2 3 4 5 6 7
| ├── LICENSE ├── README.md ├── password ├── password.example ├── pfs.sh └── ssh_login.exp
|
运行
然后选择对应的服务器,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