ssh + sudo + su в оболонку входу


11

У мене є кілька машин, на які я регулярно натрапляю, лише з метою проведення sudo suрешти мого сеансу, який увійшов у систему як якийсь користувач спеціального призначення. Загальний робочий процес:

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

Я хотів би закинути це в одне вкладиш, яке я можу псевдонімом, тому я можу просто встановити псевдонім для кожної машини і дістатися туди, де мені потрібно, в одній команді, без необхідності набирати sudo su - specialuserкотельну плиту. Я міг би , можливо , встановити me@othermachineна sudo suвході в систему, але я хотів би зберегти гнучкість , щоб працювати , як meякщо мені потрібно.

( Примітка. Я не маю ніякого контролю над othermachineтим, як він налаштований; це усталений робочий процес, до якого я прийшов, коли мене найняли.)

Перша моя думка була просто

ssh me@othermachine "sudo su - specialuser"

і подібний вид працює, але мене це не підказує, ^Cвбиває його і реєструє мене, і я припускаю, що різні речі також, мабуть, помиляються.

Прочитавши команду Run Remote ssh з програмою Shell Full Login, я спробував ще кілька екзотичних речей, таких як

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

і

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

- жоден з яких я не розраховував працювати, і вони цього не зробили, але я подумав, що я повинен спробувати їх для повноти (і щоб уникнути наближення); вони створили ту саму оболонку без підказок (друга з доданою бонусною оболонкою без підказок для meпісля exit-ing від тієї для specialuser). І я спробував

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

але це мене просто дістало

sudo: no tty present and no askpass program specified

Кращі ідеї?


Що з додаванням команди sudo ~/.profileпісля короткої затримки?
Олексій

Ідея полягає в тому, що у випадковому випадку я не хочу, щоб sudoя потрапив ^C? Якщо я не можу придумати нічого кращого, я б спробував це.
Девід Молес

1
Ви могли su meз specialuser. Або в .profileабо .bashrc, якщо ви не слідувати sudoз exit, вашим першим exitдоставлять вас назад me, з другим до кінця сесії. Або навіть використовувати файл прапора, тому sudoйому передує [ -f ~/.keep.me ] && del ~/.keep.meта супроводжується [ \! -f ~/.keep.me ] && exit: тоді вам потрібен лише сценарій або псевдонім для команди meяк :>~/.keep.me; exit. Зараз exitзавершиться сеанс і meповернеться до вашого сеансу входу.
AFH

1
Запропонуйте написати в остаточній версії /bin/bashі не просту bashз міркувань безпеки (щоб уникнути трояну ). Особливо, якщо є sudoраніше ...
Hastur

Відповіді:


11

Ця лінія повинна працювати для вас

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

Це рішення дає мені підказку чи не залежно від -tвимикача

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

Примітки від man ssh

-t
Виділення псевдо-тти. Це можна використовувати для виконання довільних екрано-програмних програм на віддаленій машині, що може бути дуже корисно, наприклад, під час реалізації служб меню. Опції з декількома параметрами змушують розподіляти tty, навіть якщо ssh не має локальних tty .


Це працює для мене ... чи можна це зробити і через налаштування для ~ / .ssh / config?
ей

1
@ де, так, ви можете це зробити за допомогою RequestTTY force(що дорівнює -t) і RemoteCommand sudo su - specialuser! Однак майте на увазі, що інші програми, які використовують SSH (наприклад, scp, rsync тощо), більше не працюватимуть належним чином для цього хоста.
Роберт Рідл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.