[gull] ssh -> sudo

felix felix at f-hauri.ch
Wed Dec 14 17:41:06 CET 2022


Salut Céd!

Désolé pour le délai...

Attention: 
> ssh host-distant "sudo bash -c '$(declare -f uname_id); uname_id'"
ne fonctionnera que si la fonction ne contient pas d'apostrophe:

$ test() { echo 'Salut les amis';}
$ test
Salut les amis
$ ssh hotedistant "bash -c '$(declare -f test);test'"
les: -c: ligne 3: erreur de syntaxe : fin de fichier prématurée

Avec bash et ssh, on peut faire des trucs marrants:

$ ssh -t hotedistant /bin/bash <<"eof"
    sudo bash -c 'echo "uname : $(uname -n)";echo "id : $(id -un)"'
eof

Est peut être une solution! (Ne pas oublier les guillemets autour de <<"eof")!

Demo monitoring window11 ethernet issue:

J'ai un client Window11 qui à un problème de connection étrange:
 De temps en temps, il perds la connection vers le routeur.
 Il ne peut plus pinguer le routeur, alors que le serveur qui est à coté
 et sur le même réseau, il peut le pinguer!?

Je lui ai demandé de pinguer le routeur avec ``ping /t ip.du.routeur'' dans
une fenetre ``cmd'' et de la laisser en arrière plan.
Sur mon poste, j'ai tapé un truc du genre:

  $ exec {rti}<> <(:)
  $ exec {rto}<> <(
      exec stdbuf -i0 -o0 ssh -t -Jproxyssh root at routeur /bin/bash <&$rti 2>&1)

J'ai donc 2 FD: $rti pour envoyer des ordres au routeur et $rto pour lire les
réponses 

  $ echo >&$rti 'stdbuf -o0 tcpdump -ani eth1 ether host 12:34:56:78:9a:bc'

Je lance un tcpdump sur le routeur pour voire les trace de la machine en
question, puis

  $ while ! read -sn 1 -t .002 _ ;do
       read -rt 1.2 -u $rto line &&
           echo $line || {
           printf '\e[41;30m%(%c)T\n\e[0m';
           play -q /usr/share/sounds/sound-icons/gummy-cat-2.wav{,,,} 2>/dev/null
       }
    done

Cela m'affiche TOUTES les activités de la *machine* de et vers l'internet,
ainsi que les ping (ICMP echo et ICMP reply)...

Si une ligne met plus d'1.2 seconde à m'arriver, une ligne date et heure
apparait en rouge et un son bizarre se fait entendre...

Entre chaque ligne, si je presse une touche, la boucle s'arrête,
NE PAS UTILISER Ctrl-C car cela interompra le ssh!

Je peut alors copier-coller tranquillement le terminal, puis

je peux relancer la dernière commande (une longue ligne) en tapant [Cursor-Up]
et [Enter]. Les messages restent bufferisés par ssh et bash, ils apparaissent
alors tous avant de continuer a attendre 1 message..

Par contre, pour stopper la command tcpdump, je dois me reconnecter
et taper ``killall tcpdump''.

Le Thu, Dec 01, 2022 at 03:25:03PM +0100, Cédric BRINER via gull a écrit :
> j'ai finalement trouvé, du moins je crois:
> 
> ssh host-distant "sudo bash -c '$(declare -f uname_id); uname_id'"
> 
> C'est la classe totale !
> 

-- 
 Félix Hauri  -  <felix at f-hauri.ch>  -  http://www.f-hauri.ch


More information about the gull mailing list