giriş kabuğu içine ssh + sudo + su


11

Düzenli olarak sadece sudo subirkaç özel amaçlı kullanıcı olarak giriş yaptığım oturumumun geri kalanını harcamak için kullandığım birkaç makinem var. Genel iş akışı:

mymachine:~ me$ ssh me@othermachine
othermachine:~ me$ sudo su - specialuser # note: no password needed
othermachine:~ specialuser$ # do stuff

Bunu, takma ad kullanabileceğim tek bir astar içine kaynatmak istiyorum, böylece her makine için bir takma ad ayarlayabilir ve sudo su - specialuserkazan plakasını yazmak zorunda kalmadan tek bir komutta olmam gereken yere gidebilirim . Belki kurmak olabilir me@othermachineiçin sudo sugiriş yapıldığında, ama ben gibi çalışmaya esneklik tutmak istiyorum meben gerekirse.

( Not: Herhangi bir kontrolüm othermachineveya kurulum şeklim yok; bu işe alındığımda geldiğim yerleşik bir iş akışı.)

İlk düşüncem sadece

ssh me@othermachine "sudo su - specialuser"

ve bu tür işler, ama istem almıyorum, ^Cöldürüyor ve oturumu kapatıyorum ve diğer birçok şeyin de muhtemelen yanlış olduğunu varsayıyorum.

Tam Giriş Kabuğu ile Uzaktan Kumanda ssh komutunu okuduktan sonra ,

ssh me@othermachine 'bash -l -c "sudo su - specialuser"'

ve

ssh me@othermachine 'bash -l -c "sudo su - specialuser"; bash'

- hiçbiri çalışmayı beklemiyordum, ama yapmadılar, ama onları tamlık için denemem gerektiğini düşündüm (ve kopya kadar yakın olmamak için); aynı derhal daha az mermi ürettiler (ikincisi , diğerinden mesonra için ilave bir ikramiye exitiçermeyen mermi ile birlikte specialuser). Ve denedim

ssh me@othermachine "sudo su - specialuser -c bash -l"

ama beni yakaladı

sudo: no tty present and no askpass program specified

Daha iyi fikirler?


~/.profileKısa bir gecikmeden sonra sudo komutunu eklemeye ne dersiniz ?
Alex

Fikir garip durumda sudovurmak istemiyorum olmasıdır ^C? Daha iyi bir şey bulamazsam bunu deneyebilirim.
David Moles

1
Yapabilirsin su medan specialuser. Ya içinde .profileya .bashrc, sen takip etmezsen sudoile exit, ilk exitgeri götürecek meoturumunu bitirmek için ikinci bir ile. Ya da bir bayrak dosyası kullanın, bunun sudoöncesinde [ -f ~/.keep.me ] && del ~/.keep.meve arkasından gelir [ \! -f ~/.keep.me ] && exit: komut meolarak yalnızca bir komut dosyasına veya takma ada ihtiyacınız vardır :>~/.keep.me; exit. Şimdi exitoturumunuzu sonlandıracak ve oturum oturumunuza megeri dönecektir.
AFH

1
Güvenlik nedeniyle /bin/bashbasit bir son değil , son sürümünüzde yazmayı düşünün bash( truva atını önlemek için ). Özellikle daha sudoönce varsa ...
Hastur

Yanıtlar:


11

Bu hat sizin için çalışmalı

ssh -t me@machine "sudo su - specialuser" 

Bu çözüm, -tanahtara bağlı olarak bana bir istem veya değil

ssh -t me@machine "/bin/bash -l"   # Give me a prompt

ssh  me@machine "/bin/bash -l"     # Give me NO prompt
ssh  me@machine                    # Give me NO prompt

Tarafından gönderilen notlar man ssh

-t
Yalancı tty ayırmayı zorla. Bu, uzak bir makinede, örneğin menü hizmetlerini uygularken çok yararlı olabilecek, rastgele ekran tabanlı programlar yürütmek için kullanılabilir. Birden fazla -t seçeneği, ssh yerel tty olmasa bile tty ayırmayı zorlar .


Bu benim için çalışıyor ... ana bilgisayara özgü ~ / .ssh / config ayarıyla da yapılabilir mi?
hey

1
@ yerde, evet bunu yapabilirsiniz RequestTTY force(eşittir -t) ve RemoteCommand sudo su - specialuser! Ancak, SSH kullanan diğer programların (scp, rsync gibi) artık bu ana bilgisayar için düzgün çalışmadığını unutmayın.
Robert Riedl
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.