Python Tutorial - SSH password authentication¶
This tutorial describes the how you can use generated UTIM session key to connect to server via ssh
Uhost¶
Run Uhost as described in Python Tutorial - Hello World.
Creating users¶
Code of this example here.
This script creates new user for linux machine using UTIM ID’s as username and UTIM’s session key as password
Step:
- Connect to database
- Select IDs and keys of UTIMs
- Create or delete (if exists) and create new user.
UTIM¶
Code of this example here.
Steps:
Import from UTIM library
from utim.connectivity.manager import ConnectivityConnectError from utim.utim import Utim from utim.connectivity import DataLinkManager, TopDataType from utim.connectivity.manager import ConnectivityManager from utim.utilities.tag import Tag from utim.utilities.exceptions import UtimConnectionException, UtimInitializationError
Initialize two queues - first is for receiving and second is for transmitting
rx_queue = queue.Queue() tx_queue = queue.Queue()
Initialize ConnectivityManager - utility to read data from queues. To use queues to send and receive data you should set argument
dl_type=DataLinkManager.TYPE_QUEUE
to ConnectifityManagercm1 = ConnectivityManager() cm1.connect(dl_type=DataLinkManager.TYPE_QUEUE, rx=tx_queue, tx=rx_queue)
Create UTIM object and run it
concrete_utim = Utim() concrete_utim.connect(dl_type=DataLinkManager.TYPE_QUEUE, rx=rx_queue, tx=tx_queue) concrete_utim.run()
Send data to start communication:
data1 = [TopDataType.DEVICE, Tag.INBOUND.NETWORK_READY] cm1.send(data1)
Wait for session key and stop it when the key is received
while True: data = cm1.receive() if data: session_key = data[1] concrete_utim.stop() break
Use
paramiko
library to connect via ssh, execute command and print result of command executing:ssh = paramiko.SSHClient() ssh.load_system_host_keys() ssh.connect(_SERVER, username=_UTIM_NAME.hex().upper(), password=session_key.hex()) ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command('ifconfig') for line in iter(ssh_stdout.readline, ""): print(line, end="") ssh.close()
Finally, stop Utim (if not stopped) and ConnectivityManager before exit
concrete_utim.stop() cm1.stop()