Portál AbcLinuxu, 7. května 2025 10:00

Dotaz: Přenesení proměnných ssh + 'sudo bash'

15.11.2019 15:32 majales | skóre: 29 | blog: Majales
Přenesení proměnných ssh + 'sudo bash'
Přečteno: 329×
Odpovědět | Admin
Ahoj, Snažím se odladit skript pro jenkins kde úspěšně používám tuto konstrukci:
ssh jenkins@IP BACKUPHOSTIP=$BACKUPHOSTIP 'bash -s' <<'ENDSSH'
hostnamectl
echo "IP adresa zálohovaného stroje je $BACKUPHOSTIP"
ENDSSH
což funguje a vypíše to obsah proměnné BACKUPHOSTIP.

Ovšem při podobném případu a použití sudo toto nefunguje ať se snažím jak se snažím:
ssh jenkins@IP BACKUPHOSTIP=$BACKUPHOSTIP 'sudo BACKUPHOSTIP=$BACKUPHOSTIP -u backupuser -i bash -s' <<'ENDSSH'
echo "1 IP adresa zálohovaného stroje je $BACKUPHOSTIP"
echo "2 IP adresa zálohovaného stroje je" ${BACKUPHOSTIP}
echo "3 IP adresa zálohovaného stroje je" ${BACKUPHOSTIP@Q}
ENDSSH
Výsledek je vždy prázdná proměnná. Nevěděl by někdo jak to vyřešit?

Konstrukci se bash STDIN používám protože by bylo nesnadné prát se se všemi těmi uvozovkami v uvozovkách.


Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

15.11.2019 15:57 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Přenesení proměnných ssh + 'sudo bash'
Odpovědět | | Sbalit | Link | Blokovat | Admin
  1. man sudoers: Hledej hesla variable a env_reset.
  2. Pro úplnost (což ale není tento případ): v man ssh_config je SendEnv a v man sshd_config je AcceptEnv. To se taky může hodit, kdyby šlo o předávání proměnných z lokálního shellu skrz SSH na druhou stranu.
15.11.2019 17:06 majales | skóre: 29 | blog: Majales
Rozbalit Rozbalit vše Re: Přenesení proměnných ssh + 'sudo bash'
Bohuže ani varianta s -E nezabrala.

ssh jenkins@IP BACKUPHOSTIP=$BACKUPHOSTIP 'sudo BACKUPHOSTIP=$BACKUPHOSTIP -E -u backupuser -i bash -s' <<'ENDSSH'

dává stejné výsledky jako předchozí pokusy
16.11.2019 00:17 jejda | skóre: 25 | blog: jejda
Rozbalit Rozbalit vše Re: Přenesení proměnných ssh + 'sudo bash'
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nemělo by to sudo být ve zdvojených uvozovkách? V jednoduchých uvozovkách ty proměnné shell nerozbalí.
16.11.2019 03:42 debian+
Rozbalit Rozbalit vše Re: Přenesení proměnných ssh + 'sudo bash'
Odpovědět | | Sbalit | Link | Blokovat | Admin
Premenna pre jeden prikaz sa definuje spravne pred prikazom a nie medzi parametre prikazu (to ze ssh funguje je bonus). A ano, ako pise vyssie s uvodzovkami. Ta cas prikazu. Cez siet sa posielaju retazce textu. Nie, ako zvlast prikaz s lokalnimi premennami a zvlast hodnoty tych premennych.

Tj. spravne je:
ssh USER@IP "BACKUPHOSTIP=$BACKUPHOSTIP sudo -u backupuser -i bash -s" <<'ENDSSH'
echo "1 IP adresa zálohovaného stroje je $BACKUPHOSTIP"
echo "2 IP adresa zálohovaného stroje je" ${BACKUPHOSTIP}
echo "3 IP adresa zálohovaného stroje je" ${BACKUPHOSTIP@Q}
ENDSSH
alebo ak chces zdoraznit, ze predtym bola definovana:
BACKUPHOSTIP=$BACKUPHOSTIP; ssh USER@IP "BACKUPHOSTIP=$BACKUPHOSTIP sudo -u backupuser -i bash -s" <<'ENDSSH'
echo "1 IP adresa zálohovaného stroje je $BACKUPHOSTIP"
echo "2 IP adresa zálohovaného stroje je" ${BACKUPHOSTIP}
echo "3 IP adresa zálohovaného stroje je" ${BACKUPHOSTIP@Q}
ENDSSH
Inac, prikaz set vypise vsetky aktualne premenne shellu.
17.11.2019 00:20 majales | skóre: 29 | blog: Majales
Rozbalit Rozbalit vše Re: Přenesení proměnných ssh + 'sudo bash'
Ahoj díky za snahu, ale mě to nefunguje..
root@notebook:/# BACKUPHOSTIP="2.3.4.5"
root@notebook:/# BACKUPHOSTIP=$BACKUPHOSTIP;echo $BACKUPHOSTIP; ssh USER@IP "echo $BACKUPHOSTIP;BACKUPHOSTIP=$BACKUPHOSTIP sudo -u backupuser -i bash -s"
2.3.4.5
2.3.4.5
echo $BACKUPHOSTIP

^Croot@notebook:/#
ta proměnná je prázdná.. nepřejde přes to sudo dle všeho. Nakonec jsem to odescapoval, nebylo to tak hrozné..
Řešení 1× (majales (tazatel))
Josef Kufner avatar 17.11.2019 00:43 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Přenesení proměnných ssh + 'sudo bash'
Odpovědět | | Sbalit | Link | Blokovat | Admin
man sudo:
     --preserve-env=list
                 Indicates to the security policy that the user wishes to add
                 the comma-separated list of environment variables to those pre‐
                 served from the user's environment.  The security policy may
                 return an error if the user does not have permission to pre‐
                 serve the environment.
Hello world ! Segmentation fault (core dumped)
17.11.2019 00:56 majales | skóre: 29 | blog: Majales
Rozbalit Rozbalit vše Re: Přenesení proměnných ssh + 'sudo bash'
Ano, to zabralo zdá se..
echo $BACKUPHOSTIP
2.3.4.5
Děkuji.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.