1、py脚本操作远程window服务器,通过挂载磁盘的方式实现,缺点是:有时删除挂载磁盘之后并不能马上释放,所以多人频繁操作同一个远程window磁盘就容易报错出问题,废话不多说,直接上代码:
n_cmd = r"n:"
cmd = r"net use n: \\192.168.1.2\d$ serverpasswd /user:servername" #serverpasswd:远程服务器的密码 servername:远程服务器的用户名
delcmd = r"net use n: /del"
#n盘不存在,则执行挂载操作
if os.system(n_cmd) != 0:
if os.system(cmd) != 0:
#使用raise语句自己触发异常,触发异常后,后面的代码就不会再执行
print "[ERROR]Failed to net window server!"
raise Exception("[ERROR]Failed to net window server!")
#------------挂载之后就能想操作本地文件一样操作远程挂载磁盘的文件了
#n盘存在,则执行删除挂载操作,删除失败则报错退出
if os.system(n_cmd) == 0:
if os.system(delcmd) != 0:
print "[ERROR]Failed to delete net disk!"
raise Exception("[ERROR]Failed to delete net disk!")
2、远程操作linux使用ssh协议,需要安装paramiko模块
先来说下怎么安装paramiko模块,之前为了安装这个模块,搞了好久,走了好多弯路,最后总结了下安装步骤:
实际的安装步骤应该是:
1、安装Python2.7软件(安装完之后将类似以下两个路径加到环境变量里面:C:\Python27;C:\Python27\Scripts)
2、再安装VCForPython27.msi
3、下载paramiko(paramiko-master.zip),下载网址https://github.com/paramiko/paramiko
将下载的包解压之后进入解压目录:
执行pip install --upgrade pip 升级pip版本(我本地安装的时候提示要我升级pip版本)
执行pip install paramiko 安装paramiko
4、执行import paramiko看是否成功
好了,贴代码看如何访问远程linux:
import paramiko
server_ip = '192.168.1.3'
server_user = 'root'
server_passwd = root'
server_port = 22
ssh = paramiko.SSHClient()
#目的是接受不在本地Known_host文件下的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(server_ip, server_port,server_user, server_passwd)
#可以开始操作远程文件了,随便grep个文件
profile = r'/root/abc/abc.txt'
command = r"grep '^%s:' %s"%(name,profile)
stdin, stdout, stderr = ssh.exec_command(command)
out = stdout.readline() #将返回结果取出
#关闭远程
ssh.close()
3、连接mysql数据库,需要安装MySQLdb,之前有一篇博文是写如何安装MySQLdb的,有需要的可以看下,由于贴的脚本里面用到了加密,所以多加载一个hashlib模块进来(其他系统常规模块自己加载进来,这里就不贴了)
import hashlib
import MySQLdb
try:
connection = MySQLdb.connect(user="myname",passwd="mypasswd",host="192.168.1.4",port =3306,db="mydb")
except:
print "Could not connect to MySQL server."
sys.exit(1)
sql_select=r"select a.salt from myusers a where a.login = 'abc'"
cursor = connection.cursor()
cursor.execute(sql_select)
if cursor.rowcount != 0:
print "Rows selected:", cursor.rowcount
#for row in cursor.fetchall():
#f.write("%s\t%s\t%s\t%s:%s\t%s:%s\t\t%s\n"%(row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7]))
salt = cursor.fetchall()[0][0]
saltpasswd =salt+'--'+newpasswd
newsha1passwd = hashlib.sha1(saltpasswd).hexdigest()
sql_update=r"UPDATE myusers SET cryptedpassword = '%s' WHERE login = 'abc'"%newsha1passwd
try:
cursor.execute(sql_update)
connection.commit()
except:
connection.rollback()
cursor.close()
connection.close()