From a50675dea6ed241fc1ce18ed92c712de410a26ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A1lint=20R=C3=A9thelyi?= <rethelyibalint@gmail.com> Date: Mon, 7 Mar 2022 22:54:28 +0100 Subject: [PATCH] 4 --- README.md | 29 ++++++++++++++++ metadata.yaml | 2 +- solutions/2_feladat.md | 4 ++- solutions/3_feladat.md | 4 +++ solutions/4_feladat.md | 78 ++++++++++++++++++++++++++++++++++++++++++ ssh_client.py | 37 ++++++++++++++++++++ 6 files changed, 152 insertions(+), 2 deletions(-) create mode 100644 solutions/4_feladat.md create mode 100755 ssh_client.py diff --git a/README.md b/README.md index 245ad16..387062b 100644 --- a/README.md +++ b/README.md @@ -241,3 +241,32 @@ aminek a kikért payload osztályát kell megadnunk (`packet[TCP]`). - Eredményként írassuk ki a kapott válaszok source portját (`.sport` attribútum), azaz a nyitott portokat, amelyekről érkezett válasz. +## 4. Feladat - Kötelezően választható (1 db) - IMSc plusz feladat (+2 pont) + +Az alábbi feladatok közül **csak egyet** kell kötelezően megoldani a mérés során, mely szabadon választható. + +**IMSc pont szerezhető mindkét feladat megoldásával!** + +## 4.a Feladat - Minimál SSH kliens + +**Feladat:** Írjunk Python szkriptet `ssh_client.py` néven, amely egy minimális, interaktív SSH klienst valósít meg. +Az SSH kapcsolat kezeléséhez használjuk a `pxssh` modult, amit a `pexpect` csomag részeként tudunk telepíteni. +Érdemes megnézni a [`pxssh`](https://pexpect.readthedocs.io/en/stable/api/pxssh.html#pxssh-classl%22) dokumentációját. + +- [`ssh_client.py.txt`](https://qosip.tmit.bme.hu/foswiki/pub/Meres/PythonFeladatok/ssh_client.py.txt2): +Skeleton fájl a 4. feladathoz - Nevezd át! + +- A scriptet NE indítsuk rendszergazdai jogosultsággal! +- SSH szerver címét indítási paraméterként adjuk meg! +- Felhasználónév/jelszó párost kérjük be a konzolról interaktív módon! Jelszó biztonságos bekérésére használjuk a +`getpass` modul `getpass()` függvényét, ami nem jeleníti meg a leütött karaktereket! +- Az SSH kapcsolatot kezelő objektum a `pxssh()` függvénnyel kérhető ki, amin a `login()` függvényt meghívva +csatlakozhatunk az SSH szerverhez. **Példakód az SSH kapcsolatot kezelő osztály dokumentációjában található!** +- Kezeljük a hibás kapcsolódásnál felmerülő kivételeket/hibákat! +- Az interaktív konzolt a prompt-tal együtt a konzolról olvasással valósítsuk meg egy kvázi végtelen ciklusban. +- `q`/`Q` karakterekre, illetve CTRL+C kombinációra lépjünk ki! Ne felejtsük el ekkor bontani a kapcsolatot! +- A begépelt parancsokat folyamatosan, az előző parancsokat megőrizve mentsük el a saját ssh.log fájlunkba. +- A laborban lévő image-ek nagy valószínűséggel futtatnak SSH szervert, amivel tesztelhetjük a kliensünket: + - Hoszt: localhost + - Felhasználó: vagrant + - Jelszó: vagrant diff --git a/metadata.yaml b/metadata.yaml index b268ab9..6885a8f 100644 --- a/metadata.yaml +++ b/metadata.yaml @@ -1,6 +1,6 @@ title: Python mérés subtitle: Infokomm labor 1 -author: Réthelyi Bálint +author: Réthelyi Bálint - IZUM0B geometry: margin=2cm lang: hu-HU output: pdf_document \ No newline at end of file diff --git a/solutions/2_feladat.md b/solutions/2_feladat.md index a9fc5f1..577b34d 100644 --- a/solutions/2_feladat.md +++ b/solutions/2_feladat.md @@ -97,4 +97,6 @@ $ ./mirror_stat.py # don't need sudo priv for this in a modern system 'ftp.us.debian.org': 0.20902609825134277, 'ftp2.de.debian.org': 0.020498037338256836, 'ftp2.fr.debian.org': 0.02599787712097168} -``` \ No newline at end of file +``` + +Sikeresen megpingettem a mirror szervereket, ezeket ki is listáztam. \ No newline at end of file diff --git a/solutions/3_feladat.md b/solutions/3_feladat.md index ed47d86..0a65633 100644 --- a/solutions/3_feladat.md +++ b/solutions/3_feladat.md @@ -49,6 +49,8 @@ $ nc localhost 9999 Mon Mar 7 17:56:58 2022 ``` +Látható, hogy sikeresen megkaptam az aktuális időt. + ## 3.b Feladat - Port szkenner **Feladat:** Valósítsunk meg egy port szkanner funkciót, amely egy megadott hoszton ("www.google.hu") @@ -105,3 +107,5 @@ Received 251 packets, got 2 answers, remaining 1021 packets 443 >>> ``` + +Látható, hogy a "www.google.hu"-nak a 80-as és a 443-as portja van nyitva. \ No newline at end of file diff --git a/solutions/4_feladat.md b/solutions/4_feladat.md new file mode 100644 index 0000000..dbd99d6 --- /dev/null +++ b/solutions/4_feladat.md @@ -0,0 +1,78 @@ +# 4.a Feladat - Minimál SSH kliens + +**Feladat:** Írjunk Python szkriptet `ssh_client.py` néven, amely egy minimális, interaktív SSH klienst valósít meg. + +A forrás fájl: + +```python +#!/usr/bin/env python3 + +import getpass +import argparse +from pexpect import pxssh + + +def connect(host, port=22): + username = input("Add meg a felhasználónevedet: ") + passwd = getpass.getpass("Add meg a jelszavadat a távoli gépre: ") + try: + s = pxssh.pxssh() + s.login(host, username, passwd, port=port) + except pxssh.ExceptionPxssh as e: + print("Connection refused!") + return + print("SSH connection is established!") + while True: + try: + print("$ ", end='') + cmd = input() + if cmd in ['q', 'Q']: + break + s.sendline(cmd) + s.prompt() + print(s.before.decode('utf-8')) + except KeyboardInterrupt: + break + s.logout() + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--host", default="localhost") + parser.add_argument("--port", default="22") + args = parser.parse_args() + connect(args.host, args.port) + +``` + +Futtatás: + +```bash +$ chmod +x ssh_client.py +$ ./ssh_client.py --host hermes.sch.bme.hu +Add meg a felhasználónevedet: blint +Add meg a jelszavadat a távoli gépre: +SSH connection is established! +$ ls -lah +ls -lah +total 72K +drwxr-xr-x 8 blint blint 15 Mar 7 21:44 . +drwxr-xr-x 8 root root 8 Nov 21 10:41 .. +drwx------ 3 blint blint 3 Mar 4 21:10 .ansible +-rw------- 1 blint blint 9.4K Mar 7 21:48 .bash_history +-rw-r--r-- 1 blint blint 220 May 1 2021 .bash_logout +-rw-r--r-- 1 blint blint 3.8K Jan 17 22:20 .bashrc +drwx------ 2 blint blint 3 May 1 2021 .cache +drwx------ 3 blint blint 3 Mar 7 21:44 .config +drwxrwxr-x 3 blint blint 3 May 1 2021 .local +-rw-r--r-- 1 blint blint 807 May 1 2021 .profile +-rw------- 1 blint blint 0 Aug 11 2021 .psql_history +-rw-rw-r-- 1 blint blint 6.7K Jan 17 22:20 .shellfishrc +drwx------ 2 blint blint 5 Mar 4 21:42 .ssh +-rw-r--r-- 1 blint blint 0 May 1 2021 .sudo_as_admin_successful +drwxrwxr-x 7 blint blint 7 Jun 15 2021 test + +$ q +``` + +A programot a saját szerveremen teszteltem. \ No newline at end of file diff --git a/ssh_client.py b/ssh_client.py new file mode 100755 index 0000000..d0a234e --- /dev/null +++ b/ssh_client.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python3 + +import getpass +import argparse +from pexpect import pxssh + + +def connect(host, port=22): + username = input("Add meg a felhasználónevedet: ") + passwd = getpass.getpass("Add meg a jelszavadat a távoli gépre: ") + try: + s = pxssh.pxssh() + s.login(host, username, passwd, port=port) + except pxssh.ExceptionPxssh as e: + print("Connection refused!") + return + print("SSH connection is established!") + while True: + try: + print("$ ", end='') + cmd = input() + if cmd in ['q', 'Q']: + break + s.sendline(cmd) + s.prompt() + print(s.before.decode('utf-8')) + except KeyboardInterrupt: + break + s.logout() + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--host", default="localhost") + parser.add_argument("--port", default="22") + args = parser.parse_args() + connect(args.host, args.port) -- GitLab