最近在维护老项目的过程中, 经常需要跳转到各服务器上 查看调试, 或者需要查看各服务器的日志什么的. 虽然后好多
服务器
连接工具,但是用起来没有那么方便, 而且每次都要重新输入密码, 很麻烦. 于是就自己写了一个小工具, 方便自己使用.
效果图如下:
类似 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
最后就可以方便的进行各服务器登录了, 不用下载什么连接工具了.方便快捷