{"id":13566995,"url":"https://github.com/vandenberghinc/ssht00ls","last_synced_at":"2025-03-25T12:33:01.002Z","repository":{"id":57470853,"uuid":"343099560","full_name":"vandenberghinc/ssht00ls","owner":"vandenberghinc","description":"Python \u0026 cli ssh toolset.","archived":false,"fork":false,"pushed_at":"2021-08-07T18:03:06.000Z","size":390,"stargazers_count":5,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-20T07:44:22.835Z","etag":null,"topics":["agent","cli-ssh-toolset","encryption","python","python3","rsync","scp","smb","ssh","ssh-agent","sshd","sshfs","ssht00ls","yubikey"],"latest_commit_sha":null,"homepage":"https://api.vandenberghinc.com/docs/ssht00ls","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vandenberghinc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-02-28T12:26:55.000Z","updated_at":"2023-03-04T05:14:35.000Z","dependencies_parsed_at":"2022-09-20T12:43:38.852Z","dependency_job_id":null,"html_url":"https://github.com/vandenberghinc/ssht00ls","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vandenberghinc%2Fssht00ls","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vandenberghinc%2Fssht00ls/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vandenberghinc%2Fssht00ls/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vandenberghinc%2Fssht00ls/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vandenberghinc","download_url":"https://codeload.github.com/vandenberghinc/ssht00ls/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245462970,"owners_count":20619586,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent","cli-ssh-toolset","encryption","python","python3","rsync","scp","smb","ssh","ssh-agent","sshd","sshfs","ssht00ls","yubikey"],"created_at":"2024-08-01T13:02:21.162Z","updated_at":"2025-03-25T12:33:00.269Z","avatar_url":"https://github.com/vandenberghinc.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# ssht00ls\nAuthor(s):  Daan van den Bergh.\u003cbr\u003e\nCopyright:  © 2020 Daan van den Bergh All Rights Reserved.\u003cbr\u003e\nSupported Operating Systems: macos \u0026 linux.\u003cbr\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/vandenberghinc/public-storage/master/vandenberghinc/icon/icon.png\" alt=\"Bergh-Encryption\" width=\"50\"\u003e \n\u003c/p\u003e\n\n## Table of content:\n  * [Description](#description)\n  * [Installation](#installation)\n  * [Notes.](#notes.)\n  * [CLI Usage](#cli-usage)\n  * [Code Examples](#code-examples)\n\n# Description:\nPython \u0026 cli ssh toolset.\n\n# Installation:\nInstall the package.\n\n\tcurl -s https://raw.githubusercontent.com/vandenberghinc/ssht00ls/master/ssht00ls/requirements/installer.remote | bash \n\n# Notes.\n1. (linux required to convert smart card modes.)\n\n# CLI Usage:\n\tUsage: ssht00ls \u003cmode\u003e \u003coptions\u003e \n\tModes:\n\t    Keys:\n\t        --generate : Generate a ssh key.\n\t            --path /keys/mykey/ : Specify the keys directory path.\n\t            --passphrase Passphrase123 : Specify the keys passphrase.\n\t            --comment 'My Key' : Specify the keys comment.\n\t    Aliases:\n\t        --list-aliases : List all aliases.\n\t            --joiner ',' : Optionally specify the joiner.\n\t        --alias example.com : Select one or multiple aliases (example: x,y,z) (or use all to select all aliases).\n\t            --info : Show the aliases info.\n\t            --delete   : Delete an alias.\n\t                -f / --forced : Ignore the are you sure prompt.\n\t            --create : Create an alias.\n\t                --server example.com : Specify the server's name.\n\t                --username myuser : Specify the username.\n\t                --ip 0.0.0.0 : Specify the server's ip.\n\t                --port 22 : Specify the server's port.\n\t                for ssh keys :\n\t                --key /path/to/key/private_key : Specify the path to the private key.\n\t                --passphrase 'MyPassphrase123' : Specify the keys pasphrase (optional).\n\t                for smart cards :\n\t                --smart-cards : Enable the smart cards boolean.\n\t                --pin 123456 : Specify the smart cards pin code (optional).\n\t            --edit : Edit the alias config.\n\t                *** same options as --create ***:\n\t                --alias newalias : Rename the alias.\n\t    Sessions:\n\t        --command \u003calias\u003e 'ls .' : Execute a command over ssh.\n\t        --session \u003calias\u003e : Start a ssh session.\n\t            --options ''  : Specify additional ssh options (optional).\n\t    Push \u0026 pull:\n\t        --pull \u003cpath\u003e \u003calias\u003e:\u003cremote\u003e : Pull a file / directory.\n\t            --delete : Also update the deleted files (optional).\n\t            --safe : Enable version control.\n\t            --forced : Enable forced mode.\n\t        --push \u003calias\u003e:\u003cremote\u003e \u003cpath\u003e : Push a file / directory.\n\t            --delete  : Also update the deleted files (optional).\n\t            --safe  : Enable version control.\n\t            --forced  : Enable forced mode.\n\t            --exclude .git,.gitignore  : Exclude additional subpaths (optioal).\n\t            --no-exclude : Skip the default excludes and exlude nothing.\n\t    Mounts:\n\t        --mount \u003calias\u003e:\u003cid\u003e \u003cpath\u003e : Mount a remote share.\n\t            --smb : Select smb mode (default).\n\t            --sshfs : Select sshfs mode (when enabled parameter id becomes remote).\n\t            *** smb options: *** : SMB --mount options.\n\t            --reconnect : Attempt to reconnect the mount when the connection is lost.\n\t            --tunnel : Mount the smb share through a ssh tunnel (overwrites options --port \u0026 --ip).\n\t            --username administrator : Overwrite the smb user (default is retrieved from alias).\n\t            --password 'SomePassphrase123' : Set the password of the smb user login (default is no password '').\n\t            --port 445 : Select a specific smb port (default is 445).\n\t            --ip 127.0.0.1 : Select a specific ip (default is retrieved from alias).\n\t        --unmount \u003cpath\u003e : Unmount a mounted share.\n\t            --sudo   : Root permission required.\n\t            --forced   : Enable forced mode.\n\t    Tunnels:\n\t        --list-tunnels [optional: \u003calias\u003e] : List all tunnels, optionally pass an alias filter.\n\t            --joiner ','  : Optionally specify the joiner.\n\t        --tunnel \u003cport\u003e:\u003cip\u003e:\u003cremote_port\u003e:\u003calias\u003e : Select a ssh tunnel.\n\t            --establish : Establish the selected ssh tunnel.\n\t                --reconnect : Attempt to reconnect the tunnel when the connection is lost.\n\t                --sleeptime 60 : Set the sleeptime value (default is 60) (only when --reconnect is enabled).\n\t                --reattempts 15 : Set the reattempts value (default is 15) (only when --reconnect is enabled).\n\t            --kill : Kill the selected ssh tunnel.\n\t    Agent:\n\t        --sync : Manually synchronize the aliases \u0026 add the keys to the agent.\n\t        --start-agent : Start the ssht00ls agent manually.\n\t        --stop-agent : Stop the ssht00ls agent.\n\t    Basic:\n\t        --kill \u003cidentifier\u003e : Kill all ssh processes that include the identifier.\n\t        --config : Edit the ssht00ls configuration file (nano).\n\t        --reset-cache : Reset the cache directory.\n\t        --version : Show the ssht00ls version.\n\t        -h / --help : Show the documentation.\n\tNotes:\n\t    Include config file : Specify the $SSHT00LS_CONFIG environment variable to use a different ssht00ls config file.\n\tAuthor: Daan van den Bergh. \n\tCopyright: © Daan van den Bergh 2020 - 2021. All rights reserved.\n\n# Code Examples:\n\n### Table of content:\n- [__Agent__](#agent)\n  * [add](#add)\n  * [delete](#delete)\n  * [list](#list)\n  * [check](#check)\n  * [initialize](#initialize)\n- [__Aliases__](#aliases)\n  * [list](#list-1)\n  * [iterate](#iterate)\n  * [check](#check-1)\n  * [check_duplicate](#check_duplicate)\n  * [info](#info)\n  * [delete](#delete-1)\n  * [edit](#edit)\n  * [create](#create)\n  * [sync](#sync)\n  * [public](#public)\n- [__Client__](#client)\n  * [generate](#generate)\n  * [create](#create-1)\n  * [check](#check-2)\n  * [exists](#properties)\n- [__Connections__](#connections)\n  * [list](#list-2)\n- [__Encryption__](#encryption)\n  * [generate](#generate-1)\n  * [activate](#activate)\n  * [activated](#properties-1)\n- [__Installation__](#installation)\n  * [install](#install)\n  * [check_installed](#check_installed)\n- [__Keys__](#keys)\n  * [edit_passphrase](#edit_passphrase)\n  * [edit_comment](#edit_comment)\n  * [generate](#generate-2)\n  * [check](#check-3)\n  * [enable](#enable)\n  * [disable](#disable)\n- [__SCP__](#scp)\n  * [download](#download)\n  * [upload](#upload)\n- [__SMB__](#smb)\n  * [mount](#mount)\n  * [unmount](#unmount)\n  * [parse](#parse)\n  * [id](#properties-2)\n- [__SSH__](#ssh)\n  * [session](#session)\n  * [command](#command)\n- [__SSHD__](#sshd)\n  * [create](#create-2)\n- [__SSHFS__](#sshfs)\n  * [mount](#mount-1)\n  * [unmount](#unmount-1)\n- [__SSync__](#ssync)\n  * [index](#index)\n  * [set_mounted_icon](#set_mounted_icon)\n  * [pull](#pull)\n  * [push](#push)\n- [__SmartCard__](#smartcard)\n  * [get_info](#get_info)\n  * [unblock_pin](#unblock_pin)\n  * [change_pin](#change_pin)\n  * [change_puk](#change_puk)\n  * [generate_key](#generate_key)\n  * [generate_management_key](#generate_management_key)\n  * [reset_piv](#reset_piv)\n  * [export_keys](#export_keys)\n  * [check_smartcard](#check_smartcard)\n  * [convert_to_smartcard](#convert_to_smartcard)\n  * [install](#install-1)\n- [__SmartCards__](#smartcards)\n  * [scan](#scan)\n  * [find_smartcard](#find_smartcard)\n- [__Tunnel__](#tunnel)\n  * [establish](#establish)\n  * [kill](#kill)\n  * [list](#list-3)\n  * [iterate](#iterate-1)\n  * [id](#properties-3)\n\n## Agent:\nThe agent object class.\n``` python \n\n# initialize the agent object class.\nagent = ssht00ls.classes.agent.Agent(\n    # initialize as specific not global (optional).\n    # the path to the public key.\n    public_key=None,\n    # the path to the private key.\n    private_key=None,\n    # the smart card boolean.\n    smartcard=False, )\n\n```\n\n#### Functions:\n\n##### add:\n``` python\n\n# call agent.add.\nresponse = agent.add(\n    # the private key's path.\n    private_key=None,\n    # the public key's path (optional).\n    public_key=None,\n    # the keys passphrase.\n    passphrase=None,\n    # enable if you are using a smart card.\n    smartcard=False,\n    # the smart cards pin code\n    pin=None,\n    # default timeout (do not use).\n    timeout=0.5,\n    # reattempt (do not use).\n    reattempt=True, )\n\n```\n##### delete:\n``` python\n\n# call agent.delete.\nresponse = agent.delete()\n\n```\n##### list:\n``` python\n\n# call agent.list.\nresponse = agent.list()\n\n```\n##### check:\n``` python\n\n# call agent.check.\nresponse = agent.check(public_key=None, raw=False)\n\n```\n##### initialize:\n``` python\n\n# call agent.initialize.\nresponse = agent.initialize()\n\n```\n\n## Aliases:\nThe aliases object class.\n``` python \n\n# initialize the aliases object class.\naliases = ssht00ls.classes.aliases.Aliases(\n    # initialize as specific not global (optional).\n    #     the alias.\n    alias=None,\n    #     the username.\n    username=None,\n    #     the public ip.\n    public_ip=None,\n    #     the private ip.\n    private_ip=None,\n    #     the public port.\n    public_port=None,\n    #     the private port.\n    private_port=None,\n    #     the path to the public key.\n    public_key=None,\n    #     the path to the private key.\n    private_key=None,\n    #     the smart card boolean.\n    smartcard=False,\n    #     the log level.\n    log_level=syst3m.defaults.options.log_level, )\n\n```\n\n#### Functions:\n\n##### list:\n``` python\n\n# call aliases.list.\nresponse = aliases.list()\n\n```\n##### iterate:\n``` python\n\n# call aliases.iterate.\n_ = aliases.iterate()\n\n```\n##### check:\n``` python\n\n# call aliases.check.\nresponse = aliases.check(\n    # the alias to check.\n    alias=None,\n    # the info to check.\n    #     adds / replaces the current (except the exceptions).\n    info={},\n    # the info key exceptions.\n    exceptions=[],\n    # the info value exceptions.\n    value_exceptions=[],\n    # create if not present (must also specify all required info when enabled).\n    create=False, )\n\n```\n##### check_duplicate:\n``` python\n\n# call aliases.check_duplicate.\nresponse = aliases.check_duplicate(alias=None)\n\n```\n##### info:\n``` python\n\n# call aliases.info.\nresponse = aliases.info(alias=None)\n\n```\n##### delete:\n``` python\n\n# call aliases.delete.\nresponse = aliases.delete(alias=None)\n\n```\n##### edit:\n``` python\n\n# call aliases.edit.\nresponse = aliases.edit(\n    # the alias.\n    alias=None,\n    # the edits (dict).\n    #     adds / replaces the current (except the exceptions).\n    edits={},\n    # the edits key exceptions.\n    exceptions=[],\n    # the edits value exceptions.\n    value_exceptions=[None],\n    # save the edits.\n    save=True,\n    # the log level.\n    log_level=syst3m.defaults.options.log_level, )\n\n```\n##### create:\n``` python\n\n# call aliases.create.\nresponse = aliases.create(\n    # the alias.\n    alias=None,\n    # the users.\n    username=None,\n    # the ip of the server.\n    public_ip=None,\n    private_ip=None,\n    # the port of the server.\n    public_port=None,\n    private_port=None,\n    # the path to the private \u0026 public key.\n    private_key=None,\n    public_key=None,\n    # the keys passphrase.\n    passphrase=None,\n    # smart card.\n    smartcard=None,\n    # the smart cards pincode.\n    pin=None,\n    # save to configuration.\n    save=True,\n    # do checks.\n    checks=True,\n    # serialized all parameters as dict, except: [save].\n    serialized={}, )\n\n```\n##### sync:\n``` python\n\n# call aliases.sync.\nresponse = aliases.sync(aliases=[\"*\"], interactive=None, log_level=None)\n\n```\n##### public:\n``` python\n\n# call aliases.public.\n_ = aliases.public(public_ip=None, private_ip=None)\n\n```\n\n## Client:\nThe client object class.\n``` python \n\n# initialize the client object class.\nclient = ssht00ls.classes.client.Client(\n    # the alias (required) (param #1).\n    alias=None,\n    # the username (optional if client already exists).\n    username=None,\n    # the public ip (optional if client already exists).\n    public_ip=None,\n    # the private ip (optional if client already exists).\n    private_ip=None,\n    # the public port (optional if client already exists).\n    public_port=None,\n    # the private port (optional if client already exists).\n    private_port=None,\n    # the path to the public key (optional if client already exists).\n    public_key=None,\n    # the path to the private key (optional if client already exists).\n    private_key=None,\n    # the smart card boolean (optional if client already exists).\n    smartcard=False,\n    # pass parameters by dict.\n    parameters={}, )\n\n```\n\n#### Functions:\n\n##### generate:\n``` python\n\n# call client.generate.\nresponse = client.generate(\n    # the new passphrase.\n    passphrase=None,\n    # the new smartcard pin.\n    pin=None, )\n\n```\n##### create:\n``` python\n\n# call client.create.\nresponse = client.create(\n    # the new passphrase.\n    passphrase=None,\n    # the new smartcard pin.\n    pin=None, )\n\n```\n##### check:\n``` python\n\n# call client.check.\nresponse = client.check()\n\n```\n\n#### Properties:\n```python\n\n# the exists property.\nexists = client.exists\n```\n```python\n\n# the activated property.\nactivated = client.activated\n```\n```python\n\n# the id property.\nid = client.id\n```\n```python\n\n# the alias  property.\nalias_ = client.alias_\n```\n```python\n\n# the username property.\nusername = client.username\n```\n```python\n\n# the public ip property.\npublic_ip = client.public_ip\n```\n```python\n\n# the private ip property.\nprivate_ip = client.private_ip\n```\n```python\n\n# the public port property.\npublic_port = client.public_port\n```\n```python\n\n# the private port property.\nprivate_port = client.private_port\n```\n```python\n\n# the ip property.\nip = client.ip\n```\n```python\n\n# the port property.\nport = client.port\n```\n```python\n\n# the public property.\npublic = client.public\n```\n```python\n\n# the private key property.\nprivate_key = client.private_key\n```\n```python\n\n# the public key property.\npublic_key = client.public_key\n```\n```python\n\n# the is smartcard property.\nis_smartcard = client.is_smartcard\n```\n\n## Connections:\nThe connections object class.\n``` python \n\n# initialize the connections object class.\nconnections = ssht00ls.classes.connections.Connections()\n\n```\n\n#### Functions:\n\n##### list:\n``` python\n\n# call connections.list.\nresponse = connections.list(filter=\"ssh\")\n\n```\n\n## Encryption:\nThe encryption object class.\n``` python \n\n# initialize the encryption object class.\nencryption = ssht00ls.classes.encryption.Encryption(\n    # the configuration file (Dictionary).\n    config=Dictionary,\n    # the webserver cache (syst3m.cache.WebServer).\n    webserver=syst3m.cache.WebServer,\n    # encrypted cache path.\n    cache=None,\n    # the passphrase (optional to prompt) (str).\n    passphrase=None,\n    # the interactive mode (prompt for password) (bool).\n    interactive=True, )\n\n```\n\n#### Functions:\n\n##### generate:\n``` python\n\n# call encryption.generate.\nresponse = encryption.generate(\n    # the passphrase (optional to prompt) (str).\n    passphrase=None,\n    # the verify passphrase (optional).\n    verify_passphrase=None,\n    # interactive (optional).\n    interactive=None )\n\n```\n##### activate:\n``` python\n\n# call encryption.activate.\nresponse = encryption.activate(\n    # the key's passphrase (optional to retrieve from webserver) (str).\n    passphrase=None,\n    # interactive (optional)\n    interactive=None, )\n\n```\n\n#### Properties:\n```python\n\n# the activated property.\nactivated = encryption.activated\n```\n```python\n\n# the public key activated property.\npublic_key_activated = encryption.public_key_activated\n```\n```python\n\n# the private key activated property.\nprivate_key_activated = encryption.private_key_activated\n```\n```python\n\n# the generated property.\ngenerated = encryption.generated\n```\n\n## Installation:\nThe installation object class.\n``` python \n\n# initialize the installation object class.\ninstallation = ssht00ls.classes.installation.Installation()\n\n```\n\n#### Functions:\n\n##### install:\n``` python\n\n# call installation.install.\nresponse = installation.install(\n    # optional define the user (leave None for current user).\n    username=None, )\n\n```\n##### check_installed:\n``` python\n\n# call installation.check_installed.\nresponse = installation.check_installed(\n    # optional define the user (leave None for current user).\n    username=None, )\n\n```\n\n## Keys:\nThe keys object class.\n``` python \n\n# initialize the keys object class.\nkeys = ssht00ls.classes.keys.Keys(\n    # initialize as specific not global (optional).\n    #    the username.\n    username=None,\n    # the path to the public key.\n    public_key=None,\n    # the path to the private key.\n    private_key=None, )\n\n```\n\n#### Functions:\n\n##### edit_passphrase:\n``` python\n\n# call keys.edit_passphrase.\nresponse = keys.edit_passphrase(path=None, old=None, new=None)\n\n```\n##### edit_comment:\n``` python\n\n# call keys.edit_comment.\nresponse = keys.edit_comment(path=None, passphrase=None, comment=None)\n\n```\n##### generate:\n``` python\n\n# call keys.generate.\nresponse = keys.generate(path=None, passphrase=None, comment=\"\")\n\n```\n##### check:\n``` python\n\n# call keys.check.\nresponse = keys.check(username=None, public_keys=[], reversed=False)\n\n```\n##### enable:\n``` python\n\n# call keys.enable.\nresponse = keys.enable(username=None, public_keys=[])\n\n```\n##### disable:\n``` python\n\n# call keys.disable.\nresponse = keys.disable(username=None, public_keys=[])\n\n```\n\n## SCP:\nThe scp object class.\n``` python \n\n# initialize the scp object class.\nscp = ssht00ls.classes.scp.SCP()\n\n```\n\n#### Functions:\n\n##### download:\n``` python\n\n# call scp.download.\nresponse = scp.download(\n    # the file paths.\n    server_path=None,\n    client_path=None,\n    directory=False,\n    # the ssh params.\n    # option 1:\n    alias=None,\n    # option 2:\n    username=None,\n    ip=None,\n    port=22,\n    key_path=None, )\n\n```\n##### upload:\n``` python\n\n# call scp.upload.\nresponse = scp.upload(\n    # the file paths.\n    server_path=None,\n    client_path=None,\n    directory=False,\n    # the ssh params.\n    # option 1:\n    alias=None,\n    # option 2:\n    username=None,\n    ip=None,\n    port=22,\n    key_path=None, )\n\n```\n\n## SMB:\nThe smb object class.\n``` python \n\n# initialize the smb object class.\nsmb = ssht00ls.classes.smb.SMB(\n    # initialize as specific not global (optional).\n    #     the share id (#1).\n    id=None,\n    #     the mountpoint path (#2).\n    path=None,\n    #     the alias (#3).\n    alias=None,\n    #     the server's ip (leave None to retrieve from alias).\n    ip=None,\n    #     the server's port.\n    port=445,\n    #     tunnel smb through ssh.\n    tunnel=False,\n    tunnel_obj=None, # do not use the tunnel_obj parameter.\n    #     the reconnect boolean (only used whe tunnel is enabled).\n    reconnect=False,\n    #     the thread's sleeptime.\n    sleeptime=60,\n    #     the reconnect reattemps.\n    reattemps=15,\n    #     the log level.\n    log_level=syst3m.defaults.options.log_level, )\n\n```\n\n#### Functions:\n\n##### mount:\n``` python\n\n# call smb.mount.\nresponse = smb.mount(\n    # the share id (leave None to use smb.id) (REQUIRED) (#1).\n    id=None,\n    # the mountpoint path (leave None to use smb.path) (REQUIRED) (#2).\n    path=None,\n    # the ssh alias (leave None to use smb.alias) (REQUIRED) (#3).\n    alias=None,\n    # the username of for the remote server (leave None to use the aliases username).\n    username=None,\n    # the password of the remote server's user (optional) (leave None to prompt) (use \"\" for no passphrase).\n    password=None,\n    # the ip of the remote server (leave None to use the aliases ip).\n    ip=None,\n    # the port (leave None to use smb.port).\n    port=None,\n    # tunnel over ssh (leave None to use smb.tunnel).\n    tunnel=None,\n    # the reconnect boolean (only used whe tunnel is enabled) (leave None to use smb.reconnect).\n    reconnect=None,\n    # the log level (leave None to use smb.log_level).\n    log_level=None, )\n\n```\n##### unmount:\n``` python\n\n# call smb.unmount.\nresponse = smb.unmount(\n    # the mountpoint path (leave None to use smb.path) (REQUIRED) (#1).\n    path=None,\n    # the forced umount option.\n    forced=False,\n    # root permission required for force.\n    sudo=False,\n    # the log level (leave None to use smb.log_level).\n    log_level=None, )\n\n```\n##### parse:\n``` python\n\n# call smb.parse.\nresponse = smb.parse(\n    # the mountpoint path (leave None to use smb.path) (REQUIRED) (#1).\n    path=None, )\n\n```\n\n#### Properties:\n```python\n\n# the id property.\nid = smb.id\n```\n```python\n\n# the mounted property.\nmounted = smb.mounted\n```\n\n## SSH:\nThe ssh object class.\n``` python \n\n# initialize the ssh object class.\nssh = ssht00ls.classes.ssh.SSH(\n    # initialize as specific not global (optional).\n    #     the alias.\n    alias=None, )\n\n```\n\n#### Functions:\n\n##### session:\n``` python\n\n# call ssh.session.\nresponse = ssh.session(\n    alias=None, )\n\n```\n##### command:\n``` python\n\n# call ssh.command.\n_ = ssh.command(\n    # the alias.\n    alias=None,\n    # the command to execute.\n    command=None,\n    # serialize the output to json.\n    serialize=False,\n    # the log level.\n    log_level=0, )\n\n```\n\n## SSHD:\nThe sshd object class.\n``` python \n\n# initialize the sshd object class.\nsshd = ssht00ls.classes.sshd.SSHD()\n\n```\n\n#### Functions:\n\n##### create:\n``` python\n\n# call sshd.create.\nresponse = sshd.create(\n    # save the configuration \u0026 banner.\n    save=False,\n    # the ssh port.\n    port=22,\n    # the listen addresses.\n    listen_addresses=[],\n    # the server's banner.\n    banner=\"Hello World!\",\n    # the allowed users \u0026 options.\n    users={\n        # define per user (all keys are optional).\n        \"administrator\": {\n            # the user's root permissions.\n            \"root_permissions\":False,\n            # authentication by password.\n            \"password_authentication\":False,\n            # authentication by keys.\n            \"key_authentication\":True,\n            # ip filter.\n            \"ip_filter\":False,\n            \"allowed_ips\":[],\n            # sftp server only.\n            \"sftp_only\":False,\n            # the chroot directory (leave null to disable).\n            \"chroot_directory\":None,\n            # allowed connection options.\n            \"x11_forwarding\":False,\n            \"tcp_forwarding\":False,\n            \"permit_tunnel\":False,\n            \"allow_stream_local_forwarding\":False,\n            \"gateway_ports\":False,\n        },\n    }, )\n\n```\n\n## SSHFS:\nThe sshfs object class.\n``` python \n\n# initialize the sshfs object class.\nsshfs = ssht00ls.classes.sshfs.SSHFS()\n\n```\n\n#### Functions:\n\n##### mount:\n``` python\n\n# call sshfs.mount.\nresponse = sshfs.mount(\n    # the directory paths.\n    remote=None,\n    path=None,\n    # the ssh params.\n    # option 1:\n    alias=None,\n    # option 2:\n    username=None,\n    ip=None,\n    port=22,\n    key_path=None, )\n\n```\n##### unmount:\n``` python\n\n# call sshfs.unmount.\nresponse = sshfs.unmount(\n    # the client path.\n    path=None,\n    # the forced umount option.\n    forced=False,\n    # forced option may require sudo.\n    sudo=False, )\n\n```\n\n## SSync:\nThe ssync object class.\n``` python \n\n# initialize the ssync object class.\nssync = ssht00ls.classes.ssync.SSync(\n    # initialize as specific not global (optional).\n    #    the username.\n    alias=None, )\n\n```\n\n#### Functions:\n\n##### index:\n``` python\n\n# call ssync.index.\nresponse = ssync.index(path=None, alias=None, log_level=0, checks=True, accept_new_host_keys=True)\n\n```\n##### set_mounted_icon:\n``` python\n\n# call ssync.set_mounted_icon.\n_ = ssync.set_mounted_icon(path)\n\n```\n##### pull:\n``` python\n\n# call ssync.pull.\nresponse = ssync.pull(\n    # the local path.\n    path=None,\n    # the ssht00ls alias.\n    alias=None,\n    # the remote path.\n    remote=None,\n    # exlude subpaths (list) (leave None to exclude none).\n    exclude=[],\n    # path is directory boolean (leave None to parse automatically).\n    directory=True,\n    empty_directory=False,\n    # update deleted files.\n    delete=False,\n    # forced mode.\n    forced=False,\n    # version control.\n    safe=False,\n    # accept new hosts keys.\n    accept_new_host_keys=True,\n    # checks.\n    checks=True,\n    # log level.\n    log_level=0,\n    # get the command in str.\n    command=False, )\n\n```\n##### push:\n``` python\n\n# call ssync.push.\nresponse = ssync.push(\n    # the local path.\n    path=None,\n    # the ssht00ls alias.\n    alias=None,\n    # the remote path.\n    remote=None,\n    # exlude subpaths (list) (leave None to exclude none).\n    exclude=[],\n    # path is directory boolean (leave None to parse automatically).\n    directory=True,\n    empty_directory=False,\n    # update deleted files.\n    delete=False,\n    # forced mode.\n    forced=False,\n    # version control.\n    safe=False,\n    # accept new hosts keys.\n    accept_new_host_keys=True,\n    # checks.\n    checks=True,\n    check_base=True,\n    # log level.\n    log_level=0,\n    # get the command in str.\n    command=False, )\n\n```\n\n## SmartCard:\nThe smartcard object class.\n``` python \n\n# initialize the smartcard object class.\nsmartcard = ssht00ls.classes.smartcards.SmartCard(serial_number=None)\n\n```\n\n#### Functions:\n\n##### get_info:\n``` python\n\n# call smartcard.get_info.\nresponse = smartcard.get_info()\n\n```\n##### unblock_pin:\n``` python\n\n# call smartcard.unblock_pin.\nresponse = smartcard.unblock_pin(\n    # the new pin code.\n    pin=None,\n    # the smart cards puk code\n    puk=None, )\n\n```\n##### change_pin:\n``` python\n\n# call smartcard.change_pin.\nresponse = smartcard.change_pin(\n    # the smart cards new pin code.\n    new=None,\n    # the smart cards old pin code.\n    old=123456, )\n\n```\n##### change_puk:\n``` python\n\n# call smartcard.change_puk.\nresponse = smartcard.change_puk(\n    # the smart cards new puk code.\n    new=None,\n    # the smart cards old puk code.\n    old=12345678, )\n\n```\n##### generate_key:\n``` python\n\n# call smartcard.generate_key.\nresponse = smartcard.generate_key(\n    # the smart cards pin code.\n    pin=None, )\n\n```\n##### generate_management_key:\n``` python\n\n# call smartcard.generate_management_key.\nresponse = smartcard.generate_management_key(\n    # the smart cards pin code.\n    pin=None, )\n\n```\n##### reset_piv:\n``` python\n\n# call smartcard.reset_piv.\nresponse = smartcard.reset_piv()\n\n```\n##### export_keys:\n``` python\n\n# call smartcard.export_keys.\nresponse = smartcard.export_keys(\n    # optionally save the keys to a file.\n    path=None, )\n\n```\n##### check_smartcard:\n``` python\n\n# call smartcard.check_smartcard.\nresponse = smartcard.check_smartcard()\n\n```\n##### convert_to_smartcard:\n``` python\n\n# call smartcard.convert_to_smartcard.\nresponse = smartcard.convert_to_smartcard()\n\n```\n##### install:\n``` python\n\n# call smartcard.install.\nresponse = smartcard.install(\n    # specify a new pin (optional).\n    pin=None,\n    # specify a new puk (optional).\n    puk=None, )\n\n```\n\n## SmartCards:\nThe smartcards object class.\n``` python \n\n# initialize the smartcards object class.\nsmartcards = ssht00ls.classes.smartcards.SmartCards()\n\n```\n\n#### Functions:\n\n##### scan:\n``` python\n\n# call smartcards.scan.\nresponse = smartcards.scan(silent=False)\n\n```\n##### find_smartcard:\n``` python\n\n# call smartcards.find_smartcard.\nresponse = smartcards.find_smartcard(serial_number=None)\n\n```\n\n## Tunnel:\nThe tunnel object class.\n``` python \n\n# initialize the tunnel object class.\ntunnel = ssht00ls.classes.ssh.tunnel.Tunnel(\n    # initialize as specific not global (optional).\n    #     the alias.\n    alias=None,\n    #     the tunnel ip.\n    ip=None,\n    #     the local port.\n    port=None,\n    #     the remote port.\n    remote_port=None,\n    #     the reconnect boolean.\n    reconnect=False,\n    #     the thread's sleeptime.\n    sleeptime=60,\n    #     the reconnect reattemps.\n    reattemps=15,\n    #     the log level.\n    log_level=0, )\n\n```\n\n#### Functions:\n\n##### establish:\n``` python\n\n# call tunnel.establish.\nresponse = tunnel.establish(\n    # the alias.\n    alias=None,\n    # the tunnel ip.\n    ip=None,\n    # the local port.\n    port=None,\n    # the remote port.\n    remote_port=None,\n    # the reconnect boolean (leave None to use False).\n    reconnect=None,\n    # the log level (leave None to use 0).\n    log_level=None, )\n\n```\n##### kill:\n``` python\n\n# call tunnel.kill.\nresponse = tunnel.kill(\n    # the alias.\n    alias=None,\n    # the tunnel ip.\n    ip=None,\n    # the local port.\n    port=None,\n    # the remote port.\n    remote_port=None,\n    # the log level.\n    log_level=None, )\n\n```\n##### list:\n``` python\n\n# call tunnel.list.\nresponse = tunnel.list(alias=None)\n\n```\n##### iterate:\n``` python\n\n# call tunnel.iterate.\n_ = tunnel.iterate(alias=None)\n\n```\n\n#### Properties:\n```python\n\n# the id property.\nid = tunnel.id\n```\n```python\n\n# the established property.\nestablished = tunnel.established\n```\n```python\n\n# the pid property.\npid = tunnel.pid\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvandenberghinc%2Fssht00ls","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvandenberghinc%2Fssht00ls","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvandenberghinc%2Fssht00ls/lists"}