Portál AbcLinuxu, 7. května 2025 10:00
ssh jenkins@IP BACKUPHOSTIP=$BACKUPHOSTIP 'bash -s' <<'ENDSSH' hostnamectl echo "IP adresa zálohovaného stroje je $BACKUPHOSTIP" ENDSSHcož 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} ENDSSHVý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:
man sudoers
: Hledej hesla variable
a env_reset
.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.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} ENDSSHalebo 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} ENDSSHInac, prikaz set vypise vsetky aktualne premenne shellu.
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é..
--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.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.