`
lijunjie
  • 浏览: 388554 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

linux下使用脚本自动登录远程服务器

阅读更多
ubuntu下的ssh客户端一直没找到象SecureCRT那样好用的工具。用ssh登录,每次都要输入密码,感觉很麻烦,而且因为字符集不相同,一般还有乱码问题,所以参照网上的一些实现自己也通过python来实现了一下。
#1.通过参数自动登录ssh远程服务器
#2.通过配置字符集解决中文乱码问题
#3.解决改变远程窗口默认较小bug,远程窗口同本地窗口大小动态改变未处理
#4.实现2级代理
#5.可以使用sftp登录来传文件(sftp,目前不能实现代理来作)

配置文件host.properties
第一列可以为id,第二列为用户名,第一列为密码,第四列为远程服务器字符集


#userid:user:password:characters
ljj51:ljj:123456:gbk


登录脚本


#!/usr/bin/env python
#coding:UTF-8
#1.通过参数自动登录ssh远程服务器
#2.通过配置字符集解决中文乱码问题
#3.解决改变远程窗口默认较小bug,远程窗口同本地窗口大小动态改变未处理
#4.实现2级代理

import os,sys,pexpect,string
import struct,fcntl,termios,signal

try:
	import pexpect
except:
	print "你没有pexpect包,试试sudo apt-get install python-pexpect"
	sys.exit(0)

def sigwinch_passthrough(sig,data):
	"""窗口改动后,自动返回当前窗口值,以便跟远程窗口同步,目前有问题"""
	s=struct.pack("HHHH",0,0,0,0)
	a=struct.pack('hhhh',fcntl.ioctl(sys.stdout.fileno(),termios.TIOCGWINSZ,s))

	#global columns,lines
	"""	self.lines=a[0]
	self.columns=a[1]
	print "resize windows size(%s,%s)"%(self.lines,self.columns)
	"""
	print a[0],a[1]

class SimpleSsh:
	def __init__(self):
		self.columns=125
		self.lines=37
		self.base="~/ssh/"
		self.filename="host.properties"

	def createSshUrl(self,paramap):
		user=paramap["user"]
		password=paramap["password"]
		host=paramap["host"]
		characters=paramap["characters"]
		conntype=paramap["conntype"]
		url="luit -encoding "+characters+" "+conntype+" "+user+"@"+host

		print "#"*40
		print "#",string.center(string.join((user,"@",host," by ",characters),""),36),"#"
		print "#",string.center("created by lijunjieone@gmail.com",36),"#"
		print "#"*40
		
		return url,password

	def connection(self,url,password):
		""" """
		columns=self.columns
		lines=self.lines
		try:
			p=pexpect.spawn(url)
			try:
				#signal.signal(signal.SIGWINCH,sigwinch_passthrough)
				p.setwinsize(lines,columns)
				print "resize windows(%s,%s)"%(columns,lines)
			except:
				pass
			p.expect("password:")
			p.sendline(password)
			p.interact()
		except:
			print "connection close()"
	
	def argv2map(self,userid,host,conntype):
		paramap={}
		base=self.base
		filename=self.filename
		tmp=""
		try:
			file=open(filename,"r")
		except:
			file=open(string.join(base,filename))
		content=file.readlines()

		for x in content:
			if x.startswith(userid):
				tmp=string.strip(x)

		if tmp=="":
			print "not found %s"%userid
			sys.exit(0)

		tmparray=string.split(tmp,":")
		paramap["user"]=tmparray[1]
		paramap["password"]=tmparray[2]
		paramap["userid"]=userid
		paramap["host"]=host
		paramap["characters"]=tmparray[3]
		paramap["conntype"]=conntype

		return paramap

	def initpara(self,para):
		try:
			userid=para[1]
			host=para[2]
			conntype=""
		except:
			userid=raw_input("enter your userid:")
			host=raw_input("enter your host:")
		try:
			conntype=para[3]
		except:
			conntype="ssh"

		return userid,host,conntype

	
	def handle(self,para):
		userid,host,conntype=self.initpara(para)
		paramap=self.argv2map(userid,host,conntype)
		url,password=self.createSshUrl(paramap)
		self.connection(url,password)
class ProxySsh(SimpleSsh):
	def initpara(self,para):
		self.defaultType="ssh"
		paramaparray={}
		argvarray=string.split(para,"-")
		for x in argvarray:
			if string.strip(x)=="": continue
			x=string.split(x," ")
			#print x[1],",",x[2],",",self.defaultType
			paramaparray[x[0]]=self.argv2map(x[1],x[2],self.defaultType)

		return paramaparray
	def createSshUrl(self,paramaparray):
		parakey=paramaparray.keys()
		parakey.sort()
		url="luit -encoding %character2% ssh -t %s1% \"bash -c 'ssh %s2%'\""
		print "#"*40
		for x in parakey:
			paramap=paramaparray[x]
			tmp=string.join((paramap["user"],"@",paramap["host"]),"")
			tmp1="%s"+x+"%"
			tmp2="%character"+x+"%"
			print "#",string.center(string.join((x,":",tmp,paramap["characters"]),""),36),"#"
			url=string.replace(url,tmp1,tmp)
			url=string.replace(url,tmp2,paramap["characters"])
		print "#",string.center("created by lijunjieone@gmail.com",36),"#"	
		print "#"*40
		try:
			p=pexpect.spawn(url)
			try:
				p.setwinsize(self.lines,self.columns)
				print "resize windows(%s,%s)"%(columns,lines)
			except:
				pass
			
			for x in parakey:
				paramap=paramaparray[x]
				password=paramap["password"]
				p.expect("password")
				p.sendline(password)
				
			p.interact()
		except:
			print "connection close()"


	def handle(self,para):
		paramaparray=self.initpara(para)
		url=self.createSshUrl(paramaparray)
		

if __name__=="__main__":
	"""help:
	./myssh.py ljj51 127.0.0.1
	./myssh.py ljj51 127.0.0.1 sftp
	./myssh.py -1 ljj51 127.0.0.1 -2 ljj52 127.0.0.2
	"""
	help="""help:
	     ./myssh.py ljj51 127.0.0.1
	     ./myssh.py ljj51 127.0.0.1 sftp
	     ./myssh.py -1 ljj51 127.0.0.1 -2 ljj52 127.0.0.2
	     """

	argvpara=string.join(sys.argv[1:]," ")
	if "-" in argvpara:
		b=ProxySsh()
		b.handle(argvpara)
	elif "help" in argvpara:
		print help
	else:
		b=SimpleSsh()
		b.handle(sys.argv)



分享到:
评论

相关推荐

    远程批量修改linux服务器密码的脚本归类.pdf

    12. Linux 服务器的安全性:本文档介绍了如何使用 Expect 脚本来维护 Linux 服务器的安全性,包括批量修改密码、添加新用户等操作。 本文档介绍了如何使用 Expect 脚本来批量修改远程 Linux 服务器的密码,并对 ...

    c#远程调用linux服务器的Python脚本(csdn)————程序.pdf

    c#远程调用linux服务器的Python脚本(csdn)————程序

    Linux服务器自动化巡检日常报告脚本

    此脚本功能主要是远程服务器进行日常巡检,比如CPU型号,内存,网络,系统版本,系统名称,登录错误日志,当前登录的数量,以及dmesg错误日志,会输入到表格中,适合运维人员,需要在此脚本的目录下创建名为"Linux监控信息.xlsx...

    shell脚本远程启动其他服务器的tomcat传输文件自动登录判断启动停止

    这个"shell脚本远程启动其他服务器的tomcat传输文件自动登录判断启动停止"的方案,就是一种典型的自动化运维实践,它结合了多个核心工具和技术,包括shell脚本、expect、ssh以及scp,用于实现远程服务器管理与文件...

    用Python脚本实现对Linux服务器的监控

    目前Linux下有一些使用Python语言编写的Linux系统监控工具比如inotify-sync(文件系统安全监控软件)、glances(资源监控工具)在实际工作中,Linux系统管理员可以根据自己使用的服务器的具体情况编写一下简单实用的...

    linux自动备份文件 并上传到远程服务器 脚本实现

    Linux下mysql定时自动备份并FTP到远程脚本

    在Windows上使用putty远程登录Linux服务器的简单教程.docx

    3. 在 Host Name(或 IP address)框中输入要登录的远程服务器 IP 地址,然后回车。 4. 输入要登录的用户名,例如 root,然后回车。 5. 输入密码,然后回车,即可登录到远程的 Linux 系统。 Putty 的优势 Putty ...

    shell脚本,通过snmp方式获取远程服务器的CPU内存和硬盘的使用率

    总的来说,通过学习和实践这样的Shell脚本,你可以有效地自动化监控远程服务器的关键性能指标,从而提高IT运维的效率和响应速度。这个过程不仅涉及到了Shell脚本编程,还涉及到对SNMP协议的理解和应用,对于提升IT...

    java通过代码登录远程linux服务器并执行linux命令源码以及jar包

    总的来说,Java通过JSch库远程登录Linux服务器并执行命令,是Java与Linux系统交互的一种常用方式,尤其适用于自动化运维和脚本化的任务。通过理解并实践这些代码,你将能够更好地理解和掌握Java进行远程操作的能力。

    windows登录ssh服务器自动执行命令脚本.vbs

    widnows自动登录ssh服务器自动执行命令的脚本

    linux系统下ftp的自动脚本

    在 Linux 系统下,可以使用 shell 脚本来实现 FTP 的自动化。下面是一个基本的示例脚本: ```bash #!/bin/sh F="xxxx.ftp" echo "open 192.168.7.51 21" > $F echo "user username passwd" >> $F echo "bin" >> $F ...

    bat脚本管理服务器 远程管理服务器

    这个是什么: 集合了一工具,写几行命令就...简单点说,就是自动部署重启项目的bat脚本工具。 2你怎么用它 里面有示例,怎么上传,怎么关进程,怎么启动指定程序,最关键的一共才十几行代码,你按你要求改与就行

    登录linux服务器ssh软件

    对于初学者,使用密码认证是最简单的,但为了增强安全性,推荐使用公钥认证,其中私钥保留在本地,公钥放在远程服务器的`~/.ssh/authorized_keys`文件中。 在连接到服务器后,用户可以执行常见的Linux命令,如`ls`...

    Linux中使用expect脚本实现远程机器自动登录

    在这篇文章中,我们将详细介绍如何在Linux中使用expect脚本来实现远程机器的自动登录。 首先,我们需要创建一个名为`ssh_expect`的expect脚本。这个脚本的主要任务是接收三个参数:远程主机名(hostname)、用户名...

    xshell ssh自动登录并执行命令脚本.rar

    在自动化场景下,我们可以通过Xshell的脚本功能实现自动登录和执行命令。具体步骤如下: 1. **创建脚本**:在Xshell中,你可以创建一个批处理脚本,该脚本包含登录服务器所需的SSH命令,以及你想要执行的一系列命令...

    linux自动登入脚本

    在Linux系统中,创建一个自动登录脚本可以极大地提高工作效率,特别是当你需要远程管理多台服务器或者持续执行某些任务时。SSH(Secure Shell)是一种网络协议,用于在不安全的网络上安全地传输数据,是远程登录...

    远程批量修改linux服务器密码的脚本

    需要对服务器进行批量的修改root密码,还要在每台服务器新建一个用户,如果一个一个登到的服务器上进行修改的话,估计一个下午又没有了,首先想到的是我最喜欢的php,其中有个ssh2 模块,不得不承认用php 来处理这样...

    bat脚本实现上传文件至Linux服务器

    bat脚本实现将Windows文件上传至Linux服务器 不同选项实现具体功能、检查资源存在 、 确认上传

    自动定时备份远程服务器的mysql数据库并存储在本地

    例如,如果备份脚本将文件保存在远程服务器的`/backup`目录下,可以在脚本末尾添加以下代码: ``` scp user@remote_server:/backup/your_database_backup.sql.gz /local/backup/path/ ``` 4. **验证备份**: ...

    springboot项目linux系统下 通用 启动脚本

    springboot项目linux系统下 通用 启动脚本 支持日志输出、远程调试开启 支持start、stop、restart命令 通用启动脚本,只需将服务名改成自己的服务名即可! 保证可用!

Global site tag (gtag.js) - Google Analytics