Я нанял удаленного консультанта для настройки моих серверов. Я не уверен на 100% в том, чтобы дать ему пароль root и позволить ему делать на серверах все, что он хочет. В идеале я хочу видеть все, что он делает с моими серверами (в реальном времени), а также найти способ не сообщать ему пароль root.
Есть ли какие-нибудь передовые методы, позволяющие удаленному консультанту получить доступ к вашему серверу?
РЕДАКТИРОВАТЬ: Чтобы уточнить, я хочу сделать своего рода демонстрацию экрана с консультантом. Есть ли какой-либо метод, с помощью которого его команды проходят через мою учетную запись без получения пароля?
PS: Мои серверы на Ubuntu 9.10
Вместо того, чтобы предоставлять ему пароль root, используйте sudo.
Если вы хотите видеть все, что он делает в реальном времени как суперпользователь, ознакомьтесь с судош2. Из документов:
Sudosh - это фильтр оболочки аудита, который может использоваться как оболочка входа в систему. Судош записывает все нажатия клавиш и вывод и может воспроизводить сеанс как на видеомагнитофоне.
«Все нажатия клавиш» включают в себя нажатия клавиш с обратного пробела, символы удаления, «стираемое слово» BASH и т. Д. Вы можете наблюдать за чьими-то смущающими опечатками и исправлениями и т. Д.
Sudosh будет поддерживать системный журнал, и вы можете отправлять журналы на удаленный сервер системного журнала. Это гарантирует, что пользователь не сможет стереть все копии журналов аудита.
Обратите внимание, что исходный проект судошь (первая версия) была заброшенный его автор. судош2 жив-здоров.
Вы можете позволить ему подключиться к обычной учетной записи, а затем контролировать его сеанс SSH. На мой взгляд, решение на основе экрана является лучшим и позволит вам заниматься «парным» системным администрированием. Например, он может вводить команды sudo, а вы вводите пароль, если он нужен.
P.S. Если вы используете screen, это не значит, что вам также не следует использовать судош2 или другие решения.
Это действительно зависит от того, какой уровень доступа вы хотите предоставить ему / ей. Я бы никогда не включил удаленный вход в систему root. Только «обычные» учетные записи должны иметь удаленный доступ, затем настройте sudo для всего, что нужно этому человеку.
Во-первых, у вас должны быть четко определены цели того, что вы хотите, чтобы он делал. Как только эти цели определены, вы можете предоставить ему уровень доступа, необходимый для достижения этих целей.
Это как бросить мою машину в ремонтную мастерскую и сказать им «починить». Следующее, что вы знаете, у меня есть счет на тысячи долларов, и они сделали то, чего я не хотел и о чем не просил.
Я добавляю еще один, другой ответ в ответ на ваше обновление.
Используя экран GNU, вы можете поделиться экраном с другим пользователем. Это означает, что он может вводить команды, и вы видите все, что он набирает. Вы можете вводить команды, и он может видеть, что вы вводите. Когда ему будет предложено ввести пароль, вы можете ввести пароль, но содержимое пароля не выводится на экран (Примечание: хотя текст не выводится на экран, я не уверен, сможет ли другой пользователь получить доступ для ваших нажатий клавиш каким-либо другим способом, или иметь доступ к буферу нажатия клавиш и т. д.).
Больше информации на http://www.debian-administration.org/article/Using_GNU_screen%27s_multiuser_feature_for_remote_support
Другое предложение: заранее измените пароль root на временный. Когда он уйдет, восстановите пароль root до исходного пароля.
Если вы разрешаете доступ к вашему серверу только с открытым ключом, но без пароля для входа, вы можете в любой момент отозвать право доступа, удалив ключ, который вы дали консультанту.
Как предлагал Кристиан Чупиту, на машине экран GNU должен обеспечивать все необходимые функции. Если вы хотите добавить дополнительного комфорта, вам может помочь Sudosh2, но ваша история оболочек и распечатка экрана могут помочь вам воспроизвести команды позже ...
Я нашел действительно классный способ предоставить одноразовый доступ другому пользователю ... путем совместного использования вашей собственной сессии.
Это решение основано на сопроцессы bash. Идея такая:
ssh
на сервер, используя ваши учетные данныеnc
список серверов на порту 2222Подписывайтесь на меня :)
Запустите сопроцесс ssh и опубликуйте его ввод-вывод на локальном порту 2222:
$ coproc ssh user@server -tt
$ eval "exec nc -kl 0.0.0.0 2222 <&${COPROC[0]} >&${COPROC[1]}"
Установите [ngrok]. Получите токен авторизации со своего сайта:
$ npm install ngrok -g
$ ngrok authtoken <token> # grab it from their website:
Опубликуйте свой порт 2222 в Интернете:
$ ngrok tcp 2222
Forwarding tcp://0.tcp.ngrok.io:16135 -> localhost:2222
Теперь скажите другу подключиться к серверу с помощью telnet:
$ telnet 0.tcp.ngrok.io 16135
Не оставляйте соединение открытым слишком долго; это совсем не безопасно! :)
Теперь давайте посмотрим, что ваш друг делает на этом сервере, используя общие сеансы tmux. Как это:
$ ssh user@host -t -- tmux new -As shared-session
это запускает именованный сеанс, к которому может подключиться каждый. Воспользуемся этим в нашем сценарии:
$ coproc ssh user@server -tt -- tmux new -As shared-session
$ eval "exec nc -kl 0.0.0.0 2222 <&${COPROC[0]} >&${COPROC[1]}"
$ ngrok tcp 2222
Forwarding tcp://0.tcp.ngrok.io:16135 -> localhost:2222
теперь вы подключаетесь к этому сеансу, чтобы посмотреть, что там делают люди:
$ ssh user@server -t -- tmux new -As shared-session
теперь скажи своему другу подключиться к нему
$ telnet 0.tcp.ngrok.io 16135
Смотри внимательно :) Как он начинает печатать rm -rf /*
, закройте первое окно терминала!
Если сеанс завершается, вы можете автоматически перезапустить его. Положи все coproc && eval
вещь в while true ; do ... done
петля