Sziasztok,
ssh-n keresztül kellene scripteket futtatnom mindenféle szervereken, de amit futtatni akarok rajtuk az sokszor csak sudo-val elérhető, pl.:
sshpass -p $password ssh StrictHostKeyChecking=no chx@serverfqdn ARG1=$ARG1 ARG2=$ARG2 'bash -s' < local_script.sh | tee -i /tmp/myscript17.out
ahol local_script.sh:
#!/bin/bash
# the below commands 'll run on remote host
hostname -f
command1 -parameter1
command2 -parameter2
sudo su - user2 -c "/home/user2/bin/command3 -parameter3"
sudo su - user3 -c "/home/user3/bin/command4 -parameter4"
exit 0
Csodálatosan működik, változókat át lehet passzolni, a futás eredménye visszajön szépen a gépemre. Csak a sudo-s része nem akar működni, és sajna van olyan amit csak sudo-val tudok futtatni.
pl.: sudo su - user2 -c "/home/user2/bin/command3 -parameter3"
nak kellene jelszót passzolnom (a szerverre belépve természetesen át tudok váltani userX-re), amit próbáltam az: echo $password | sudo -S su - user2 -c "/home/user2/bin/valami.sh"
ez visszatér azzal hogy: sudo: sorry, you must have a tty to run sudo
ssh-nak próbáltam megadni -t, -tt paramétereket, de ugyanaz az eredmény. sudoers módosítás (NOPASSWD:) sajnos nem játszik, az sem hogy az én userem belekerüljön userX groupjába, az sem hogy root crontabból fussanak a scriptek, az sem hogy expect-et feltegyék az OS-ekre (hogy én interaktív módot tudjak vele szimulálni).
Mindenképpen sudo-val kell megoldanom a problémát. Bárkinek bármilyen tapasztalat ezzel? Valahogy csak oda lehet passzolni a jelszót neki...
Hozzászólások
sudoers-ből requiretty kikommentelése nem opció sajna
sudo -A (askpass) szintén nem opció
____________________
echo crash > /dev/kmem
Az sem opció, hogy egyetlen userre kikapcsolod a requiretty-t?
# ez az eredeti sor
Defaults requiretty
# username felhasznalo kivetel
Defaults:username !requiretty
Nem opció, tényleg megfutottam minden ilyen kört, sudoers-t, SSH kulcsosdit, expect-et feltenni, mindent. Semmit ilyesmit nem enged a policy, masszívan semmit.
Egyetlen opció hogy ssh-n áttolom a scriptjeim, és valahogy jelszót passzolok sudo-nak.
____________________
echo crash > /dev/kmem
"sudoers módosítás (NOPASSWD:) sajnos nem játszik"
pedig ez a hivatalos módja. A sudoers fájlban azt is megmondhatod,hogy melyik programot tudja csak futtatni az adott user.
Esetleg ssh-copy-id az adott user alá és akkor nem kell sudo, meg az egész kavarás:)
Szia, céges policy nem engedi sudoers-t így módosítani. ssh-copy-id meg csak a bejelentkezéshez elég, attól még sudo-hoz kell jelszó. A target usereknek nincs shell-je.
____________________
echo crash > /dev/kmem
Nem érted mire gondolok.
Te vagy user1 ssh-copy-id user2@server
utána kulccsal mehetsz user2 nevében azon a gépen, mintha user2 lennél.
No igen - de ha az user2-nek nincs shell-je, akkor azért annyira mégsem kerek a történet. Márpedig az előző hsz szerint nincs neki.
Akkor sudoval sincs nem? Vagy rosszul gondolom? sudo su - user2 esetén betölti a felhasználó környezetét is (shell, környezeti változók stb.).
Szerintem egyszerűbb lenne a szabályokon változtatni , mint újra felfedezni a spanyol viaszt :)
"ssh-copy-id user2@server" ehhez kellene user2 jelszava, de nincs neki. OS supportot megkérdeztem hogy esetleg odatennék-e a kulcsot, de nem szabad. Ezek speciális app ID-k, ha van kulcs az finding és leszedik.
____________________
echo crash > /dev/kmem
http://stackoverflow.com/questions/19164222/su-pass-password-to-script
Szintén NOPASSWD: az meg nem fog menni.
____________________
echo crash > /dev/kmem
Nincsen semmifele NOPASSWD, hanem hasznald a sudo -S -et.
Ez nekem mukodik rendesen:
ssh $User@$Host "echo password | sudo -S ifup eth2"
Hasznalhatod az sshpass-t is.
Itt már kiveséztük, ez működik ha egy parancsot adsz ki, de ha egy scriptet tolsz át ssh-n, a scripten _belül_ a sudo -S vagy sudo -A már nem működik.
____________________
echo crash > /dev/kmem
Érdekes így viszont működik:
sshpass -p $password ssh -t -o StrictHostKeyChecking=no lab1@lab1 'echo ****** | sudo -S su - testuser1 -c "whoami"'
A sudo -S előtti password nem változóban van, ez baj mert el kell rejteni valahogyan. A másik probléma hogy ezzel minden egyes parancs előtt nyitni kell egy ssh session-t.
Ugyanez a forma:
'echo ****** | sudo -S su - testuser1 -c "whoami"'
nem működik ha scriptben van, azaz 'bash -s' < script.sh
____________________
echo crash > /dev/kmem
Menni kell scriptből is, a lényeg hogy használd a '-t' opciót az ssh-nél:
Elsőre én is a "-t -t" opciókat akartam javasolni, de ott van a felvezetőben, hogy azzal sem ment. Mondjuk ki nem próbáltam.
Így van, ha csak egy parancsot küldök át akkor "sudo -S" működik szépen, ha scriptet küldök át akkor ugyanaz a "sudo -S" a scriptben már nem működik.
Olyan mintha a pseudo tty elveszne amikor scriptet küldök át.
____________________
echo crash > /dev/kmem
> A sudo -S előtti password nem változóban van, ez baj mert el kell rejteni valahogyan.
Juteszembe:
"parancssori paramétert tölt ki (fájlból, sztenderd inputból, környezeti változóból) és kérésre el is tünteti."
http://hup.hu/node/112266#comment-1429559
Köszi, bookmarked.
____________________
echo crash > /dev/kmem
A sudo -A opcioja egy olyan askpass-sal, ami kb ebbol all? :
read X
echo "$X"
exit
Direktben a szerverre belépve működik:
[lab1@lab1 /]$ export SUDO_ASKPASS=/home/lab1/askpass
[lab1@lab1 /]$ cat /home/lab1/askpass
#!/bin/bash
X=qete1353
echo "$X"
exit
[lab1@lab1 /]$ sudo -A ls
bin boot dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[lab1@lab1 /]$ sudo -A su - testuser1 -c "whoami"
testuser1
[lab1@lab1 /]$
Viszont ssh-n keresztül küldve már nem:
#!/bin/bash
# commands to run on remote host
export SUDO_ASKPASS="/home/lab1/askpass"
hostname -f
echo $SUDO_ASKPASS
sudo -A su - testuser1 -c "whoami"
exit 0
ssh-n átküldve ezt kaptam még az elején:
Pseudo-terminal will not be allocated because stdin is not a terminal.
Az a gyanúm (ahogy feljebb is írtam) hogy a pseudo tty megszűnik létezni ha:
ssh -t -o StrictHostKeyChecking=no lab1@lab1 'bash -s' < script.sh
____________________
echo crash > /dev/kmem
kicsit olyan ez a topik, mint a Kétbalkezesek
Én lennék a legboldogabb ha hozzányúlhatnék sudoers-hez. Tudom mi a precíz megoldása a problémának, csak az tiltott.
Egyéb építő jellegű javaslatot szívesen veszek :-)
____________________
echo crash > /dev/kmem
Keress másik munkahelyet:)
Viccet félretéve:
Ez a tipikus esete a paranoid cégnek, ahol alap dolgokat nem használhatsz. Nekik kell nem neked, ezt kell megértetni velük, vagy dobj egy ticket-et a support-nak,hogy van egy ilyen probléma és mi a megoldás. Ha azt írják,hogy nem lehet megcsinálni,akkor told a főnök orra elé, hogy nem hogy Te ,de ők sem tudják megoldani. :)
"Probléma esetén kérdezd meg a supportot.
De én vagyok a support."
Próbáltam :-) A célszerű megoldások (NOPASSWD: pl.) adottak, én is meg tudnám reszelni sudoers-t, OS support meg főleg, de a policy nem engedi.
Ami még eszembe jutott hogy scp-n scriptet feltol, lefuttat, töröl, de hát ugye az hogy 'sudo /tmp/myscript.sh' megint csak tiltott.
Security van, kérem...
____________________
echo crash > /dev/kmem
", de a policy nem engedi."
Ezen van a hangsúly. Változtatni kell a policy-n.A policy azért van,hogy a céget védje,de nem a cég elől.
+1
értemén, hogy a gépesíthető munkát nem akarod kézzel elvégezni nx annyi idő alatt, de akkor is, ha az a cél, hogy kitöltsed/kitöltsék valamivel a munkaidődet, akkor inkább tanuljon az ember, amíg a gépek dolgoznak.
Szóseróla: egy helyen tőlem is elvárták volna, hogy fejlesztőként reggel 8-valameddig ott üljek. Nem is tartott sokáig.
expect
Nem játszik sajna, tiltott.
____________________
echo crash > /dev/kmem
ahonnan kezdemenyezed az ssh-t ott is? csak van egy host ahonnan be tudsz lepni es van expect. ha nincs akkor igy jaras tipikus esete. ahogy fentebb olvastam eleg gyorsan fogynak a lehetosegek...
subscribe
------------------------------------------------------------------------------
www.woodmann.com/searchlores/welcome.htm
Ha több kettőnél ez marad:
sshpass -p qete1353 ssh -t -o StrictHostKeyChecking=no lab1@lab1 'echo qete1353 | sudo -S "echo"; echo qete1353 | sudo -S su - testuser1 -c "whoami"; echo qete1353 | sudo -S su - testuser2 -c "whoami"; echo qete1353 | sudo -S su - testuser3 -c "whoami"' | tee -i /tmp/log.out
...ahol "whoami" helyett majd a megfelelő parancsok / scriptek szerepelnek.
Nem szép de sorban lefutnak a parancsok a target user nevében, és egyetlen ssh session-ön belül. Igaz így az output (/tmp/log.out) egy ömlesztett valami lesz, viszont ezt már utólag is fel lehet dolgozni.
Sánta de legalább biztosan célba ballag.
____________________
echo crash > /dev/kmem
szép munka.
(taps)