#!/bin/bash
#########################################################################
# File Name: run_win_same_cmd.sh
# Author: shin
# Created Time: 2018年08月03日 星期五 15时08分26秒
#########################################################################
#
[ $# -ne 0 ] && {
echo "使用方法:sh $0"
exit
}
[ -s ./run_win_same_cmd1.py ] && {
mv ./run_win_same_cmd1.py ./run_win_same_cmd1.py_bak
echo "文件./run_win_same_cmd1.py已存在,备份为./run_win_same_cmd1.py_bak"
}
[ -s ./run_win_same_cmd_result ] && {
mv ./run_win_same_cmd_result ./run_win_same_cmd_result_bak
echo "文件./run_win_same_cmd_result已存在,备份为./run_win_same_cmd_result_bak"
}
. /etc/init.d/functions
cat <<EOF
############################
# 1.批量运行windows命令 #
# 2.批量分发文件到windows #
############################
EOF
read -p "请输入选择(1-2):" num
>./run_win_same_cmd_result
ip=(
"1.1.1.1"
"2.2.2.2"
)
user=(
"1.1.1.1的管理员账户"
"2.2.2.2的管理员账户"
)
pwd=(
"1.1.1.1的密码"
"2.2.2.2的密码"
)
case $num in
1)
read -p "请输入windows命令:" cmd
for ((i=0;i<${#ip[*]};i++))
do
for ((i=0;i<${#pwd[*]};i++))
do
for ((i=0;i<${#user[*]};i++))
do
>./run_win_same_cmd1.py
cat >>./run_win_same_cmd1.py<<EOF
#!/usr/bin/env python
#coding:utf-8
import paramiko
'''mingling = raw_input('pls input your powershell command:')'''
host = '${ip[$i]}'
port = 22
user = '${user[$i]}'
passwd = '${pwd[$i]}'
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname=host, port=port, username=user, password=passwd)
#paramiko.util.log_to_file('syslogin.log') #将登录信息记录日志
# 执行命令(Text后面接powershell命令)
'''
命令参考:
获取软件安装列表 Get-WmiObject win32_product
'''
stdin, stdout, stderr = ssh.exec_command("powershell -InputFormat none -OutputFormat Text chcp 65001 ; $cmd")
# 获取命令结果
result = stdout.read()
print(result)
# 关闭连接
ssh.close()
EOF
echo -e "\033[32m###>>>服务器${ip[$i]}输出结果如下\033[0m" >> ./run_win_same_cmd_result
/usr/bin/python ./run_win_same_cmd1.py >> ./run_win_same_cmd_result 2>&1
done
done
done
CheckPwd=`grep -Ev "^#" ./run_win_same_cmd_result|grep -i -w "Authentication failed"|sort -u|wc -l`
if [ $CheckPwd -eq "1" ];then echo -e "\033[31m登录验证失败,请确认用户名密码是否正确!\033[0m" && exit
fi
grep -Ev "65001" ./run_win_same_cmd_result|more
;;
2)
read -p "请输入本地linux的IP:" fenfa_ip
read -p "请输入本地linux的ssh端口:" fenfa_port
read -p "请输入本地linux的root密码:" fenfa_pass
read -p "请输入要从本地linux复制到远端的文件和远端windows目标路径(格式为先linux路径后windows路径,windows路径的斜杠使用\\\表示如/root/test c:\\\):" lin win
for ((i=0;i<${#ip[*]};i++))
do
for ((i=0;i<${#pwd[*]};i++))
do
for ((i=0;i<${#user[*]};i++))
do
>./run_win_same_cmd1.py
cat >>./run_win_same_cmd1.py<<EOF
#!/usr/bin/env python
#coding:utf-8
import paramiko
'''mingling = raw_input('pls input your powershell command:')'''
host = '${ip[$i]}'
port = 22
user = '${user[$i]}'
passwd = '${pwd[$i]}'
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname=host, port=port, username=user, password=passwd)
#paramiko.util.log_to_file('syslogin.log') #将登录信息记录日志
# 执行命令(Text后面接powershell命令)
'''
命令参考:
获取软件安装列表 Get-WmiObject win32_product
'''
stdin, stdout, stderr = ssh.exec_command("powershell -InputFormat none -OutputFormat Text chcp 65001 ; cd 'C:\\Program Files (x86)\\WinSCP\\' ; ./winscp.exe /console /command 'option batch continue' 'option confirm off' 'open sftp://root:$fenfa_pass@$fenfa_ip:$fenfa_port' 'option transfer binary' 'get $lin $win' 'exit' ")
# 获取命令结果
result = stdout.read()
print(result)
# 关闭连接
ssh.close()
EOF
echo -e "\033[32m###>>>服务器${ip[$i]}输出结果如下\033[0m" >> ./run_win_same_cmd_result
echo -e "已从服务器$fenfa_ip将文件$lin复制到windows服务器的$win 路径下" >> ./run_win_same_cmd_result
/usr/bin/python ./run_win_same_cmd1.py >> ./run_win_same_cmd_result 2>&1
done
done
done
CheckPwd=`grep -Ev "^#" ./run_win_same_cmd_result|grep -i -w "Authentication failed"|sort -u|wc -l`
if [ $CheckPwd -eq "1" ];then echo -e "\033[31m登录验证失败,请确认用户名密码是否正确!\033[0m" && exit
fi
grep -Ev "65001" ./run_win_same_cmd_result|more
;;
*)echo "请输入正确的选择(1-2)"
exit
esac
rm -rf ./run_win_same_cmd1.py ./run_win_same_cmd_result