Skip to main content

IoT-LAB testbed ssh command-line client

Project description

PyPI package status CI status Codecov coverage status

SSH CLI Tools provides a set of commands for interacting remotely and easily with IoT-Lab Linux nodes. See here to get more information on this kind of node.

All available actions provided by SSH CLI Tools are available as sub-commands of iotlab-ssh.

The provided sub-commands are:

Sub-command

Function

flash

Flash the given firmware on the nodes co-microcontroller

reset

Reset the nodes co-microcontroller

wait-for-boot

Block the execution until all nodes have booted or maximum wait time has expired

run-script

Run a given script in background (screen session) on the given nodes

run-cmd

Run a command on the given nodes

copy-file

Copy a file on SSH frontend homedir directory (~/shared/.iotlabsshcli)

SSH CLI Tools can be used in conjunction with the IoT-Lab CLI Tools commands like iotlab-auth and iotlab-experiment.

Installation:

You need python pip. To do a system-wide install of the ssh-cli-tools use pip (or pip3 for Python 3):

$ sudo pip install iotlabsshcli

Pip version >= 9.0 is known to work ; you may need to upgrade. See INSTALLING.md for details on installation options.

Requirements:

Linux nodes are reachable through a gateway SSH server (IoT-LAB SSH frontend). For this reason you must verify that your SSH public key used by ssh-cli-tools has been recorded in your IoT-LAB user profile. You can find how to configure your IoT-LAB SSH access in this documentation.

Examples:

Start an experiment, wait for it to be ready, wait for all nodes boot:

$ iotlab-experiment submit -d 120 -l saclay,a8,1-10
{
    "id": 65535
}
$ iotlab-experiment wait
Waiting that experiment 65535 gets in state Running
"Running"
$ iotlab-ssh wait-for-boot
{
    "wait-for-boot": {
        "0": [
            "node-a8-2.saclay.iot-lab.info",
            "node-a8-3.saclay.iot-lab.info",
            "node-a8-5.saclay.iot-lab.info",
            "node-a8-6.saclay.iot-lab.info",
            "node-a8-7.saclay.iot-lab.info",
            "node-a8-9.saclay.iot-lab.info",
            "node-a8-10.saclay.iot-lab.info"
        ],
        "1": [
            "node-a8-4.saclay.iot-lab.info",
            "node-a8-8.saclay.iot-lab.info"
        ]
    }
}

Note: node-a8-4 and node-a8-8 are broken in Saclay.

Flash a firmware on the co-microcontroller of the working nodes:

$ iotlab-ssh flash <firmware.elf> -l saclay,a8,2-3+5-7+9-10
{
    "flash": {
        "0": [
            "node-a8-2.saclay.iot-lab.info",
            "node-a8-3.saclay.iot-lab.info",
            "node-a8-5.saclay.iot-lab.info",
            "node-a8-6.saclay.iot-lab.info",
            "node-a8-7.saclay.iot-lab.info",
            "node-a8-9.saclay.iot-lab.info",
            "node-a8-10.saclay.iot-lab.info"
        ]
    }
}

Reset the co-microcontroller of one node:

$ iotlab-ssh reset -l saclay,a8,2
{
    "reset": {
        "0": [
            "node-a8-2.saclay.iot-lab.info"
        ]
    }
}

Use the –verbose option to get the commands output:

$ iotlab-ssh --verbose reset -l saclay,a8,2
Connecting via SSH proxy saclay.iot-lab.info:22 -> node-a8-2.saclay.iot-lab.info:22
[node-a8-2.saclay.iot-lab.info]     Open On-Chip Debugger 0.9.0-dirty (2016-04-15-00:55)
[node-a8-2.saclay.iot-lab.info]     Licensed under GNU GPL v2
[node-a8-2.saclay.iot-lab.info] For bug reports, read
[node-a8-2.saclay.iot-lab.info]     http://openocd.org/doc/doxygen/bugs.html
[node-a8-2.saclay.iot-lab.info]     adapter speed: 1000 kHz
[...]
[node-a8-2.saclay.iot-lab.info]     TargetName         Type       Endian TapName            State
[node-a8-2.saclay.iot-lab.info]     --  ------------------ ---------- ------ ------------------ ------------
[node-a8-2.saclay.iot-lab.info] 0* stm32f1x.cpu       cortex_m   little stm32f1x.cpu       running
[node-a8-2.saclay.iot-lab.info]     Info : JTAG tap: stm32f1x.cpu tap/device found: 0x3ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x3)
[node-a8-2.saclay.iot-lab.info]     Info : JTAG tap: stm32f1x.bs tap/device found: 0x06414041 (mfg: 0x020, part: 0x6414, ver: 0x0)
[node-a8-2.saclay.iot-lab.info]     shutdown command invoked
[node-a8-2.saclay.iot-lab.info]     Return Value: 0
{
    "reset": {
        "0": [
            "node-a8-2.saclay.iot-lab.info"
        ]
    }
}

Run a command on two nodes:

$ iotlab-ssh --verbose run-cmd "uname -a" -l saclay,a8,2-3
Connecting via SSH proxy saclay.iot-lab.info:22 -> node-a8-2.saclay.iot-lab.info:22
[node-a8-2.saclay.iot-lab.info]     Linux node-a8-2 3.18.5-iotlab+ #9 Thu Sep 1 16:17:22 CEST 2016 armv7l GNU/Linux
[node-a8-3.saclay.iot-lab.info]     Linux node-a8-3 3.18.5-iotlab+ #9 Thu Sep 1 16:17:22 CEST 2016 armv7l GNU/Linux
{
    "run-cmd": {
        "0": [
            "node-a8-2.saclay.iot-lab.info",
            "node-a8-3.saclay.iot-lab.info"
        ]
    }
}

Run a command on SSH frontend:

$ iotlab-ssh --verbose run-cmd "uname -a" --frontend
[saclay.iot-lab.info]       Linux saclay 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u1 (2016-09-03) x86_64 GNU/Linux
{
    "run-cmd": {
        "0": [
            "saclay.iot-lab.info"
        ]
    }
}

Copy file on SSH frontend homedir directory (~/shared/.iotlabsshcli):

$ iotlab-ssh copy-file test.tar.gz
{
    "run-cmd": {
        "0": [
            "saclay.iot-lab.info"
        ]
    }
}
$ iotlab-ssh run-cmd "tar -xzvf ~/shared/.iotlabsshcli/test.tar.gz -C ~/shared/.iotlabsshcli/" --frontend
{
    "run-cmd": {
        "0": [
            "saclay.iot-lab.info"
        ]
    }
}

Note: shared homedir directory is mounted (via NFS) by Linux nodes during experiment.

Run the script /tmp/test.sh on node-a8-2 in saclay:

$ iotlab-ssh run-script /tmp/test.sh -l saclay,a8,2
{
    "run-script": {
        "0": [
            "node-a8-2.saclay.iot-lab.info"
        ]
    }
}

Note: a screen session is launched on the node to actually run the script and provide easy access to outputs if needed. When the script ends, the screen session is terminated and the logs are gone.

root@node-a8-2:~# screen -ls
There is a screen on:
       1877.<login>-<exp_id>   (Detached)
1 Socket in /tmp/screens/S-root.

Note: similar to run command you can pass the –frontend option if you want to launch a script in background on the SSH frontend.

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

iotlabsshcli-1.2.2.tar.gz (10.3 MB view details)

Uploaded Source

Built Distribution

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

iotlabsshcli-1.2.2-py3-none-any.whl (30.5 kB view details)

Uploaded Python 3

File details

Details for the file iotlabsshcli-1.2.2.tar.gz.

File metadata

  • Download URL: iotlabsshcli-1.2.2.tar.gz
  • Upload date:
  • Size: 10.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for iotlabsshcli-1.2.2.tar.gz
Algorithm Hash digest
SHA256 e99de71076202d793a80e4cf2d461a696c2b0cfbb592f46c3c01c7cdca4159f2
MD5 9088a6a47ffa7469ff6bb132941257ea
BLAKE2b-256 a275e31d3c77802f178579418237ed4ba9386a21a05d5664a9a9d377daea018b

See more details on using hashes here.

File details

Details for the file iotlabsshcli-1.2.2-py3-none-any.whl.

File metadata

  • Download URL: iotlabsshcli-1.2.2-py3-none-any.whl
  • Upload date:
  • Size: 30.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for iotlabsshcli-1.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 cce15268e0e0dbf15256715689ffc1464495b6aff7f1da4456b9500ee95a1387
MD5 a24c66186e32fdb713f42a86e8e88997
BLAKE2b-256 85dc53e1f49286f25c2173913306334b14c50b2a84da5f4090cd4d57fb87ddb3

See more details on using hashes here.

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