home_server:home_server_setup:other_services:ssh

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
home_server:home_server_setup:other_services:ssh [2022-06-26 Sun wk25 13:06] – [SSH Login Message] baumkphome_server:home_server_setup:other_services:ssh [2023-12-26 Tue wk52 11:38] (current) baumkp
Line 1: Line 1:
 +{{tag>linux debian ssh "ssh notes"}}
 ======SSH Notes====== ======SSH Notes======
  
Line 13: Line 13:
  
 ====Login Scripts==== ====Login Scripts====
 +====Debian====
   *''ls -la /etc/update-motd.d/'' to see the scripts that are run after the MOTD is displayed.   *''ls -la /etc/update-motd.d/'' to see the scripts that are run after the MOTD is displayed.
 The Debian script is very simple:  The Debian script is very simple: 
-<code>+<code bash>
 #!/bin/sh #!/bin/sh
 uname -snrvm uname -snrvm
 </code> </code>
 +
 +====Ubuntu====
 Ubuntu has multiple scripts some that I like and some that I do not like.   Ubuntu has multiple scripts some that I like and some that I do not like.  
-This system status information script is:+This system status information script, ++++/etc/update-motd.d/50-landscape-sysinfo|
 <code> <code>
 #!/bin/sh #!/bin/sh
Line 39: Line 42:
     echo " System information disabled due to load higher than $threshold"     echo " System information disabled due to load higher than $threshold"
 fi</code> fi</code>
-The main information script is written in python3.+++++ 
 +The main information script is written in python3, ++++/usr/bin/landscape-systeminfo| 
 +<code> 
 +#!/usr/bin/python3 
 +import sys, os
  
 +try:
 +    if os.path.dirname(os.path.abspath(sys.argv[0])) == os.path.abspath("scripts"):
 +        sys.path.insert(0, "./")
 +    else:
 +        from landscape.lib.warning import hide_warnings
 +        hide_warnings()
 +
 +    from twisted.internet import reactor
 +
 +    from landscape.sysinfo.deployment import run
 +except ImportError:
 +    # For some reasons the libraries are not importable for now. We are
 +    # probably during an upgrade procedure, so let's exit, expecting the
 +    # dependencies to be fixed at next run.
 +    sys.exit(2)
 +
 +
 +if __name__ == "__main__":
 +    run(sys.argv[1:], reactor)
 +
 +</code>
 +  *If twisted not installed, ''pip install twisted'' to install
 +  *if cpuinfo not installed, ''pip install py-cpuinfo'' to install
 +++++
 +
 +====Python Code====
 +++++python3 agnostic code | 
 +<code>
 +#!/usr/bin/python3
 +
 +import psutil
 +import platform
 +from datetime import datetime
 +import cpuinfo
 +import socket
 +import uuid
 +import re
 +
 +def get_size(bytes, suffix="B"):
 +    """
 +    Scale bytes to its proper format
 +    e.g:
 +        1253656 => '1.20MB'
 +        1253656678 => '1.17GB'
 +    """
 +    factor = 1024
 +    for unit in ["", "K", "M", "G", "T", "P"]:
 +        if bytes < factor:
 +            return f"{bytes:.2f}{unit}{suffix}"
 +        bytes /= factor
 +
 +def System_information():
 +    print("="*40, "System Information", "="*40)
 +    uname = platform.uname()
 +    print(f"System: {uname.system}")
 +    print(f"Node Name: {uname.node}")
 +    print(f"Release: {uname.release}")
 +    print(f"Version: {uname.version}")
 +    print(f"Machine: {uname.machine}")
 +    print(f"Processor: {uname.processor}")
 +    print(f"Processor: {cpuinfo.get_cpu_info()['brand_raw']}")
 +    print(f"Ip-Address: {socket.gethostbyname(socket.gethostname())}")
 +    print(f"Mac-Address: {':'.join(re.findall('..', '%012x' % uuid.getnode()))}")
 +
 +    # Boot Time
 +    print("="*40, "Boot Time", "="*40)
 +    boot_time_timestamp = psutil.boot_time()
 +    bt = datetime.fromtimestamp(boot_time_timestamp)
 +    print(f"Boot Time: {bt.year}/{bt.month}/{bt.day} {bt.hour}:{bt.minute}:{bt.second}")
 +
 +    # print CPU information
 +    print("="*40, "CPU Info", "="*40)
 +    # number of cores
 +    print("Physical cores:", psutil.cpu_count(logical=False))
 +    print("Total cores:", psutil.cpu_count(logical=True))
 +    # CPU frequencies
 +    cpufreq = psutil.cpu_freq()
 +    print(f"Max Frequency: {cpufreq.max:.2f}Mhz")
 +    print(f"Min Frequency: {cpufreq.min:.2f}Mhz")
 +    print(f"Current Frequency: {cpufreq.current:.2f}Mhz")
 +    # CPU usage
 +    print("CPU Usage Per Core:")
 +    for i, percentage in enumerate(psutil.cpu_percent(percpu=True, interval=1)):
 +        print(f"Core {i}: {percentage}%")
 +    print(f"Total CPU Usage: {psutil.cpu_percent()}%")
 +
 +    # Memory Information
 +    print("="*40, "Memory Information", "="*40)
 +    # get the memory details
 +    svmem = psutil.virtual_memory()
 +    print(f"Total: {get_size(svmem.total)}")
 +    print(f"Available: {get_size(svmem.available)}")
 +    print(f"Used: {get_size(svmem.used)}")
 +    print(f"Percentage: {svmem.percent}%")
 +
 +    print("="*20, "SWAP", "="*20)
 +    # get the swap memory details (if exists)
 +    swap = psutil.swap_memory()
 +    print(f"Total: {get_size(swap.total)}")
 +    print(f"Free: {get_size(swap.free)}")
 +    print(f"Used: {get_size(swap.used)}")
 +    print(f"Percentage: {swap.percent}%")
 +
 +    # Disk Information
 +    print("="*40, "Disk Information", "="*40)
 +    print("Partitions and Usage:")
 +    # get all disk partitions
 +    partitions = psutil.disk_partitions()
 +    for partition in partitions:
 +        print(f"=== Device: {partition.device} ===")
 +        print(f"  Mountpoint: {partition.mountpoint}")
 +        print(f"  File system type: {partition.fstype}")
 +        try:
 +            partition_usage = psutil.disk_usage(partition.mountpoint)
 +        except PermissionError:
 +            # this can be catched due to the disk that
 +            # isn't ready
 +            continue
 +        print(f"  Total Size: {get_size(partition_usage.total)}")
 +        print(f"  Used: {get_size(partition_usage.used)}")
 +        print(f"  Free: {get_size(partition_usage.free)}")
 +        print(f"  Percentage: {partition_usage.percent}%")
 +    # get IO statistics since boot
 +    disk_io = psutil.disk_io_counters()
 +    print(f"Total read: {get_size(disk_io.read_bytes)}")
 +    print(f"Total write: {get_size(disk_io.write_bytes)}")
 +
 +    ## Network information
 +    print("="*40, "Network Information", "="*40)
 +    ## get all network interfaces (virtual and physical)
 +    if_addrs = psutil.net_if_addrs()
 +    for interface_name, interface_addresses in if_addrs.items():
 +        for address in interface_addresses:
 +            print(f"=== Interface: {interface_name} ===")
 +            if str(address.family) == 'AddressFamily.AF_INET':
 +                print(f"  IP Address: {address.address}")
 +                print(f"  Netmask: {address.netmask}")
 +                print(f"  Broadcast IP: {address.broadcast}")
 +            elif str(address.family) == 'AddressFamily.AF_PACKET':
 +                print(f"  MAC Address: {address.address}")
 +                print(f"  Netmask: {address.netmask}")
 +                print(f"  Broadcast MAC: {address.broadcast}")
 +    ##get IO statistics since boot
 +    net_io = psutil.net_io_counters()
 +    print(f"Total Bytes Sent: {get_size(net_io.bytes_sent)}")
 +    print(f"Total Bytes Received: {get_size(net_io.bytes_recv)}")
 +
 +if __name__ == "__main__":
 +
 +    System_information()
 +</code>
 +++++
  
-Some Links:+====Some Links:====
   *[[How to manage SSH login message|https://www.simplified.guide/ssh/suppress-banner]]   *[[How to manage SSH login message|https://www.simplified.guide/ssh/suppress-banner]]
   *[[HowTo: Set a Warning Message (Banner) in SSH|https://www.shellhacks.com/setup-warning-message-banner-ssh/]]   *[[HowTo: Set a Warning Message (Banner) in SSH|https://www.shellhacks.com/setup-warning-message-banner-ssh/]]
  • /app/www/public/data/attic/home_server/home_server_setup/other_services/ssh.1656219973.txt.gz
  • Last modified: 2023-04-30 Sun wk17 17:44
  • (external edit)