生成内网autossh

#!/bin/bash
cat>function<<'EOF'
#远程主机登录用户
V_USERNAME="root"

#远程主机登录密码
V_PASSWORD="huawei@123"

#远程主机列表
V_HOSTLIST="168.17.1.{2..250}"

#当前目录和上一层目录
CDDIR="$(cd "$(dirname "$0")" ; pwd -P)"
NDIR="$CDIR/.."

#生成的主机文件名
V_HOSTFILE=".ip.txt"

#生成可SSH登录的主机列表
V_SSHHOSTFILE=".host.txt"
EOF

cat>ipscan<<'EOFABC'
#!/bin/bash
. function

starttime=$(date +%s)
rm -rf ${CDDIR}/${V_HOSTFILE}
for i in $( echo `eval echo ${V_HOSTLIST}` );
do
{
ping -W 1 -w 1 -c 1 $i &>/dev/null && echo $i is up && echo $i >> ${CDDIR}/${V_HOSTFILE}
} &
done

wait
endtime=$(date +%s)

totaltime=$(( $endtime - $starttime ))
echo 开始时间:$(date -d @"${starttime}" "+%Y-%m-%d %H:%M:%S")
echo 开始时间:$(date -d @"$endtime" "+%Y-%m-%d %H:%M:%S")
echo 消耗总时间:${totaltime}s
echo 已扫描到 $(cat ${CDDIR}/${V_HOSTFILE} | wc -l) 台主机

EOFABC

cat>autossh<<'EOFABD'
#!/bin/bash
set -ex
. function

IP=( $(cat $CDDIR/${V_HOSTFILE}) )
username=${V_USERNAME}
password=${V_PASSWORD}
########################################################
#生成公钥和私钥
rm -rf /${username}/.ssh/*
ssh-keygen -q -t rsa -N '' -f /${username}/.ssh/id_rsa &>/dev/null <<< y
########################################################

cat>/${username}/.ssh/config<<EOF
StrictHostKeyChecking=no
EOF


function main(){
yum install -y expect nc

for i in ${IP[*]}
do
{
host=$i
if [ "$(nc -i 2 -w 2 $i 22 && echo yes || echo no)" == "no" ];then
continue
else

/usr/bin/expect <<EOF
set timeout 5
spawn ssh $username@$host "rm -rf /${username}/.ssh/known_hosts"
expect {
"*yes/no*" {send "yes\r";exp_continue;}

"*assword*" {send "$password\r"}
}
expect eof
EOF

/usr/bin/expect <<EOF
set timeout 5
spawn ssh-copy-id -i /${username}/.ssh/id_rsa.pub $username@$host
expect {
"*yes/no*" {send "yes\r";exp_continue;}

"*assword*" {send "$password\r"}
}
expect eof
EOF

/usr/bin/expect <<EOF
set timeout 5
spawn ssh $username@$host "ip -o -4 addr"
expect {
"*yes/no*" {send "yes\r";exp_continue;}

"*assword*" {send "$password\r"}
}
EOF
fi
} &
done

wait
}

rm -rf ${CDDIR}/${V_SSHHOSTFILE}
main | grep "Now try logging" | awk '{print $8" "$9}'| sed 's#"##g'| sed "s#'##g" >> ${CDDIR}/${V_SSHHOSTFILE}
EOFABD

cat>remotebash<<'EOGG'
#!/bin/bash
set -ex
. function
localip=$(ip -o -4 addr | grep "scope global"| awk '{print $4}'|awk -F "/" '{print $1}')
host=$(cat ${CDDIR}/${V_SSHHOSTFILE} | awk -F "@" '{print $2}')
cmdname=$1

for i in ${host}
do
if [[ $i != "$localip" ]];then
ssh ${V_USERNAME}@$i $cmdname $2 $3 $4
fi
done
EOGG

cat>remotecopy<<'EOGH'
#!/bin/bash
. function

localip=$(ip -o -4 addr | grep "scope global"| awk '{print $4}'|awk -F "/" '{print $1}')
host=$(cat ${CDDIR}/${V_SSHHOSTFILE} | awk -F "@" '{print $2}')
filename=$1
dstname=$2

for i in ${host}
do
if [[ $i != "$localip" ]];then
scp $filename ${V_USERNAME}@$i:$dstname
fi
done
EOGH

chmod 777 ipscan
chmod 777 autossh
chmod 777 remotebash
chmod 777 remotecopy
chmod 777 function

posted @ 2023-05-12 20:42  vmsysjack  阅读(25)  评论(0)    收藏  举报