Linux shell 实现多服务器SSH一键代理脚本(nc端口转发的定向跳板实现)
收藏一下~
可以收录到专辑噢~
Linux shell 实现多服务器SSH一键代理脚本(nc端口转发的定向跳板实现)
当需要多级代理到某台机器上,又不希望在每一台机器上搭建繁琐的proxy工具时,这个脚本可以很方便的实现
比如我需要SSH连接到目标服务器T,但是出于网络原因,只能通过 `ServerA->ServerB->ServerC->T` 这样的路径去连接到目标服务器T时,如果我每次都需要 ssh 到每一台机器,是非常头疼的事情。
这个脚本需要使用到两个工具
- nc (netcat) - 用于端口转发
- sshpass - 用于自动登陆到跳板服务器
让我觉得非常有意思的是我编写这个脚本时用了一个黑魔法端口转发的方式,详见代码中的 `$comArr` 赋值处。
为了防止密码以明文的方式出现在脚本中,特意做了AES加密处理,在配置`jumpPassAesArr`参数之前,首先使用以下指令,生成对应跳板服务器密码的AES密文
echo -n "{password}" | openssl enc -aes-128-ecb -a -e -pass pass:"{decrypt key}" -nosalt -pbkdf2
需要配置的参数总共4个,4个参数均为数组,跳板顺序以数组下标递增,4个参数对应配置就可以
jumpHostArr : 服务器的域名或者IP地址
jumpPortArr : 服务器的开放的SSH端口号
jumpUserArr : 对应服务器的用户
jumpPassAesArr : 服务器的密码
代码量不大,直接看吧~
#!/bin/bash
##############################################################
# Copyright (c) 2020 by w0x21. All Rights Reserved.
#
# Filename: jumpPorxy.sh
# Author:w0x21
# Email: w0x0021@gmail.com
# Create time: Wed 01 Jul 2020 05:33:00 PM PDT
#
# Description:
##############################################################
# Default configure
BindPort=10022
DefaultSleepTime=1
##########################
# Target's information
##########################
TargetHost="target host"
TargetPort=22
##########################
# Jump host's information
##########################
jumpHostArr=("Host1" "Host2" "Host3")
jumpPortArr=(22 22 22)
jumpUserArr=("root" "root" "root")
########################################################################################################
# run `echo -n "password" | openssl enc -aes-128-ecb -a -e -pass pass:"decrypt key" -nosalt -pbkdf2` #
########################################################################################################
jumpPassAesArr=("AES(Password1)" "AES(Password1)" "AES(Password1)")
jumpPassArr=()
###################
# Decrype password
###################
let index=0
read -p "Please enter AES key: " aes_key
for aes_pass in "${jumpPassAesArr[@]}"
do
jumpPassArr[$index]=`echo "$aes_pass" | openssl enc -aes-128-ecb -a -d -pass pass:"$aes_key" -nosalt -pbkdf2`
let index+=1
done
######################
# Build command array
######################
comArr=()
let index_max=${#jumpHostArr[*]}-1
for index in $(seq 0 $index_max)
do
let index_next=index+1
if [ x"$index" == x"$index_max" ]; then
comArr[$index]="nohup nc -l $BindPort >& /dev/tcp/$TargetHost/$TargetPort 0>&1 & sleep $DefaultSleepTime"
else
comArr[$index]="nohup nc -l $BindPort >& /dev/tcp/${jumpHostArr[$index_next]}/$BindPort 0>&1 & sleep $DefaultSleepTime"
fi
done
###################
# Build command
###################
runCom=""
let index_max=${#jumpHostArr[*]}-1
for index in $(seq $index_max -1 0)
do
loginCom="sshpass -p \"${jumpPassArr[$index]}\" ssh -o StrictHostKeyChecking=no -p ${jumpPortArr[$index]} ${jumpUserArr[$index]}@${jumpHostArr[$index]}"
runCom="$loginCom \"\$(echo \"`echo \"$runCom${comArr[$index]}\"|base64 -w 0`\"|base64 -d)\";"
done
echo $runCom
echo ""
###################
# Start proxy
###################
bash -c "$runCom"
echo "----------"
if [ $? == 0 ]; then
echo "Proxy execution succeeded, please connect \"${jumpHostArr[0]}:$BindPort\""
else
echo "Proxy execution fail."
fi
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 FreeBuf_42986 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
Typecho install.php存在的反序列化漏洞分析(含EXP)
2017-12-05