开发提升效率的小工具

133 阅读1分钟

最近在维护老项目的过程中, 经常需要跳转到各服务器上 查看调试, 或者需要查看各服务器的日志什么的. 虽然后好多

服务器

连接工具,但是用起来没有那么方便, 而且每次都要重新输入密码, 很麻烦. 于是就自己写了一个小工具, 方便自己使用.

效果图如下:

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

代码结构

├── LICENSE
├── README.md
├── password
├── password.example
├── pfs.sh
└── ssh_login.exp

运行

sh pfs.sh

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

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

说明

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

# 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 调用, 实现自动输入密码.

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


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

工具地址:

github.com/PFinal-tool…