创建交互式ssh类型shell
实现了类似xshell软件,进行ssh登录,然后输入命令看到结果的效果
# -*- coding:utf-8 -*- import paramiko import time hostname = '192.168.10.40' port = 22 username = 'root' password = 'zx123456' timeout = 10 def runCommand(chanT, command, endSymbol): chanT.send(command + '\n') # 指令后加 '\n' 表示换行 results = '' while True: result = chanT.recv(1024).decode('utf-8') results += result if results[-2:] in endSymbol: # 判断最后两个字符是否是我们定义的结束符 break re = results.split('\n')[1:] # 第一行是我们输入的指令,没用丢弃 print('\n'.join(re), end='') return re[:-1] # 最后一行是linux的SP1输入提示符,没用丢弃 if __name__ == "__main__": ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname, port, username, password) chan = ssh.invoke_shell() # 创建一个交互式的shell窗口 chan.settimeout(1000) time.sleep(3) # 刚进入linux服务器等待一会,否则直接通过chan.recv获取的信息不完整 loginInfo = chan.recv(1024).decode('utf-8') # Welcome to Ubuntu 16.04.6 LTS..等登录信息 print(loginInfo, end='') endSymbol = ['$ ', '> ', '* ','# '] # 设置我们定义的结束符 while True: command = input() # 等待用户输入指令 result = runCommand(chan, command, endSymbol)