ubuntuusers.de

ERROR - 2x grep auf OpenBSD - Skript local vs. Skript per SSH ausführen

Status: Gelöst | Ubuntu-Version: Ubuntu 18.04 (Bionic Beaver)
Antworten |

halloICKEbins

Avatar von halloICKEbins

Anmeldungsdatum:
12. September 2017

Beiträge: 226

Mahlzeit,

ich habe mir ein Skript (/bin/sh) auf meinem OpenBSD-System geschrieben, welche ps aux | grep "begriff1" | grep "begriff2" ausführt. Wenn ich es lokal ausführen, bekomme ich eine Ausgabe mittels echo des Befehls. Führe ich es per SSH mit Python3 remote aus, bekomme ich diese Ausgabe nicht.

Durch Probieren habe ich rausbekommen, dass es an dem doppelten grep-Befehl liegt - bei einem grep funktioniert alles wunderbar.

Jetzt zur Frage: Woran liegt das und gibt es eine Möglichkeit mit mehreren greps hintereinander zu arbeiten?

PS: Hat jemand eine gute Anleitung der Expressions von grep mit Beispielen - als Alternative zu den mehreren greps?

mhe

Anmeldungsdatum:
29. Dezember 2007

Beiträge: 210

halloICKEbins schrieb:

ich habe mir ein Skript (/bin/sh) auf meinem OpenBSD-System geschrieben, welche ps aux | grep "begriff1" | grep "begriff2" ausführt. Wenn ich es lokal ausführen, bekomme ich eine Ausgabe mittels echo des Befehls.

Den letzten Halbsatz verstehe ich nicht. Aber hier mal ein Beispiel um nicht zwei greps zu verwenden .. bitte immer die einfachen Anführungsstriche verwenden:

$ echo -e "aa\nbb\ncc\n" | grep '[aa|cc]'
aa
cc

Ansonsten mal hier schauen: https://wiki.ubuntuusers.de/grep/

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11248

Wohnort: München

Zeig mal bitte, wie du den Shell-Befehl aus Python heraus aufrufst (und warum du da überhaupt grep brauchst - die Ausgabe des Shell-Befehls könnte man immerhin auch in Python zeilenweise nach den Begriffen durchsuchen).

halloICKEbins

(Themenstarter)
Avatar von halloICKEbins

Anmeldungsdatum:
12. September 2017

Beiträge: 226

Vielleicht habe ich mich ja komisch ausgedrückt:

Ich habe ein Skript für /bin/sh geschrieben, welches auf meinem OpenBSD-System liegt, welches mittels grep bestimmte Informationen ausliest. Wenn ich dieses auf meinem OpenBSD-System mittels /bin/sh /home/myuser/myscript.sh ausführe, bekomme ich die gewünschten Ausgaben.

Jetzt rufe ich das selbe Script mittels ssh von einem Ubuntu-System auf und die eine Anzeige mit dem Mehrfach-grep bleibt leer???

Habe den Quelltext jetzt nicht hier aber ich benutze paramiko dafür.

mhe

Anmeldungsdatum:
29. Dezember 2007

Beiträge: 210

halloICKEbins schrieb:

Vielleicht habe ich mich ja komisch ausgedrückt:

ja, scheint so.

Ich habe ein Skript für /bin/sh geschrieben, welches auf meinem OpenBSD-System liegt, welches mittels grep bestimmte Informationen ausliest. Wenn ich dieses auf meinem OpenBSD-System mittels /bin/sh /home/myuser/myscript.sh ausführe, bekomme ich die gewünschten Ausgaben. Jetzt rufe ich das selbe Script mittels ssh von einem Ubuntu-System

Ok, jetzt wissen wir auch alle was mit "lokal" gemeint ist ☺

auf und die eine Anzeige mit dem Mehrfach-grep bleibt leer???

Die Ausgabe des ps wird sich auf den beiden Systemen unterscheiden .. schau dir mal die Ausgabe des ps auf den beiden Systemen an, vermutlich wirst Du Deine Match-Bedingung anpassen müssen.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13174

mhe schrieb:

Den letzten Halbsatz verstehe ich nicht. Aber hier mal ein Beispiel um nicht zwei greps zu verwenden .. bitte immer die einfachen Anführungsstriche verwenden:

$ echo -e "aa\nbb\ncc\n" | grep '[aa|cc]'
aa
cc

Das ist doppelt falsch. Erstens funktioniert das anders, als Du denkst. Der Regex erfasst nicht etwa "aa ODER cc" sondern alle Zeilen mit mindestens einem "a", "c" oder "|":

1
2
3
4
$ echo -e 'ab\ncd\nef|gh' | grep '[aa|cc]'
ab
cd
ef|gh

Du meintest eher so etwas grep 'aa\|cc. Aber das tut, zweitens, nicht das gleiche wie der ursprüngliche Befehl, denn es liefert alle Zeilen, die die eine oder die andere Sequenz enthalten. Um die ursprüngliche Abfrage mit einem grep nachzubilden, muss man es so machen:

1
grep 'begriff1.*begriff2\|begriff2.*begriff1'

Ggf. kann man das noch anders formulieren; das hängt von den konkreten Suchbegriffen ab.

mhe schrieb:

Die Ausgabe des ps wird sich auf den beiden Systemen unterscheiden .. schau dir mal die Ausgabe des ps auf den beiden Systemen an, vermutlich wirst Du Deine Match-Bedingung anpassen müssen.

Das ist vermutlich der Grund.

Man kann übrigens auch pgrep verwenden, so dass man nicht mit ps und grep hantieren muss.

Cranvil

Anmeldungsdatum:
9. März 2019

Beiträge: 990

Ich schließe mich der Annahme an, dass das OpenBSD-ps eine andere Ausgabe hat als das Ubuntu-ps.

Ich kenne OpenBSD selbst nicht so gut, aber geh davon aus, dass du sehr viele Befehle, die unter Ubuntu funktionieren, unter OpenBSD nochmal nachschlagen musst. Das hängt damit zusammen, dass die BSD-Varianten ihren Unix-Wurzeln treu bleiben, während viele der täglich verwendeten Progrämmchen unter Linux GNU-Implementierungen sind - und ja, ich meine "GNU's Not Unix"-GNU.

Ich habe hier auf meinem MacBook ein FreeBSD-Userland in der Kommandozeile (also voraussichtlich die gleichen Befehlsvarianten wie OpenBSD) und parallel dazu noch die GNU {core,file,find}utils installiert, um sinnvolle Antworten geben zu können.

halloICKEbins

(Themenstarter)
Avatar von halloICKEbins

Anmeldungsdatum:
12. September 2017

Beiträge: 226

@mhe und cranvil

Die ps-Anzeige ist doch immer noch die gleicher, da das Skript immer noch auf dem OpenBSD-System ausgeführt wird. Einmal halt "lokal" gestartet und das andere Mal remote per SSH.

Cranvil

Anmeldungsdatum:
9. März 2019

Beiträge: 990

Da hast du recht.

Ok, nächster Stolperstein: Funktioniert das denn ohne Python auf der Kommandozeile?

Ich habe das eben mal in die andere Richtung probiert (macOS nach Ubuntu). Mein Befehl

ssh ubuntu ps aux 

führt zu

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.1  0.8  77980  9008 ?        Ss   16:58   0:02 /sbin/init maybe-ubiquity
root         2  0.0  0.0      0     0 ?        S    16:58   0:00 [kthreadd]
root         4  0.0  0.0      0     0 ?        I<   16:58   0:00 [kworker/0:0H]
root         6  0.0  0.0      0     0 ?        I<   16:58   0:00 [mm_percpu_wq]
root         7  0.0  0.0      0     0 ?        S    16:58   0:00 [ksoftirqd/0]
root         8  0.0  0.0      0     0 ?        I    16:58   0:01 [rcu_sched]
root         9  0.0  0.0      0     0 ?        I    16:58   0:00 [rcu_bh]
root        10  0.0  0.0      0     0 ?        S    16:58   0:00 [migration/0]
root        11  0.0  0.0      0     0 ?        S    16:58   0:00 [watchdog/0]
root        12  0.0  0.0      0     0 ?        S    16:58   0:00 [cpuhp/0]
root        13  0.0  0.0      0     0 ?        S    16:58   0:00 [kdevtmpfs]
root        14  0.0  0.0      0     0 ?        I<   16:58   0:00 [netns]
root        15  0.0  0.0      0     0 ?        S    16:58   0:00 [rcu_tasks_kthre]
root        16  0.0  0.0      0     0 ?        S    16:58   0:00 [kauditd]
root        17  0.0  0.0      0     0 ?        S    16:58   0:00 [khungtaskd]
root        18  0.0  0.0      0     0 ?        S    16:58   0:00 [oom_reaper]
root        19  0.0  0.0      0     0 ?        I<   16:58   0:00 [writeback]
root        20  0.0  0.0      0     0 ?        S    16:58   0:00 [kcompactd0]
root        21  0.0  0.0      0     0 ?        SN   16:58   0:00 [ksmd]
root        22  0.0  0.0      0     0 ?        SN   16:58   0:00 [khugepaged]
root        23  0.0  0.0      0     0 ?        I<   16:58   0:00 [crypto]
root        24  0.0  0.0      0     0 ?        I<   16:58   0:00 [kintegrityd]
root        25  0.0  0.0      0     0 ?        I<   16:58   0:00 [kblockd]
root        26  0.0  0.0      0     0 ?        I<   16:58   0:00 [ata_sff]
root        27  0.0  0.0      0     0 ?        I<   16:58   0:00 [md]
root        28  0.0  0.0      0     0 ?        I<   16:58   0:00 [edac-poller]
root        29  0.0  0.0      0     0 ?        I<   16:58   0:00 [devfreq_wq]
root        30  0.0  0.0      0     0 ?        I<   16:58   0:00 [watchdogd]
root        32  0.0  0.0      0     0 ?        I    16:58   0:00 [kworker/0:1]
root        34  0.0  0.0      0     0 ?        S    16:58   0:00 [kswapd0]
root        35  0.0  0.0      0     0 ?        I<   16:58   0:00 [kworker/u3:0]
root        36  0.0  0.0      0     0 ?        S    16:58   0:00 [ecryptfs-kthrea]
root        78  0.0  0.0      0     0 ?        I<   16:58   0:00 [kthrotld]
root        79  0.0  0.0      0     0 ?        I<   16:58   0:00 [acpi_thermal_pm]
root        80  0.0  0.0      0     0 ?        S    16:58   0:00 [scsi_eh_0]
root        81  0.0  0.0      0     0 ?        I<   16:58   0:00 [scsi_tmf_0]
root        82  0.0  0.0      0     0 ?        S    16:58   0:00 [scsi_eh_1]
root        83  0.0  0.0      0     0 ?        I<   16:58   0:00 [scsi_tmf_1]
root        89  0.0  0.0      0     0 ?        I<   16:58   0:00 [ipv6_addrconf]
root        98  0.0  0.0      0     0 ?        I<   16:58   0:00 [kstrp]
root       115  0.0  0.0      0     0 ?        I<   16:58   0:00 [charger_manager]
root       153  0.0  0.0      0     0 ?        I    16:58   0:02 [kworker/0:2]
root       167  0.0  0.0      0     0 ?        I<   16:58   0:00 [kworker/0:1H]
root       194  0.0  0.0      0     0 ?        S    16:58   0:00 [scsi_eh_2]
root       195  0.0  0.0      0     0 ?        I<   16:58   0:00 [scsi_tmf_2]
root       196  0.0  0.0      0     0 ?        I<   16:58   0:00 [ttm_swap]
root       197  0.0  0.0      0     0 ?        S    16:58   0:00 [irq/18-vmwgfx]
root       262  0.0  0.0      0     0 ?        I<   16:58   0:00 [raid5wq]
root       314  0.0  0.0      0     0 ?        S    16:58   0:00 [jbd2/sda2-8]
root       315  0.0  0.0      0     0 ?        I<   16:58   0:00 [ext4-rsv-conver]
root       383  0.0  1.5  94844 16100 ?        S<s  16:58   0:00 /lib/systemd/systemd-journald
root       389  0.0  0.1  97708  1824 ?        Ss   16:58   0:00 /sbin/lvmetad -f
root       399  0.0  0.0      0     0 ?        I<   16:58   0:00 [iscsi_eh]
root       405  0.0  0.4  45688  4484 ?        Ss   16:58   0:00 /lib/systemd/systemd-udevd
root       406  0.0  0.0      0     0 ?        I<   16:58   0:00 [ib-comp-wq]
root       407  0.0  0.0      0     0 ?        I<   16:58   0:00 [ib_mcast]
root       408  0.0  0.0      0     0 ?        I<   16:58   0:00 [ib_nl_sa_wq]
root       409  0.0  0.0      0     0 ?        I<   16:58   0:00 [rdma_cm]
root       429  0.0  0.0      0     0 ?        S<   16:58   0:00 [loop0]
systemd+   441  0.0  0.3 141928  3052 ?        Ssl  16:58   0:00 /lib/systemd/systemd-timesyncd
root       517  0.0  0.0      0     0 ?        I<   16:58   0:00 [iprt-VBoxWQueue]
systemd+   631  0.0  0.4  80044  5040 ?        Ss   16:58   0:00 /lib/systemd/systemd-networkd
systemd+   643  0.0  0.5  70628  5056 ?        Ss   16:58   0:00 /lib/systemd/systemd-resolved
root       704  0.0  0.1  95540  1544 ?        Ssl  16:59   0:00 /usr/bin/lxcfs /var/lib/lxcfs/
daemon     706  0.0  0.2  28332  2068 ?        Ss   16:59   0:00 /usr/sbin/atd -f
root       707  0.0  0.6 286252  6536 ?        Ssl  16:59   0:00 /usr/lib/accountsservice/accounts-daemon
syslog     711  0.0  0.3 263036  4024 ?        Ssl  16:59   0:00 /usr/sbin/rsyslogd -n
root       712  0.0  0.6  70660  6076 ?        Ss   16:59   0:00 /lib/systemd/systemd-logind
root       728  0.0  0.2  30028  2824 ?        Ss   16:59   0:00 /usr/sbin/cron -f
root       732  0.0  1.6 169096 16808 ?        Ssl  16:59   0:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
message+   733  0.0  0.4  50176  4384 ?        Ss   16:59   0:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
root       735  0.0  1.9 185948 19696 ?        Ssl  16:59   0:00 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal
root       760  0.0  0.6  72296  6160 ?        Ss   16:59   0:00 /usr/sbin/sshd -D
root       766  0.0  0.1  14888  1620 tty1     Ss+  16:59   0:00 /sbin/agetty -o -p -- \u --noclear tty1 linux
root       781  0.0  0.6 288880  6256 ?        Ssl  16:59   0:00 /usr/lib/policykit-1/polkitd --no-debug
root       905  0.0  2.8  91036 28576 ?        Ss   16:59   0:00 /usr/bin/perl /usr/share/webmin/miniserv.pl /etc/webmin/miniserv.conf
root      1599  0.0  0.0      0     0 ?        S<   16:59   0:00 [loop1]
root      1632  0.0  2.3 635312 24180 ?        Ssl  16:59   0:00 /usr/lib/snapd/snapd
root      2712  0.0  0.0      0     0 ?        I    17:19   0:00 [kworker/u2:2]
root      2714  0.0  0.0      0     0 ?        I    17:31   0:00 [kworker/u2:1]
root      2717  0.0  0.0      0     0 ?        I    17:37   0:00 [kworker/u2:0]
root      3220  0.0  0.7 107984  7240 ?        Ss   17:42   0:00 sshd: ben [priv]
ben       3222  0.0  0.6  76644  6660 ?        Ss   17:42   0:00 /lib/systemd/systemd --user
ben       3223  0.0  0.2 111964  2624 ?        S    17:42   0:00 (sd-pam)
ben       3297  0.0  0.3 107984  3548 ?        S    17:42   0:00 sshd: ben@notty
ben       3298  0.0  0.3  38372  3608 ?        Rs   17:42   0:00 ps aux

Da habe ich mir eine Zeile mit systemd und udevd ausgesucht

ssh ubuntu ps aux | grep systemd | grep udevd 

und

root       405  0.0  0.4  45688  4484 ?        Ss   16:58   0:00 /lib/systemd/systemd-udevd

erhalten.

Sollte bei dir also auch klappen. Wenn nein, müssten wir hier ansetzen, andernfalls brauchen wir wohl deinen Python-Code.

mhe

Anmeldungsdatum:
29. Dezember 2007

Beiträge: 210

rklm schrieb:

Das ist doppelt falsch.

Facepalm .. keine Ahnung wo ich da mal wieder mein Hirn verlegt hatte / Danke für den Hinweis!

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13174

mhe schrieb:

rklm schrieb:

Das ist doppelt falsch.

Facepalm .. keine Ahnung wo ich da mal wieder mein Hirn verlegt hatte / Danke für den Hinweis!

Kein Ding. Dafür lag ich bei der Ausgabe der unterschiedlichen ps falsch. ☺

halloICKEbins kannst Du bitte mal folgendes posten:

  • Das Skript

  • Eine Terminal-Ausgabe vom lokalen Aufruf inklusive der ausgeführten Befehlszeile.

  • Desgleichen für den Aufruf über ssh.

Es wäre immer noch denkbar, dass der Prozess, nach dem Du suchst, gar nicht läuft, wenn Du Dich per ssh anmeldest. Falls Du z.B. gar kein Desktopenvironment startest und nach einem Prozess suchst, der dazu gehört, wirst Du den natürlich per ssh nicht finden.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17604

Wohnort: Berlin

1
ps aux | grep "begriff1" | grep "begriff2" 

Je nach dem, wofür begriff1 und -2 stehen, könnte auch ein

1
ps u -C "begriff1" | grep "begriff2" 

helfen, aber nur je nach dem. Und ob OBSD:ps den -C Parameter kennt weiß ich auch nicht. ☺

halloICKEbins

(Themenstarter)
Avatar von halloICKEbins

Anmeldungsdatum:
12. September 2017

Beiträge: 226

Quellcode mit stdout schicke ich morgen!

halloICKEbins

(Themenstarter)
Avatar von halloICKEbins

Anmeldungsdatum:
12. September 2017

Beiträge: 226

HOST_LOCAL# ps aux

USER       PID %CPU %MEM   VSZ   RSS TT  STAT  STARTED       TIME COMMAND
...
root     81236  0.0  0.0   544  2184 ??  Isp   23Oct19    0:00.07 syslogd: [priv] (syslogd)
...

HOST_LOCAL# vi /root/scripts/test.sh

1
2
3
4
5
6
7
8
9
#!/bin/sh
echo "EINTRAG DAVOR"
if [ $1 = "test" ]; then
    PROZESS=$(ps aux | grep "syslogd" | grep "priv")
    if [ $? -eq 0 ]; then
      echo "gefunden"
    fi
fi
echo "EINTRAG DANACH"

HOST_LOCAL# /bin/sh /root/scripts/test.sh test

EINTRAG DAVOR
gefunden
EINTRAG DANACH

HOST_SSH# vi /home/report/scripts/test.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import os
import sys
import paramiko
from functools import partial

def prepare_ssh_client():
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect_with_id = partial(client.connect, timeout=5, username='user1', pkey = paramiko.RSAKey.from_private_key_file(os.path.expanduser('/home/rsa.key')))
    return client

client = prepare_ssh_client()
client.connect_with_id('1.1.1.1')

cmd = 'doas /bin/sh /root/scripts/test.sh test'
stdin, stdout, stderr = client.exec_command(cmd)
result = stdout.readlines()

for z in result:
    line = z.strip()
    print (line)

client.close()

HOST_SSH# python3 /home/report/scripts/test.py

EINTRAG DAVOR
EINTRAG DANACH

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11248

Wohnort: München

Hast du mal geschaut, ob da etwas in stderr landet (z.B. weil der PATH bei der SSH-Sitzung nicht passend gesetzt ist)?

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import os
import sys
import paramiko
from functools import partial

def prepare_ssh_client():
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect_with_id = partial(client.connect, timeout=5, username='user1', pkey = paramiko.RSAKey.from_private_key_file(os.path.expanduser('/home/rsa.key')))
    return client

client = prepare_ssh_client()
client.connect_with_id('1.1.1.1')

cmd = 'doas /bin/sh /root/scripts/test.sh test'
stdin, stdout, stderr = client.exec_command(cmd)

for line in stderr:
    print("stderr:", line, end='')
for line.stdout:
    print("stdout:", line, end='')

client.close()
Antworten |