GNU/Linux >> Tutoriels Linux >  >> Linux

Empêcher ssh de briser les paramètres du script shell

Basé sur la réponse de Peter Lyons, mais autorisez également les guillemets à l'intérieur des arguments :

#!/bin/bash
QUOTE_ARGS=''
for ARG in "[email protected]"
do
  ARG=$(printf "%q" "$ARG")
  QUOTE_ARGS="${QUOTE_ARGS} $ARG"
done

ssh [email protected] "printf ${QUOTE_ARGS}"

Cela fonctionne pour tout ce que j'ai testé jusqu'à présent, à l'exception des retours à la ligne :

$ /tmp/wrap_printf "[-%s-]" "hello'\$t\""
[-hello'$t"-]

#!/bin/sh
QUOTE_ARGS=''
for ARG in "[email protected]"
do
  QUOTE_ARGS="${QUOTE_ARGS} '${ARG}'"
done
ssh [email protected] "${QUOTE_ARGS}"

Cela fonctionne pour les espaces. Cela ne fonctionne pas si l'argument a un guillemet simple intégré.


Obtenir des citations correctes est assez difficile et le faire en bash (de manière générale et robuste) presque impossible.

Utiliser Perl :

#!/usr/bin/perl
use Net::OpenSSH;
my $ssh = Net::OpenSSH->new('[email protected]');
$ssh->system('printf', @ARGV);

Linux
  1. Ssh - Script Shell pour se connecter à un serveur Ssh ?

  2. Comment détecter si le shell est contrôlé depuis Ssh ?

  3. Shell Script Wrapper pour empêcher l'exécution de la commande sans arguments ?

  4. Empêcher Tmux de démarrer sur Ssh ?

  5. Comment puis-je ftp et télécharger des fichiers à partir d'un script shell UNIX

Comment empêcher SSH d'expirer

Comportement inattendu d'un script shell ?

Empêcher Sigint d'atteindre les processus enfants ?

D'où est exécuté un script Shell ?

Comment exécuter des scripts Python à partir du shell

Utilisation de la commande passwd à partir d'un script shell