使用腾讯云轻量服务器自建WebSSH

2023-07-14 21:40:52 浏览数 (1)

安装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  
  }
})
  }
}

配置域名

  1. 在腾讯云解析域名到服务器IP。
  2. Apache配置虚拟主机:
代码语言:javascript复制
<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终端管理平台。

0 人点赞