Skip to main content

A python package that allows connecting and sending commands direcly to a proxmox node/lxc via vnc websocket.

Project description

logo

ProxVNC allows connecting and executing arbitrary commands directly on a Proxmox node/LXC via VNC WebSocket.

Installation

This package can be installed via PyPI:

pip install ProxVNC

Usage information

See the Examples folder for additional working examples.

Connecting via proxmoxer package:

First, create an object to connect to your Proxmox server. For more info read PROXMOXER documentation. All authentication methods are supported.. If you use an Api token you must set the permission to [Sys.console]

from ProxVNC.proxmoxer import ProxmoxAPI
from ProxVNC import ProxVNC
  
proxmox = ProxmoxAPI(host="<proxmox_host:port>", # ex: 10.0.0.1:8006
                         user="<username@realm>", # ex: "root@pam"
                         password="<password>",
                         otp=input("OTP: "),
                         verify_ssl=False)

Create a ProxVNC object and pass the proxmoxer connection via the api parameter. Optionally, specify which node to connect to.

    client = ProxVNC(api=proxmox, node="pve") # specify node if needed, otherwise first node is used by default
  
    client.connect()  

You are now connected! Here is a simple example of interacting with the terminal:

    print(client.readTerm())
    # --- Interact with terminal ---
    while True:
        cmd = input("Enter a command: ")

        if cmd.lower() in ["exit", "quit"]: # Keywords to exit
            break

        client.execCommand(cmd) # Execute the command
  
        print(client.readTerm()) # Read the terminal

    client.disconnect() # Don't forget to disconnect when you're done

Connecting direcly with a shell ticket:

You can also connect to the VNC terminal directly by POSTing to the Proxmox termproxy endpoint

In this example, PROXMOXER is used to call Proxmox API endpoints, but you can use requests or another package.

    proxmox = ProxmoxAPI(host="<proxmox_host:port>", # ex: 10.0.0.1:8006
                         user="", # ex: "root@pam"
                         password="<password>",
                         otp=input("OTP: "),
                         verify_ssl=False)
  
    termproxy = proxmox.nodes("pve").termproxy.post() # POST to termproxy with the node you want to connect to
  
    # Get shell ticket and port
    shell_ticket = termproxy["ticket"] 
    shell_port = termproxy["port"]

    pve_cookie, _ = proxmox.get_tokens() # Get cookie token

Once you have the required data, create the ProxVNC object manually:

    client = ProxVNC(
             url="https://<proxmox_host:port>",
             node="pve",
             user="<username@realm>",
             shell_port=shell_port,
             shell_ticket=shell_ticket,
             pve_auth_cookie=pve_cookie
            )  

     client.connect()

You can now start sending and receiving commands.

Sending files:

Using the sendFile(local_path: str, remote_path: str, wait_time=0.5) method, you can upload files to a specific location on your proxmox node/lxc

    client.sendFile("testSend.txt", "/root/testReceive.txt")

Contributing

We welcome contributions! Here’s how you can help:

  1. Fork the repository and create a new branch for your feature or bug fix.
  2. Make your changes and ensure the code is clean and well-documented.
  3. Test your changes thoroughly before submitting.
  4. Open a pull request with a clear description of your changes.

Please follow PEP8 coding style and include examples if applicable.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

proxvnc-1.1.0.tar.gz (20.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

proxvnc-1.1.0-py3-none-any.whl (24.4 kB view details)

Uploaded Python 3

File details

Details for the file proxvnc-1.1.0.tar.gz.

File metadata

  • Download URL: proxvnc-1.1.0.tar.gz
  • Upload date:
  • Size: 20.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for proxvnc-1.1.0.tar.gz
Algorithm Hash digest
SHA256 f6a754232ee581fd84185498eccbbc1a99a22f61f5c70daf6bc397934c3a118f
MD5 a1ab4e953dc9a75cc4ed7c90d007fb2b
BLAKE2b-256 92652fa6d6d887835b91305abc2a01364c05f4f6175e042b0d7ba69d9ca4faf2

See more details on using hashes here.

Provenance

The following attestation bundles were made for proxvnc-1.1.0.tar.gz:

Publisher: python-publish.yml on xgiralt64/ProxVNC

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file proxvnc-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: proxvnc-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 24.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for proxvnc-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 accc45039f7271247d3e6cff9f718759eddee372b651c3ac454c7406218a18d3
MD5 e7b3e1362820a4e26f3fd569135179fe
BLAKE2b-256 a3528baba9c11683155d72413c7962778b782a7a4a113aaa3895313026dba9cb

See more details on using hashes here.

Provenance

The following attestation bundles were made for proxvnc-1.1.0-py3-none-any.whl:

Publisher: python-publish.yml on xgiralt64/ProxVNC

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page