利用python 更新ssh 远程代码 操作远程服务器的实现代码
用pythonparamikossh服务器,并pull对应目录代码的脚本
pull.py
importparamiko importsys defsshclient_execmd(hostname,port,username,password,execmd): paramiko.util.log_to_file("paramiko.log") s=paramiko.SSHClient() s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) if(port==0): s.connect(hostname=hostname,username=username,password=password) else: s.connect(hostname=hostname,port=port,username=username,password=password) stdin,stdout,stderr=s.exec_command(execmd) stdin.write("Y")#Generallyspeaking,thefirstconnection,needasimpleinteraction. printstdout.read() s.close() defmain(server,project): #defmain(): server_list={'2108':{'hostname':'112.22.22.22','username':'root','password':'123456','port':2108}, '11':{'hostname':'192.168.1.11','username':'root','password':'123456','port':0} } if(server=='118'): execmd="cd/workspace/"+project+"/&&gitpull" info=os.popen(execmd).read()#这里是更新本地的,可以返回打印出cmd的回显结果 printinfo up_list=server_list[server] hostname=up_list['hostname'] port=up_list['port'] username=up_list['username'] password=up_list['password'] execmd="cd/workspace/"+project+"/&&gitpull" sshclient_execmd(hostname,port,username,password,execmd) if__name__=="__main__": server=str(sys.argv[1]) project=str(sys.argv[2]) main(server,project)
上面的是更新远程服务器上project目录pull的源码。
/workspace/"+project+"/&&gitpull
比如运行`pythonpull.py2108web`就会用paramiko.SSHClient,来连接配置于main函数中的server_listlist中的2108的hostname、username、password、port参数,连接服务器后,执行execmd中配置好的命令。这里我用了argv获取输入的参数,来控制要更新的项目路径。这样一个利用pythonssh远程服务器,并更新对应目录代码的脚本就完成了。
这里我配置了两个服务器,11这个服务器,没有使用到port,所以我做了判断,来控制连接中是否带port参数,不然会报错。
if(port==0):
这里注意,如果是第一次执行需要接受author_key缓存,还需要注意是否有更新权限
python使用ssh连接远程服务器,并执行命令代码
下面的代码使用pexpect生成一个ssh进程,然后连接远程服务器,并执行命令。
在使用下面程序之前,需要先通过easy_installpexpect安装pexpect程序。
#!/usr/bin/envpython #-*-coding:utf-8-*- importpexpect defssh_cmd(ip,passwd,cmd): ret=-1 ssh=pexpect.spawn('sshroot@%s"%s"'%(ip,cmd)) try: i=ssh.expect(['password:','continueconnecting(yes/no)?'],timeout=5) ifi==0: ssh.sendline(passwd) elifi==1: ssh.sendline('yes\n') ssh.expect('password:') ssh.sendline(passwd) ssh.sendline(cmd) r=ssh.read() printr ret=0 exceptpexpect.EOF: print"EOF" ssh.close() ret=-1 exceptpexpect.TIMEOUT: print"TIMEOUT" ssh.close() ret=-2 returnret
到这里就结束了,大家可以参考一下,方法有很多种