安装Web环境
登录到服务器后,安装Web服务相关软件:
更新软件源
代码语言:javascript复制sudo yum update
安装Apache、PHP
代码语言:javascript复制sudo yum install httpd php
启动Apache
代码语言:javascript复制sudo systemctl start httpd
创建网站根目录:
代码语言:javascript复制sudo mkdir /var/www/html/webssh
安装WebSSH2
WebSSH2是一个通过网页访问Linux SSH服务器的开源组件:
安装依赖环境
代码语言:javascript复制sudo yum install python3 python3-pip python3-devel
代码语言:javascript复制pip3 install tornado pyte websocket-client
下载源码包
代码语言:javascript复制wget https://github.com/billchurch/webssh2/archive/master.zip
解压
代码语言:javascript复制unzip master.zip
修改配置文件,设定访问端口等:
代码语言:javascript复制python
vim webssh2/webssh/settings.py
PORT = 8080
HOST = 'your_server_ip'
运行WebSSH2服务:
代码语言:javascript复制python3 run.py
添加用户验证
使用Flask提供登录接口:
代码语言:javascript复制python
from flask import Flask, request, jsonify
import pwd
app = Flask(name)
@app.route('/login', methods='POST')
def login():
username = request.form.get('username')
password = request.form.get('password')
user = pwd.getpwnam(username)
if user.pw_uid == 0 or pwd.getpwall():
resp = {'success': True}
else:
resp = {'success': False}
return jsonify(resp)
if name == 'main':
app.run()
前端调用接口验证后再连接WebSSH。
前端实现
使用Vue实现简单的登录页面:
代码语言:javascript复制js
data: {
username: '',
password: ''
},
methods: {
login() {
axios.post('/login', {
username: this.username,
password: this.password
}).then(res => {
if(res.success) {
// 连接WebSSH
}
})
}
}
配置域名
- 在腾讯云解析域名到服务器IP。
- Apache配置虚拟主机:
<VirtualHost *:80>
ServerName webssh.example.com
DocumentRoot /var/www/html/webssh
</VirtualHost>
重启Apache。
后续优化
启用HTTPS
代码语言:javascript复制 # 安装certbot
sudo yum install certbot
# 申请证书
sudo certbot certonly --webroot -w /var/www/html -d webssh.example.com
修改Apache配置启用HTTPS:
代码语言:javascript复制apacheconf
<VirtualHost *:443>
ServerName webssh..tencent.com
DocumentRoot /var/www/html/webssh
# 添加证书文件路径
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/webssh.example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/webssh.example.com/privkey.pem
</VirtualHost>
使用Flask-SQLAlchemy定义User模型,包含用户名、密码等字段。
前端实现注册页面,POST提交注册数据到后端。
后端验证数据,成功则创建新User写入数据库。
代码语言:javascript复制python
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
password = db.Column(db.String(256))
def __init__(self, username, password):
self.username = username
self.password = password
双因素认证
1. 用户绑定Google Authenticator。
2. 登录时除了密码外,还需要输入动态验证码。
3. 后端验证密码和动态码都正确才登录成功。
代码语言:javascript复制python
from flask_otp import OTP
otp = OTP()
@app.route('/login', methods=['POST'])
def login():
password = request.form.get('password')
token = request.form.get('token')
if password_correct and otp.verify_totp(token):
return success
else:
return failed
设置访问权限
1. 为User模型添加权限字段,如is_admin。
2. 访问接口前校验用户权限。
代码语言:javascript复制python
@app.route('/admin')
@login_required
def admin():
if current_user.is_admin:
return "Admin Page"
else:
return "Permission Denied"
审计日志
1. 定义日志模型,记录用户操作及时间等。
2. 关键路径写入日志。3. 使用ELK收集和分析日志。
代码语言:javascript复制python
@app.route('/log')
def log():
log = AuditLog(user=current_user, action="View Log")
db.session.add(log)
db.session.commit()
总结
通过腾讯云轻量应用服务器,我们实现了基于Web的SSH连接平台,相比Xshell有更多可能。
使用云服务器可以轻松获取计算资源,更专注于功能和业务开发。
云平台提供的负载均衡、安全防护等能增强系统稳定性。
本教程帮助感兴趣的人快速上手实践Web SSH。
可以基于此进行二次开发,打造更强大的Web终端管理平台。