У меня около 30 почти идентичных серверов CentOS 6, на которые мне нужно автоматически выгружать обновленные файлы конфигурации с помощью ключа rsa для входа в систему как root. Обычно это будет просто rsync, но иногда может потребоваться запуск команд на серверах, поэтому также потребуется ssh. Поскольку это будет запущено как скрипт для обновления всех 30 серверов, я не хочу иметь парольную фразу на ключе.
У меня эта часть работает отлично. Я создал ключ rsa, добавил его в authorized_keys для root, так что я могу подключаться к серверам по ssh или rsync без необходимости вводить пароль.
Я настроил authorized_keys на прием ключа только с одного имени хоста, что должно сделать эту настройку относительно безопасной. Однако я все еще не совсем уверен в этом, поэтому хотел бы настроить его на отправку письма на наш общий почтовый ящик техподдержки каждый раз, когда используется этот ключ.
Много раз я буду входить на эти серверы как я сам и пытаться получить права root. Это нормально, и я не хочу спамить почтовый ящик техподдержки каждый раз, когда кто-то из нас входит в систему. Я хочу получать письма только при использовании ключа SSH.
Вот что у меня есть на данный момент на сервере server1[по 30].example.com:
cat /root/.ssh/authorized_keys
from="pusher.example.com",environment="SSHKEY=1" ssh-rsa AAAAB3NzaIwAAAxetcetc== root@pusher
tail -n 3 /root/.bash_profile
if [[ "${SSHKEY}" == "1" ]] ; then
echo 'Either we are getting hacked, or somebody used the SSH key on pusher to push something out to ' `hostname` ' at ' `date` | mail -s "WARNING - ROOT SSH KEY USED ON `hostname`!" [email protected]
fi
Это отлично работает для SSH. Если я вхожу в систему как я и запускаю su, чтобы получить права root, я не получаю письмо, но если я войду в pusher и выполню:
ssh -i /root/.ssh/server1.pri server1.example.com
Я получаю письмо. Проблема в отправке файлов. Если я запускаю что-то из:
scp -i /root/.ssh/server1.pri /tmp/file.txt server1.example.com:/tmp/
rsync -e 'ssh -i /root/.ssh/server1.pri' /tmp/test.txt server1.example.com:/tmp/
Я до сих пор не получил письмо.
Есть ли способ, не полагаясь на bash_profile, настроить отправку электронного письма всякий раз, когда ключ используется для чего угодно? (Или, в качестве альтернативы, только если он используется для scp или rsync, и я ограничу ключ только для их запуска?)
решение1
Вы можете злоупотреблять /root/.ssh/rcдля ваших целей (см. man sshd) и включите mailx
туда команду.
решение2
~/.bash_profile используется, если bash вызывается как интерактивная оболочка входа. ~/.bashrc используется для оболочек без входа. Однако использование этого файла не является надежным, поскольку злоумышленник может потребовать, чтобы файлы инициализации оболочки вообще не читались.
решение3
Из справочной страницы sshd, раздел «authorized_keys»:
команда="команда"
Указывает, что команда выполняется всякий раз, когда этот ключ используется для аутентификации. Команда, предоставленная пользователем (если таковая имеется), игнорируется. Команда выполняется на pty, если клиент запрашивает pty; в противном случае она выполняется без tty. Если требуется 8-битный чистый канал, нельзя запрашивать pty или следует указать no-pty. В команду можно включить кавычку, заключив ее в кавычки с обратной косой чертой. Эта опция может быть полезна для ограничения определенных открытых ключей для выполнения только определенной операции. Примером может быть ключ, который разрешает удаленное резервное копирование, но ничего больше. Обратите внимание, что клиент может указать пересылку TCP и/или X11, если они явно не запрещены. Команда, изначально предоставленная клиентом, доступна в переменной среды SSH_ORIGINAL_COMMAND. Обратите внимание, что эта опция применяется к выполнению оболочки, команды или подсистемы. Также обратите внимание, что эта команда может быть заменена либо директивой ForceCommand sshd_config(5), либо командой, встроенной в сертификат.
Вы можете добавить эту опцию к своему ключу, так же как вы добавили опции «from» и «environment»:
cat /root/.ssh/authorized_keys
from="pusher.example.com",environment="SSHKEY=1" ssh-rsa AAAAB3NzaIwAAAxetcetc== root@pusher