WebSocket 实现 SSH 远程命令执行

本文介绍了如何使用 WebSocket 协议实现 SSH 远程命令执行,让用户可以在浏览器中直接执行远程服务器的命令。

用 Apifox,节省研发团队的每一分钟

WebSocket 实现 SSH 远程命令执行

免费使用 Apifox

相关推荐

最新文章

API

一体化协作平台

API 设计

API 文档

API 调试

自动化测试

API Mock

API Hub

立即体验 Apifox
目录

如何用 WebSocket 执行 SSH 命令

我们可以在 Drone 中安装 SSH 插件,并使用 WebSocket 去对 SSH 进行命令的发送~

 

Drone 是什么

Drone是一款基于 Docker 的持续集成(CI)和持续交付(CD)平台。它通过自动化构建、测试和部署软件来加快开发过程,减少人工错误,提高应用程序的可靠性。

WebSocket 实现 SSH 远程命令
Drone 

 

WebSocket

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,是 HTML5 的一个新特性。它使得浏览器和服务器之间可以实时地进行双向数据传输,而无需进行轮询或长轮询等技术。

 

与 HTTP 协议不同,WebSocket 是一种持久连接,常常用于实时通信,例如在线游戏、实时聊天、性能监控等。

WebSocket 实现 SSH 远程命令
WebSocket

 

使用 Drone、WebSocket 进行 SSH 上传

安装 Drone SSH 插件

在 Drone 项目中安装 Drone SSH 插件。

kind: pipeline
name: example

steps:
  - name: ssh
    image: appleboy/drone-ssh
    settings:
      host: ssh.example.com
      username: root
      password: ${PLUGIN_PASSWORD}
      script:
        - cd /opt/
        - ls
        - echo "Hello, World!"

安装 Drone SCP 插件

在Drone项目中安装Drone SCP(Secure Copy)插件。

kind: pipeline
name: example

steps:
  - name: scp
    image: appleboy/drone-scp
    settings:
      host: ssh.example.com
      username: root
      password: ${PLUGIN_PASSWORD}
      source:
        - ./file.txt
      target: /opt/

请注意,这两个示例使用的是基本的用户名/密码身份验证,但如果你使用的是 SSH 密钥对,则可以将其用作凭据。

 

使用 WebSocket 进行 SSH 连接

可以使用 Python 的 websocket 模块连接 WebSocket,并发送 SSH 命令。 以下是连接并执行命令的示例代码。

import websocket
import ssl
import json

def on_message(ws, message):
    print(message)

def on_error(ws, error):
    print(error)

def on_close(ws):
    print("### closed ###")

def on_open(ws):
    data = {
        "host": "ssh.example.com",
        "username": "root",
        "password": "mypassword",
        "command": "ls -al"
    }
    ws.send(json.dumps(data))

if __name__ == "__main__":
    websocket.enableTrace(True)
    url = "wss://my-drone-server.com/ws"
    headers = {
        "Authorization": "Bearer <DRONE_TOKEN>"
    }
    ws = websocket.WebSocketApp(url,
                                header=headers,
                                on_message=on_message,
                                on_error=on_error,
                                on_close=on_close)
    ws.on_open = on_open
    ws.run_forever(sslopt={"cert_reqs": ssl.CERT_NONE})

上面的代码并没有在 command 字段中输入实际的 SSH 命令,而是使用 ls -al 示例命令。 要执行其他命令,请将其替换为所需的命令。

 

使用 WebSocket 上传文件

可以使用 Python 的 websocket-client 模块和 paramiko 模块来连接和上传文件。 以下是连接和上传文件的示例代码。

import websocket
import paramiko
import ssl
import json

def on_message(ws, message):
    print(message)

def on_error(ws, error):
    print(error)

def on_close(ws):
    print("### closed ###")

def on_open(ws):
    transport = paramiko.Transport(('ssh.example.com', 22))
    transport.connect(username='root', password='mypassword')
    sftp = transport.open_sftp()
    # 上传文件到/ opt目录
    sftp.put("./file.txt", "/opt/file.txt")
    sftp.close()
    transport.close()
    ws.close()

if __name__ == "__main__":
    websocket.enableTrace(True)
    url = "wss://my-drone-server.com/ws"
    headers = {
        "Authorization": "Bearer <DRONE_TOKEN>"
    }
    ws = websocket.WebSocketApp(url,
                                header=headers,
                                on_message=on_message,
                                on_error=on_error,
                                on_close=on_close)
    ws.on_open = on_open
    ws.run_forever(sslopt={"cert_reqs": ssl.CERT_NONE})

 


在 Apifox 中调试 WebSocket

如果你要调试 WebSocket 接口,并确保你的应用程序能够正常工作。这时,一个强大的接口测试工具就会派上用场。  

 

Apifox 是一个比 Postman 更强大的接口测试工具,Apifox = Postman + Swagger + Mock + JMeter。它支持调试 http(s)、WebSocket、Socket、gRPCDubbo 等多种协议的接口,这使得它成为了一个非常全面的接口测试工具,所以强烈推荐去下载体验!  

 
在 Apifox 中,你需要创建一个 WebSocket 请求以便进入相应的界面进行必要的信息填写。以下是步骤:

  1. 新建一个 HTTP 项目后,在项目中点击“+”按钮。
  2. 输入 WebSocket 服务的地址。
  3. 选择性地填写要传输的消息(Message)和参数(Params)。
  4. 填写完必要信息后,点击“保存”按钮以保留本次请求信息,方便下次调用。
调试 WebSocket


要与服务器进行通信,你首先需要建立一个 WebSocket 连接。只需点击“连接”按钮即可。连接成功后,Apifox 会给出提示,同时服务器也会对此作出响应。

调试 WebSocket


成功连接后,你可以使用 Apifox 提供的“发送”按钮,来发送消息和参数给服务器。

测试 WebSocket


发送消息后,服务器同样可以向客户端回传信息,这一功能展示了 Apifox 的 WebSocket 功能的简便性,快去试试吧!

测试 WebSocket

 

总结

本文详细说明了如何在Drone CI/CD平台上通过安装SSH和SCP插件,结合WebSocket技术实现远程执行SSH命令和文件上传的功能。同时,文章还推荐了Apifox这一强大的接口测试工具,用于调试包括WebSocket在内的多种协议接口,确保应用的稳定性和可靠性。通过这种方式,开发者可以更高效地进行自动化构建、测试和部署流程。