У меня есть несколько машин, которые я регулярно использую sudo su
в ssh, только для того, чтобы использовать оставшуюся часть моего сеанса в системе как пользователь специального назначения. Общий рабочий процесс:
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 с Full Login Shell я попробовал пару более экзотических вещей, таких как
ssh me@othermachine 'bash -l -c "sudo su - specialuser"'
а также
ssh me@othermachine 'bash -l -c "sudo su - specialuser"; bash'
- ни один из которых я ожидал работать, и они не работали, но я подумал, что я должен попробовать их для полноты (и чтобы избежать дубликата); они создали ту же оболочку без подсказок (вторая с добавленной бонусной оболочкой без подсказок для- me
после exit
от-за specialuser
). И я попробовал
ssh me@othermachine "sudo su - specialuser -c bash -l"
но это только у меня
sudo: no tty present and no askpass program specified
Лучшие идеи?
~/.profile
после небольшой задержки?sudo
я ударил^C
? Если я не могу придумать что-то лучшее, я мог бы попробовать это.su me
отspecialuser
. Или в.profile
или.bashrc
, если вы не последуетеsudo
сexit
, ваш первыйexit
вернет вас назадme
, а второй завершит сеанс. Или даже используйте файл флага, поэтомуsudo
перед ним стоит[ -f ~/.keep.me ] && del ~/.keep.me
и следует[ \! -f ~/.keep.me ] && exit
: вам нужен только сценарий или псевдоним для командыme
as:>~/.keep.me; exit
. Теперьexit
завершит сеанс иme
вернется к сеансу входа./bin/bash
а неbash
по соображениям безопасности (чтобы избежать трояна ). Особенно, если естьsudo
до ...Ответы:
Эта линия должна работать для вас
Это решение дает мне подсказку или нет в зависимости от
-t
переключателяПримечания от
man ssh
источник
RequestTTY force
(что равно-t
) иRemoteCommand sudo su - specialuser
! Однако следует помнить, что другие программы, использующие SSH (например, scp, rsync и т. Д.), Больше не будут работать должным образом для этого хоста.