Github hängt

Smalltalk
Antworten
scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Github hängt

Beitrag von scientific » 31.08.2017 11:34:29

Hi Leute!

Ich hab ein seltsames Problem. Hab gestern versucht ein Github-Repo zu aktualisieren.
Ich kann verfolgen, dass die Änderungen bei github ankommen, aber dann hängt git.

In strace kehrt zu diesem Zeitpunkt diese Meldung immer wieder

Code: Alles auswählen

 wait4(21624, 0x7fff0d80ce44, 0, NULL)   = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGWINCH {si_signo=SIGWINCH, si_code=SI_KERNEL} ---


Das passiert auch bei einem probehalber neu angelegten leeren Repo (nur README.md)

Ich arbeite mit ssh und Pubkey.

Hat jemand eine Idee, was da sein könnte?

Im Router hab ich im DHCP-Server den DNS weg von googles auf den vom ccc in Berlin in der Zwischenzeit geändert gehabt.

Und azfgrund dieses Fehlers hab ich auch meinen ssh-key geändert und hochgeladen.

Es bleibt dabei, git kommt nicht zum Abschluss.

//EDIT
Sehe gerade, dass ich im NM googles Nameserver fest verdrahtet habe. Der andere DNS kanns nicht sein.


Lg scientific
Zuletzt geändert von scientific am 31.08.2017 11:34:29, insgesamt 1-mal geändert.
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Github hängt

Beitrag von scientific » 31.08.2017 12:53:09

Ich habs rausgefunden... Aber noch keine tragfähige Lösung.

Es ist firejail.

Und zwar ssh als Symlink /usr/local/bin/ssh -> /usr/bin/firejail

Im Dafaultprofil für ssh ist $Home mit noexec gekennzeichnet.
Ich habe das lokale git-Repo aber unter $HOME liegen.
Hab im Profil die noexec-Zeile mit Home auskommentiert, ging aber trotzdem noch nicht. Ohne firejail ssh aufgerufen funktioniert aber (Link gelöscht in /usr/local/bin)

Wie muss ich das ssh-Profil anpassen, dass firejail git beenden lässt?

Steh grad ein wenig an...

Lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Benutzeravatar
Profbunny
Beiträge: 592
Registriert: 04.04.2004 11:12:29
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Bautzen

Re: Github hängt

Beitrag von Profbunny » 01.09.2017 08:00:11

Welche Version von firejail hast du denn, bzw wie sieht dein Profil aus?
SO https://github.com/netblue30/firejail/b ... sh.profile?

Durch das tracelog müsstest du in der syslog / journal Eintrage sehen von firejail, wenn dein ssh versucht auf Sachen zuzugreifen,
auf die es nicht zugreifen darf. Ansonsten kommentiere ich alles aus und schalte es nacheinander wieder ein, so findet man am besten den schuldigen Part.
Rechner / Server Debian sid

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Github hängt

Beitrag von scientific » 01.09.2017 20:43:19

Hi!

Die Version ist

Code: Alles auswählen

# dpkg -l|grep firejail
ii  firejail                                                    0.9.48-2                                   amd64        sandbox to restrict the application environment
ii  firejail-profiles                                           0.9.48-2                                   all          profiles for the firejail application sandbox
Das Profil für ssh ist original vom Debian-Paket:

Code: Alles auswählen

# cat /etc/firejail/ssh.profile 
quiet
# Persistent global definitions go here
include /etc/firejail/globals.local

# This file is overwritten during software install.
# Persistent customizations should go in a .local file.
include /etc/firejail/ssh.local

# ssh client
noblacklist ~/.ssh
noblacklist /tmp/ssh-*
noblacklist /etc/ssh

include /etc/firejail/disable-common.inc
include /etc/firejail/disable-programs.inc
include /etc/firejail/disable-passwdmgr.inc

caps.drop all
ipc-namespace
netfilter
no3d
nogroups
nonewprivs
noroot
nosound
protocol unix,inet,inet6
seccomp
shell none
tracelog

private-dev
#private-tmp #Breaks when exiting

noexec ${HOME}
noexec /tmp
Wenn ich

Code: Alles auswählen

journalctl -f
mitlaufen lasse, während ich

Code: Alles auswählen

git push
ausführe, kommt gar nichts. Keine Fehlermeldung von firejail. Überhaupt nichts. Es hängt einfach nur, wie im OP mit strace gezeigt.

Hier bleibt es hängen:

Code: Alles auswählen

$ git push
Zähle Objekte: 3, Fertig.
Delta compression using up to 4 threads.
Komprimiere Objekte: 100% (3/3), Fertig.
Schreibe Objekte: 100% (3/3), 292 bytes | 0 bytes/s, Fertig.
Total 3 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
Währenddessen zeigt

Code: Alles auswählen

firejail --list

1490:root:firejail --list
2108:jakob:/usr/bin/firejail /usr/bin/anydesk --tray
2113:jakob:/usr/bin/firejail /usr/bin/hp-systray -x
11322:jakob:/usr/bin/firejail /usr/lib/firefox/firefox
32629:jakob:/usr/bin/firejail /usr/bin/ssh git@github.com git-receive-pack 'xundeenergie/xe-mailserver.git'
Ein Test mit den nacheinander wieder aktivieren Profil-Optionen ist noch ausständig.

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Github hängt

Beitrag von scientific » 01.09.2017 21:02:11

Und jetzt beobachte ich ein ganz seltsames Phänomen...

Habe alle Optionen in der ssh.profile auskommentiert und eins nach dem anderen wieder aktiviert und jedesmal dazwischen git push ausgeführt.
Jetzt kann ich plötzlich mit allen aktivierten Optionen den push durchführen... das was vorher nicht ging.
Und zwischenzeitlich gehts dann mal wieder nicht, da hängt git dann beim vorher beschriebenen Punkt.

Sehr seltsam.

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Github hängt

Beitrag von scientific » 01.09.2017 23:18:00

Jetzt habe ich einen Mechanismus feststellen können, der reproduzierbar den Hänger löst.

Wenn ich in /etc/firejail/ssh.profile alle Einträge bis auf die erste Zeile die nur "quiet" lautet auskommentiere, bleibt der Hänger bestehen, wenn ich

Code: Alles auswählen

git push
ausführe.
Kann alle wieder aktivieren, git hängt beim ssh-Befehl.

Kommentiere ich aber "quiet", beendet sich git push mit

Code: Alles auswählen

write(2, "fatal: protocol error: bad line "..., 55fatal: protocol error: bad line length character: ]0;
) = 55
exit_group(128)     
in strace.

Aktiviere ich quiet wieder in ssh.profile, funktioniert git push wieder ohne Probleme. Bis zum nächsten Sleep oder Reboot. Meistens. Jedenfalls ist es so, wenn git wieder hängt, "quiet" auskommentieren, einmal git push laufen lassen, quiet wieder aktivieren, ab da funktioniert git push wieder...

Ich hab keine Ahnung, wo ich da jetzt weitersuchen könnte...

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Github hängt

Beitrag von scientific » 01.09.2017 23:30:49

Hab noch weiterrecherchiert.

Also, wenn der ssh-Befehl in git hängt, kommt eine Fehlermeldung die z.B. so lautet:

Code: Alles auswählen

fatal: protocol error: bad line length character: Blac
ich habe jetzt herausgefunden, dass dies der Beginn von

Code: Alles auswählen

$ ssh git@github.com
Reading profile /etc/firejail/ssh.profile
Reading profile /etc/firejail/disable-common.inc
Reading profile /etc/firejail/disable-programs.inc
Reading profile /etc/firejail/disable-passwdmgr.inc
Parent pid 11991, child pid 11992
Blacklist violations are logged to syslog
Child process initialized in 35.84 ms
PTY allocation request failed
Hi XXXXXXXXXX! You've successfully authenticated, but GitHub does not provide shell access.
Shared connection to github.com closed.

Parent is shutting down, bye...
Also die Zeile mit "Blacklist violations are logged to syslog" verursacht beim Auskommentieren von "quiet" eine Fehlermeldung. Mit quiet hängt ssh einfach nur.
Nach der Reaktivierung von quiet ist die Blacklist violation offenbar verschwunden, und der ssh-Befehl läuft durch.

Übrigens, nachdem ich mich von Gnome abgemeldet habe und wieder anmelde, hängt der ssh-Befehl reproduzierbar wieder.

Die Blacklist violation ist übrigens nicht gelogged. Im Journal findet sich dazu nichts.

//EDIT
Ich habe gerade noch festgestellt, wenn ich mittels Auskommentieren von quiet in ssh.profile den Fehler provoziere, dann bleibt

Code: Alles auswählen

11022:jakob:/usr/bin/firejail /usr/bin/ssh git@github.com git-receive-pack 'xundeenergie/xe-ca-cert.git'
zurück.

Solange dieser Prozess besteht, funktionieren alle weiteren git-Befehle und ssh-Logins auf git@github.com.
Kille ich in dem Fall den Prozess 11022, dann hängt ein ssh git@github.com hier:

Code: Alles auswählen

$ ssh -v git@github.com
OpenSSH_7.4p1 Debian-10+deb9u1, OpenSSL 1.0.2l  25 May 2017
debug1: Reading configuration data /home/jakob/.ssh/config
debug1: /home/jakob/.ssh/config line 1: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: auto-mux: Trying existing master
debug1: Control socket "/tmp/git@github.com:22" does not exist
debug1: Connecting to github.com [192.30.253.113] port 22.
debug1: Connection established.
debug1: identity file /home/jakob/.ssh/id_rsa type 1
debug1: key_load_public: No such file or directory
debug1: identity file /home/jakob/.ssh/id_rsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/jakob/.ssh/id_dsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/jakob/.ssh/id_dsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/jakob/.ssh/id_ecdsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/jakob/.ssh/id_ecdsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/jakob/.ssh/id_ed25519 type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/jakob/.ssh/id_ed25519-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.4p1 Debian-10+deb9u1
debug1: Remote protocol version 2.0, remote software version libssh_0.7.0
debug1: no match: libssh_0.7.0
Authenticated to github.com ([192.30.253.113]:22).
debug1: setting up multiplex master socket
debug1: channel 0: new [/tmp/git@github.com:22]
debug1: control_persist_detach: backgrounding master process
debug1: forking to background
debug1: Entering interactive session.
debug1: pledge: id
debug1: multiplexing control connection
debug1: channel 1: new [mux-control]
debug1: channel 2: new [client-session]
debug1: Sending environment.
debug1: Sending env LC_MEASUREMENT = de_AT.UTF-8
debug1: Sending env LC_PAPER = de_AT.UTF-8
debug1: Sending env LC_MONETARY = de_AT.UTF-8
debug1: Sending env LANG = de_DE.UTF-8
debug1: Sending env LC_NUMERIC = de_AT.UTF-8
debug1: Sending env LC_TIME = de_AT.UTF-8
debug1: mux_client_request_session: master session id: 2
PTY allocation request failed
debug1: client_input_channel_req: channel 2 rtype exit-status reply 0
Hi XXXXXXXXXXXxxX! You've successfully authenticated, but GitHub does not provide shell access.
debug1: channel 2: free: client-session, nchannels 3
debug1: channel 1: free: mux-control, nchannels 2
Shared connection to github.com closed.
Die Verbindung wird beendet, aber ssh wird nicht fertig.
Ich sehe gerade, dass der ssh-Key nicht gefunden wird... Aber warum?

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Github hängt

Beitrag von scientific » 02.09.2017 00:14:49

So, jetzt habe ich den konkreten Übeltäter ausfindig machen können.

ssh baut zuerst einen Multiplexer-Socket auf. Wenn der vorhanden ist, funktioniert ssh mit firejail einwandfrei.
Wenn dieser Socket noch nicht vorhanden ist, wird er erstellt, und der ssh-Befehl hängt nach dem Ende der Session (wie im Log vorhin gezeigt).

Ich kann - solange eine "closed session" noch hängt, kann ich mich in einem zweiten Terminal per ssh wieder verbinden. Und die Verbindung läuft durch und beendet sich wieder.
Also scheint es so zu sein, dass firejail es unterbindet, dass die Connection in der selben Session wieder vewendet wird, bzw. dass dieses Control-Socket geschlossen wird. Wahrscheinlich sind in /tmp/ nur lese, aber keine execution-Rechte...

Kommentiere ich in /etc/firejail/ssh.profile die Zeile

Code: Alles auswählen

noexec /tmp
aber aus, ändert sich trotzdem nix am Verhalten.

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Github hängt

Beitrag von scientific » 02.09.2017 09:21:12

Es scheint, als ob Firejail verhindert, dass die Session mit dem Socket in den Hintergrund geschickt wird.

Hab mal als Würgaround

Code: Alles auswählen

 ControlPersists no
in ~/.ssh/config für github.com gesetzt.

Jetzt funktionierts wie gewollt.

Aber als Dauerlösung taugts mir nicht.

Lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Antworten