Při výpadku SSH se neuloží historie

Při výpadku SSH se neuloží historie
« kdy: 25. 02. 2025, 12:17:32 »
Rád bych si automatizoval takovou věc, jak na klasickém linuxuvém serveru s bashem a sshd. Normálně mám ve svém profilu nastaveno uložení historie (append, ignoreboth, ignore dups, žádné post/pre skripty) - ale způsob a režim ukládání stejně nechci řešit v dotazu.

Chtěl při vzdálené práci přes ssh ( příkaz ssh bez commandu= implicitní shell) nastavit, aby při výpadku spojení se neuložila historie. Jde to nějak ? Co vím, například syslog u sshd to dokáže rozeznat, že po timeoutu ukončí a odhlásí a do syslogu  bude u PAM/sshd něco jako connection interrupted, disconnected due to inactivity. Takže to pozná

Asi, se nabízí řešení, nechat si ukládání historie vypnuté a před ukončení zařídit uložení historie... Ale co když zapomenu.. a taky je to otrava.  Nejde to nějak automatizovat? V spolupráci s detekcí sshd. (Na okraj, jsou 2 způsoby jak povolit/zabránit zápisu historie :1. výmaz proměnné  $HISTFILE /2 shopt -u -o history)


Re:ne uložení historie při výpadku ssh , jinak ano
« Odpověď #1 kdy: 25. 02. 2025, 12:22:56 »
nenabidnu reseni tohoto, ale na serveru mam tmux, takze o session neprijdu.

Re:Při výpadku SSH se neuloží historie
« Odpověď #2 kdy: 25. 02. 2025, 12:53:09 »
Moc nechápu, čeho se snažíte docílit. Ale asi jak chcípne ssh, tak chcípne bash a ten v tom okamžiku zapíše historii.

Takže zabránit chcípnutí? Jde to jednak po ssh pustit tmux/screen, jak tady již radili. Nebo místo ssh použít mosh. Já mám mosh+screen.

Re:Při výpadku SSH se neuloží historie
« Odpověď #3 kdy: 25. 02. 2025, 13:05:04 »
asi mluvíš o tom, že historii ukládá až po řádném zavření procesu, což není zabití procesu na timeout.

Doplň si do bash_profile třeba tohle:

Citace
shopt -s histappend
PROMPT_COMMAND='history -a;history -n'

Způsobí to, že se historie uloží okamžitě po každém příkazů a po každém příkazu to znovu načte historii ze souboru, tj. vidíš tam i věci z jiných session a násilné ukončení session ti nezpůsobí ztrátu historie.

Nebo používej jinej shell zsh, fish nebo použij něco co spravuje historii za tebe, např. https://github.com/atuinsh/atuin.


Re:Při výpadku SSH se neuloží historie
« Odpověď #4 kdy: 25. 02. 2025, 13:07:39 »
Ne ne,tímto směrem dotaz nemíří.POkud dojde k nenedálému ukončení bashi přes ssh, tak aby se neprovedl zápis historie. je proměnná TMOUT k něčemu dobrá? A já nechci řešit samotnou metodologii / režim ukládání  příkazů/multiplexing, stačí mi histappend,. Pouze řeším, aby se v těchto případech na historii nešahalo.


A bude tohle fungovat ? Nemá to háček, že už v okamžiku trap se historie zapíše?

návrh 1
export PROMPT_COMMAND='history -a; history -n; if [[ $? -ne 0 ]]; then history -c; fi'
if [[ $SSH_CONNECTION ]]; then
    export HISTFILE=/dev/null
fi
export TMOUT=600


návrh 2
if [[ $SSH_CONNECTION ]]; then
    trap 'history -c' EXIT INT TERM
fi

návrh 3
if [[ $SSH_CONNECTION ]]; then
    trap 'history -c' EXIT
 # nepřidat exit; ?
fi

návrh 4 -  >:(ruční   >:((v konfigu vypnout history)
shopt -s -o history před každým plánovaným ukončením
« Poslední změna: 25. 02. 2025, 13:11:49 od Ħαℓ₸℮ℵ ␏⫢ ⦚ »


Bugsa

  • ***
  • 138
    • Zobrazit profil
    • E-mail
Re:Při výpadku SSH se neuloží historie
« Odpověď #5 kdy: 25. 02. 2025, 13:13:32 »
Tohle mi smrdí pokusem o zahlazení stop po nelegální aktivitě na vzdáleném stroji když tě někdo killne...

M Z

Re:Při výpadku SSH se neuloží historie
« Odpověď #6 kdy: 25. 02. 2025, 13:25:35 »
Tak standardni reseni neukladani do historie je mezera na zacatku zadavaneho prikazu. Jen na to nesmis zapomenout  8).

PCnity

  • *****
  • 706
    • Zobrazit profil
    • E-mail
Re:Při výpadku SSH se neuloží historie
« Odpověď #7 kdy: 25. 02. 2025, 13:49:26 »
Tohle mi smrdí pokusem o zahlazení stop po nelegální aktivitě na vzdáleném stroji když tě někdo killne...
vacsina systemov je by default nakonfigurovana aby bash commandy so spaceom neukladal ($HISTCONTROL ignorespace, resp. ignoreboth). Aky by toto malo zmysel? Navyse ak by slo o zahladenie stop, otvoril by si dalsi session uplne bez historie a nasledne by ju manuale modifikoval ako len chce,

Re:Při výpadku SSH se neuloží historie
« Odpověď #8 kdy: 25. 02. 2025, 16:21:06 »
No v první řadě název tématu není "Při výpadku SSH se neuloží historie" (to je asi nějaký špatný AI překlad , kdy změna tvaru slovesa změní význam sdělení), jak bylo změněno, ale jak ji neukládat při této podmínce.  Aby bylo zabráněno dalšímu zmatení

A já už jsem psal (řešení, které se k tomu blíží, ale není to to pravé ořechové), asi prvním a třetím postu : ono by to šlo obrátit, že bych si nechal ukládáni historie defaultně vypnuté a ručně bych si před ukončením pokaždé ukládání historie zapnul. Docílil bych výsledku, na to ,co se ptám, akorát je to takové nekomfortní.

špekulanti , konspirátoři, kdyby šlo o nelegální aktivitu, co brání spustit unset HISTFILE hned na začátku

jo mezera na začátku řádku, fakt geniální. asi jako kupovat cihly na barák po jedné a každou balit do papíru a vybalovat.



Re:Při výpadku SSH se neuloží historie
« Odpověď #9 kdy: 25. 02. 2025, 17:07:54 »
hlavně spuštěné přikázy by se měly monitorovat přes něco jako auditd a neplnět na tom, že to shell sám někam zapíše, že jo.

Popravdě api po vysvětlení nerozumím tomu o co se snažíš.

Pokud chceš historii zapsat až se něco úspěšně povede. Tak změň cestu pro history soubor (třeba pomoci mktemp), nech aby to bash ukládal  tam a na konci si to appendni (cat $tmp >> $HISTFILE), to můžeš udělat třeba přes TRAP "cat $tmp >> $HISTFILE" EXIT a zavolá se ti to jen při řádném ukončení scriptu.