웹 셸 설정 및 구체 적 인 데모
'웹' 의 의 미 는 분명히 서버 가 웹 서 비 스 를 개방 해 야 한 다 는 것 이다. '셸' 의 의 미 는 서버 에 대해 어느 정도 조작 권한 을 얻 는 것 이다.웹 셸 은 사이트 포트 를 통 해 사이트 서버 를 어느 정도 조작 할 수 있 는 권한 이 라 고 불 린 다.
한편, 웹 셸 피 역장 은 사이트 관리, 서버 관리 등에 자주 사용 되 는데 FSO 권한 에 따라 온라인 으로 웹 스 크 립 트 를 편집 하고 다운로드 파일 을 업로드 하 며 데이터 베 이 스 를 조회 하고 임 의 프로그램 명령 을 수행 하 는 역할 을 한다.
다른 한편, 침입 자 에 의 해 이용 되 어 사이트 서버 를 통제 하 는 목적 을 달성 했다.이러한 웹 스 크 립 트 는 흔히 WEB 스 크 립 트 목마 라 고 불 리 며, 비교적 유행 하 는 asp 나 phop 목마 도 있 으 며,. NET 기반 스 크 립 트 목마 와 JSP 스 크 립 트 목마 도 있다.국내 에서 자주 사용 되 는 웹 셸 은 해 양 ASP 목마, Phpspy, c99shell 등 이 있다.
web
엔 드 사용 Xterm.js
또는 기타 WebShell
구성 요소 와 websocket
백 엔 드 는 WebSocket
와 SSH
프로 토 콜 을 지원 하 는 원 격 로그 인 모듈 만 있 으 면 됩 니 다.백 엔 드 설정 WebSocket 글 보기http://zhang_peng_yan.gitee.io/my_technology_blog/python/websocket/
웹 엔 드 구현
1. 설치
npm install [email protected] --save
지 정 된 버 전 설치, 최신 버 전의 xterm 파일 의 변경 이 매우 크 므 로 아래 의 방법 을 사용 하면 오 류 를 보고 할 수 있 습 니 다.2. 가방 안내
import 'xterm/dist/xterm.css';
import { Terminal } from 'xterm';
import * as fit from 'xterm/lib/addons/fit/fit';
import * as attach from 'xterm/lib/addons/attach/attach'
Terminal.applyAddon(fit);
3. 페이지 에 표시
<template>
<div>
<div id="terminal" style="width: 500px;height:300px;"></div>
</div>
</template>
4. 데이터 조작
mounted () {
let terminalContainer = document.getElementById('terminal')
//创建xterm实例
this.term = new Terminal({
cursorBlink: true, // 显示光标
cursorStyle: "underline" // 光标样式
}) // 创建一个新的Terminal对象
this.term.open(terminalContainer) // 将term挂载到dom节点上
console.log(this.term)
//在xterm上面显示命令行命令 (预设显示)
this.term.write("$ ")
//监听xterm的键盘事件
this.term.on("key",(key,ev)=>{
//key是输入的字符,ev是键盘的按键事件
console.log('key======',ev.keyCode);
//将输入的字符打印到命令窗口中
this.term.write(key)
if (ev.keyCode == 13) { //输入回车(ASCII 13是回车)
this.terminalSocket.send(this.order) //发送数据到后台
// this.order = ''
console.log('里面的order',this.order)
}else if (ev.keyCode == 8) { //删除按钮(ASCII 8是删除)
this.order = this.order.substr(0,this.order.length - 1)
//清空当前一条的命令
this.term.write("\x1b[2K\r")
//简化当前新的命令,显示在命令窗中
this.term.write("$ "+this.order)
console.log("截取的字符串:"+this.order)
typeof this.order
}else{ //将每次输入的字符串拼接起来
this.order += key
console.log("外面的order",this.order)
}
})
//实例化一个websocket,用于和django江湖
this.terminalSocket = new WebSocket("ws://127.0.0.1:8000/webssh/");
//获取到后端传回的信息
this.terminalSocket.onmessage = (res) => {
console.log(res.data);
// var message = JSON.parse(res.data);
//将传回来的数据显示在xterm里
this.term.writeln("\r
"+res.data);
//重置要发送的信息
this.order = ""
//换行,显示下一个开头
this.term.write("\r
$ ");
}
},
5. 웹 엔 드 전체 코드
<template>
<div class="console" id="terminal"></div>
</template>
<script>
import { Terminal } from 'xterm'
import * as attach from 'xterm/lib/addons/attach/attach'
import * as fit from 'xterm/lib/addons/fit/fit'
export default {
name: 'webssh',
data () {
return {
term: null,
terminalSocket: null,
order:''
}
},
methods: {
},
mounted () {
let terminalContainer = document.getElementById('terminal')
//创建xterm实例
this.term = new Terminal({
cursorBlink: true, // 显示光标
cursorStyle: "underline" // 光标样式
}) // 创建一个新的Terminal对象
this.term.open(terminalContainer) // 将term挂载到dom节点上
console.log(this.term)
//在xterm上面显示命令行命令 (预设显示)
this.term.write("$ ")
//监听xterm的键盘事件
this.term.on("key",(key,ev)=>{
//key是输入的字符,ev是键盘的按键事件
console.log('key======',ev.keyCode);
//将输入的字符打印到命令窗口中
this.term.write(key)
if (ev.keyCode == 13) { //输入回车(ASCII 13是回车)
this.terminalSocket.send(this.order) //发送数据到后台
// this.order = ''
console.log('里面的order',this.order)
}else if (ev.keyCode == 8) { //删除按钮(ASCII 8是删除)
this.order = this.order.substr(0,this.order.length - 1)
//清空当前一条的命令
this.term.write("\x1b[2K\r")
//简化当前新的命令,显示在命令窗中
this.term.write("$ "+this.order)
console.log("截取的字符串:"+this.order)
typeof this.order
}else{ //将每次输入的字符串拼接起来
this.order += key
console.log("外面的order",this.order)
}
})
//实例化一个websocket,用于和django江湖
this.terminalSocket = new WebSocket("ws://127.0.0.1:8000/webssh/");
//获取到后端传回的信息
this.terminalSocket.onmessage = (res) => {
console.log(res.data);
// var message = JSON.parse(res.data);
//将传回来的数据显示在xterm里
this.term.writeln("\r
"+res.data);
//重置要发送的信息
this.order = ""
//换行,显示下一个开头
this.term.write("\r
$ ");
}
},
},
}
</script>
서버 측 구현
파 라미 코 를 사용 하여 서버 와 상호작용 하기
1. 설치
pip install paramiko
2.
paramiko
를 이용 하여 원 격 로그 인 ssh
import paramiko
# 创建SSH客户端
client = paramiko.SSHClient()
# SSH客户端Host策略,目的是接受不在本地Known_host文件下的主机。
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# SSH客户端开启连接
client.connect(
hostname="192.168.184.144",port=22,username='xterm',password='123123'
)
# stdout 为正确输出,stderr为错误输出,每次执行完成只有一个变量中有值
stdin, stdout, stderr = client.exec_command("ls")
# 执行ls命令的结果
print(stdout.read().decode('utf-8'))
3. 결합
websocket
실시 간 조작 실현#wsserver.py
from channels.generic.websocket import WebsocketConsumer
import paramiko
class WebSSHService(WebsocketConsumer):
def connect(self):
self.accept()
self.sh = paramiko.SSHClient() # 1 创建SSH对象
self.sh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 2 允许连接不在know_hosts文件中的主机
self.sh.connect("192.168.184.144",port=22, username="root", password="beijing2018") # 3 连接服务器
print("连接成功")
def receive(self, text_data=None, bytes_data=None):
print(str(text_data)) # 打印收到的数据
print(type(text_data))
stdin, stdout, stderr = self.sh.exec_command(text_data)
right_info = stdout.read()
err_info = stderr.read()
print(right_info)
if right_info:
new_data = right_info.decode("utf-8").replace("
","\r
")
print(new_data)
self.send(new_data)
elif err_info:
new_data = err_info.decode("utf-8").replace("
", "\r
")
print(new_data)
self.send(new_data)
else:
print(self.send("命令执行成功"))
def disconnect(self, code):
print(f'sorry{self},每一次离去,都是为了最好的重逢!')
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.