python模块之paramiko_python模块之 paramiko(转载)

import paramiko

import os

importselectimport sys

import tty

import termios'''实现一个xshell登录系统的效果,登录到系统就不断输入命令同时返回结果

支持自动补全,直接调用服务器终端'''# 建立一个socket

trans= paramiko.Transport(('192.168.2.129', 22))

# 启动一个客户端

trans.start_client()

# 如果使用rsa密钥登录的话'''default_key_file = os.path.join(os.environ['HOME'], '.ssh', 'id_rsa')

prikey=paramiko.RSAKey.from_private_key_file(default_key_file)

trans.auth_publickey(username='super', key=prikey)'''# 如果使用用户名和密码登录

trans.auth_password(username='super', password='super')

# 打开一个通道

channel=trans.open_session()

# 获取终端

channel.get_pty()

# 激活终端,这样就可以登录到终端了,就和我们用类似于xshell登录系统一样

channel.invoke_shell()

# 获取原操作终端属性

oldtty=termios.tcgetattr(sys.stdin)try:

# 将现在的操作终端属性设置为服务器上的原生终端属性,可以支持tab了

tty.setraw(sys.stdin)

channel.settimeout(0)whileTrue:

readlist, writelist, errlist= select.select([channel, sys.stdin,], [], [])

# 如果是用户输入命令了,sys.stdin发生变化if sys.stdin inreadlist:

# 获取输入的内容,输入一个字符发送1个字符

input_cmd= sys.stdin.read(1)

# 将命令发送给服务器

channel.sendall(input_cmd)

# 服务器返回了结果,channel通道接受到结果,发生变化 select感知到if channel inreadlist:

# 获取结果

result= channel.recv(1024)

# 断开连接后退出if len(result) == 0:

print("\r\n**** EOF **** \r\n")break# 输出到屏幕

sys.stdout.write(result.decode())

sys.stdout.flush()finally:

# 执行完后将现在的终端属性恢复为原操作终端属性

termios.tcsetattr(sys.stdin, termios.TCSADRAIN, oldtty)

# 关闭通道

channel.close()

# 关闭链接

trans.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值