SSH, аутентификация по ключам, ssh-keygen, ssh-agent
В нескольких предыдущих статьях данного раздела, мы более-менее раскрыли тему протокола SSH, настройку и использование SSH сервера и SSH клиента в операционной системе FreeBSD. В данной статье хотелось-бы рассказать об SSH аутентификации на основе пар ключей, заодно рассмотреть остальные программы из пакета программного обеспечения, протокола SSH, под FreeBSD. Итак, нужно это в первую очередь для удобства, при удаленном администрировании серверов, не нужно вводить пароль при каждом подключении, и в определенной степени более безопасно, нежели подключаться к удаленной машине только по паролю.
- С помощью программы ssh-keygen, должна быть сгенерирована пара ключей, публичный ключ ( public key ) и приватный ключ ( private key )
- Секретный ключ, всегда остается у клиента и никому никогда не показывается.
- Публичный ключ копируется на удаленный SSH сервер ( говорим опять-же в контексте операционной системы FreeBSD ) и кладется в специальный файл, известный SSH серверу. По-умолчанию, для хранения публичных ключей, используется файл ~/.ssh/authorized_keys. Файл для хранения ключей назначается в файле конфигурации SSH сервера, директивой AuthorizedKeysFile
- Клиент, отправляет SSH серверу свой публичный ключ и запрашивает аутентификацию по данному ключу.
- Сервер проверяет файл ~/.ssh/authorized_keys, если такой ключ найден, SSH сервер отправляет клиенту сообщение, зашифрованное найденным публичным ключом пользователя.
- Клиент должен расшифровать сообщение с помощью своего приватного ключа, если приватный ключ защищен паролем ( а так и должно быть всегда, в целях безопасности ), программа ssh, попросит пользователя ввести пароль, что-бы сначала расшифровать сам ключ.
- Если сообщение расшифровано, правильность публичного и приватного, ключей, считается подтвержденной и пользователю предоставляется доступ в систему.
Генерация ключей с помощью программы ssh-keygen.
Для создания и управления ключами, предназначена программа ssh-keygen, так-же входящая в пакет программного обеспечения OpenSSH. Полный список опций можно как всегда посмотреть командой man ssh-keygen. Здесь приведу лишь несколько из них: -t type ssh-keygen, работает с тремя типами ключей.
Как настроить ssh agent через systemd сервис
Возможные значения: RSA 1 — для протокола SSH версии 1. RSA — для протокола SSH версии 2. DSA — для протокола SSH версии 2. -b Длина ключа в битах. RSA — минимальная длина, 768 бит, длина ключа по-умолчанию, 2048 бит. DSA — длина 1024 бита. -i Данная опция используется для импорта ключей из одного формата ( например ключи сгенерированные программой PuTTYgen, для Windows ), в формат OpenSSH. -l Посмотреть отпечаток секретного ключа ( fingerprint ). -p Изменить секретную фразу приватного ключа. Сгенерируем пару RSA ключей, это рекомендуемый формат, как наиболее устойчивый к взлому. По-умолчанию, ключи, сохраняются в домашнюю директорию пользователя, в файлы ~/.ssh/id_rsa — приватный ( секретный ) ключ, и ~/.ssh/id_rsa.pub — публичный ключ.
Работа с SSH в Windows 10 и Linux. Генерация ключей
Вот собственно и все, сгенерирована пара ключей RSA, с длиной 4096 бит и сохранены в файлы /root/.ssh/id_rsa и /root/.ssh/id_rsa.pub.
Настройка SSH сервера на аутентификацию по открытому ключу.
SSH сервер естественно должен быть настроен на аутентификацию по ключам, приведу кусок, касающийся аутентификации, своего файла конфигурации, SSH сервера. Все что закомментировано в файле конфигурации SSH, отсюда убрал, для простоты восприятия:
PermitRootLogin yes Данная директива нужна, если вы планируете работать под учетной записью root. PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys RhostsRSAAuthentication no HostbasedAuthentication no PermitEmptyPasswords no UseLogin no
Теперь копируем публичный ключ на удаленный SSH сервер:
vds-admin /root/.ssh# cat id_rsa.pub | ssh 192.168.50.50 «cat >> ~/.ssh/authorized_keys»
Так как для копирования вы подключаетесь к SSH серверу, он запросит пароль, авторизацию по ключам-то мы еще не настроили. ) Я работал под учетной записью root, а без явного указания имени пользователя в командной строке или в конфигурационном файле SSH клиента, подключение происходит с именем текущего пользователя, то есть мне нужно было ввести пароль пользователя root, удаленной системы. После ввода пароля, публичный ключ будет добавлен в конец файла ~/.ssh/authorized_keys, так как мы подключаемся пользователем root, то путь ~/.ssh/authorized_keys указывает на директорию /root/.ssh/authorized_keys. Ключи сгенерированы и скопированы на SSH сервер, сервер соответствующим образом настроен, пробуем подключится:
vds-admin /root/.ssh# ssh 192.168.50.50 Enter passphrase for key ‘/root/.ssh/id_rsa’: Здесь вводим нашу секретную фразу, указанную при генерации ключей.
Если пароль на ключ введен верно, получаем доступ в удаленную систему.
Обратите внимание на следующий момент, с приведенным выше вариантом конфигурации SSH сервера, при неудачной аутентификации по ключам, например если неправильно ввести секретную фразу ключей, будет предложена аутентификация по паролю. Что-бы изменить это поведение и например вообще не пускать пользователя root иначе, как по ключам, можно изменить в конфигурационном файле сервера, значение директивы PermitRootLogin с yes на without-password.
Использование программы ssh-agent
Как было сказано выше, в целях безопасности, приватный ключ, всегда должен быть защищен секретной фразой ( паролем ), но это вызывает некоторые неудобства, вам придется вводить секретную фразу, каждый раз когда вы подключаетесь к удаленному серверу по ключу, было-бы гораздо проще ввести пароль на ключ один раз и пользоваться им сколько потребуется. На этот случай в пакете OpenSSH, существуют специальные программы ssh-agent и ssh-add, в общем-то вторая является дополнением первой.
Как это работает. Поле запуска программы ssh-agent, в нее добавляются расшифрованные ключи, то есть при добавлении она запросит секретную фразу ключа, для его дешифровки, и далее ssh-agent, будет выдавать уже расшифрованные ключи по запросу, например программе SSH. Запускать ssh-agent, можно двумя способами, со специальной опцией, говорящей, какой тип оболочки используется, или с помощью команды eval. Принципиальной разницы как его запускать, нет, просто в случае с опцией, вы должны точно знать, какую оболочку вы используете. ssh-agent -c Если в качестве оболочки используется С — Shell ssh-agent -s Если в качестве оболочки используется Bourne Shell eval `ssh-agent` В таком варианте запущенный ssh-agent, будет передан команде eval, которая выполнит его в текущей оболочке. Обратите внимание, используются обратные кавычки а не обычные ! Итак, запускаем ssh-agent:
vds-admin /root/.ssh# eval `ssh-agent` Agent pid 1982
При запуске, ssh-agent создает переменные окружения, проверим какие:
vds-admin /root/.ssh# env | grep SSH_A SSH_AUTH_SOCK=/tmp/ssh-7EeitdI5mr/agent.1981 В этой переменной хранится сокет, через который программа ssh, будет связываться с ssh-agent. SSH_AGENT_PID=1982 Это PID процесса ssh-agent
Теперь нужно поместить в него расшифрованные ключи, делается это с помощью программы ssh-add. Если запустить ее без аргументов, будут добавлены все ключи, найденные в стандартных местах их обитания, то есть будут просканированы следующие файлы, ~/.ssh/identify, ~/.ssh/id_rsa и /.ssh/id_dsa. Если ключ защищен парольной фразой, программа попросит ввести ее, что-бы расшифровать ключ и загрузить уже готовый к применению.
vds-admin /root/.ssh# ssh-add Enter passphrase for /root/.ssh/id_rsa: Запрос пароля на расшифровку Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
Теперь пробуем подключиться к удаленному SSH серверу:
vds-admin /root/.ssh# ssh 192.168.50.50 Last login: Tue Jul 7 18:45:27 2009 from .host. Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD 7.1-STABLE (SMP_KERNEL) #1: Tue Mar 10 18:14:59 UTC 2009 Welcome to FreeBSD!
Как видите пароль у нас больше никто не спрашивает, программа SSH, получает уже расшифрованный ключ от ssh-agent и мы успешно подключаемся к удаленному SSH серверу. Посмотреть отпечатки загруженных в ssh-agent ключей, можно той-же командой ssh-add с опцией -l, или целиком ключи, опцией -L.
vds-admin /root/.ssh# ssh-add -l 4096 56:79:b5:61:ea:19:70:13:a4:67:a2:af:15:11:db:b5 /root/.ssh/id_rsa (RSA) vds-admin /root/.ssh# ssh-add -L ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAgEArL0hIMmhw8rXeg0p72+EJXnC4iAY2XTkPAdTb3LnQb9bc0E5wvd cwCdNEtLlDIDCH+z0I1FaP3TfpvgVkv59X15TaNIeoB7uydqXvlLMOxpOJkfbc3eiA6a07PvZHMKXcIA0ZZ9+j12u l+HsGOK2qMQ5g52mOc6BOF1PVuoHfTR1C9nExv5UCA6h7e/v2wxq79pMW07nx7nshB5/1n5Gnyx+toQEzRiFbf zOJBB1ry/9NUF1DiBwOhKJVdEJBTUi0hyh/e77UAmVtkguEtjrsDEdxJ31sV21SL97EZHymMjRPjwU2nWjRkHf0Pi7 dlXBoCKRj3dQps38kwFd3m9Tu4+hXSnsF8FdxkX5y9XmN8Uz8UWR6O2zslr7xZubkDR3aCq1dtcbu2nkvC4+Vy TOxEdnaNqDlC6U6G6aUVKFc0Rb5dcPnqpKqUHWE8MlXq/obKMRjuSz+GOr1VgRe/wZM7/0GoO1Xrv2MDMhS+ S1uR+XkHkQr/EjTSxPiDZ92snZhtiyPIzTUZDOmclWHbe4gyvxDtU3Lxqzl3t1+Murg4sN1NrkZIHefMq2xeCOS8P bI89b3zJG2PJ3i2PSsOMviqIBOL3BBskGSWksJKi/YvvKwrlKaSM10wMZTbXHomgu+6jRd7cZtUOmU/FO0IoKejB MwuYbcPC+TCWBks0phU= /root/.ssh/id_rsa
Загружен один ключ, по которому мы подключались к удаленной машине. Кроме этого, при запуске ssh-add, можно указать путь до конкретного ключа, который необходимо загрузить, например:
vds-admin /root/.ssh# ssh-add /root/.ssh/id_rsa.new1 Enter passphrase for /root/.ssh/id_rsa.new1: Identity added: /root/.ssh/id_rsa.new1 (/root/.ssh/id_rsa.new1) Проверяем, что у нас теперь в ssh-agent: vds-admin /root/.ssh# ssh-add -l 4096 56:79:b5:61:ea:19:70:13:a4:67:a2:af:15:11:db:b5 /root/.ssh/id_rsa (RSA) 2048 68:81:38:fe:66:e8:05:88:8b:49:80:d2:d1:8b:bf:99 /root/.ssh/id_rsa.new1 (RSA) Загружено уже 2 ключа
Удаляются ключи из ssh-agent, так-же просто как и добавляются, для этого используется опция -d, без параметров, для удаления стандартных ключей, опция -d файл_ключа, если нужно удалить конкретный ключ, или опция -D, для удаления всех ключей, например:
vds-admin /root/.ssh# ssh-add -l 4096 56:79:b5:61:ea:19:70:13:a4:67:a2:af:15:11:db:b5 id_rsa (RSA) 2048 68:81:38:fe:66:e8:05:88:8b:49:80:d2:d1:8b:bf:99 id_rsa.new1 (RSA) 2048 c7:9f:b1:3b:c1:d0:61:15:38:27:d1:36:a7:49:55:cd id_rsa.new2 (RSA) vds-admin /root/.ssh# ssh-add -d id_rsa.new2 Identity removed: id_rsa.new2 (id_rsa.new2.pub) vds-admin /root/.ssh# ssh-add -l 4096 56:79:b5:61:ea:19:70:13:a4:67:a2:af:15:11:db:b5 id_rsa (RSA) 2048 68:81:38:fe:66:e8:05:88:8b:49:80:d2:d1:8b:bf:99 id_rsa.new1 (RSA) vds-admin /root/.ssh# ssh-add -D All identities removed. vds-admin /root/.ssh# ssh-add -l The agent has no identities.
Приведу список самых используемых опций программы ssh-add: ssh-add Без опций, добавляются стандартные ключи ssh-add имя файла Добавляются конкретный ключ -l Показывает отпечатки всех загруженных в данный момент ключей -L Посмотреть список самих ключей -D Из ssh-agent, будут удалены все ключи -d имя файла Удаляет конкретный ключ -t Установить время жизни ключей, через данный промежуток времени ключи будут выгружены. -x Заблокировать ssh-agent паролем -X Разблокировать ssh-agent Что-бы закрыть ssh-agent, можно вызвать его c опцией -k, ну или на крайний случай прибить сигналом, например kill -QUIT PID, но это крайняя мера и при корректном запуске, это не потребуется:
vds-admin /root/.ssh# ssh-agent -k unsetenv SSH_AUTH_SOCK; unsetenv SSH_AGENT_PID; echo Agent pid 1982 killed;
Как видите произошел обратный процесс, переменные очищены, процесс убит.
Форвардинг ssh-agent
- Клиент ssh c Local_host, подключается к SSH серверу, Remote_host, и запрашивает форвардинг для ssh-agent
- Сервер SSH, /usr/sbin/sshd, хоста Remote_host, создает сокет в /tmp/ssh-XXXXXXX/agent.##### и устанавливает переменную окружения SSH_AUTH_SOCK, присваивая ей путь к сокету.
- Когда нам понадобится подключиться к следующему серверу, ( мы сейчас на сервере Remote_host ), SSH клиент хоста Remote_host, обращается по пути, лежащему в переменной SSH_AUTH_SOCK, то есть к сокету.
- SSH сервер, находящийся на другом конце сокета /tmp/ssh-XXXXXXX/agent.#####, передает данные из ssh, сервера Remote_host, на ssh-agent, запущенный на хосте Local_host. Вся работа с ключами происходит на машине Local_host а не на машинах, на которых вы регистрируетесь в процессе работы.
- Теперь с хоста Remote_host, вы можете подключиться к хосту Next_remote_host, используя ключи, загруженные в ssh-agent, на хосте Local_host.
Программа PuTTy, клиент SSH под Windows.
- putty.exe — Программа, SSH, Telnet, Rlogin клиент;
- puttygen.exe — Утилита для генерации и конвертации ключей;
- pageant.exe — Аналог программы ssh-agent;
- plink.exe — Клиент SSH, Telnet и Rlogin для командной строки;
- pscp.exe — Программа командной строки для безопасного копирования SCP/SFTP
- psftp.exe — Интерактивный SFTP клиент для командной строки;
Источник: vds-admin.ru
Как удалить вирус ssh-agent
Большинство антивирусных программ распознает ssh-agent.exe как вирус.
Бесплатный форум с информацией о файлах поможет вам найти информацию, как удалить файл. Если вы знаете что-нибудь об этом файле, пожалуйста, оставьте комментарий для других пользователей.
Вот так, вы сможете исправить ошибки, связанные с ssh-agent.exe
- Используйте программу Настройщик Windows, чтобы найти причину проблем, в том числе и медленной работы компьютера.
- Обновите программу OpenSSH Authentication Agent. Обновление можно найти на сайте производителя (ссылка приведена ниже).
- В следующих пунктах предоставлено описание работы ssh-agent.exe.
Информация о файле ssh-agent.exe
Процесс OpenSSH Authentication Agent принадлежит программе OpenSSH for Windows от неизвестно.
Описание: ssh-agent.exe не является важным для Windows и часто вызывает проблемы. Файл ssh-agent.exe находится в подпапках «C:UsersUSERNAME». Известны следующие размеры файла для Windows 10/11/7 295,936 байт (33% всех случаев), 385,665 байт, 69,632 байт или 382,114 байт.
У процесса нет видимого окна. Нет информации по файлу. Это не системный процесс Windows. Ssh-agent.exe способен спрятать себя. Поэтому технический рейтинг надежности 72% опасности.
Если ssh-agent.exe находится в подпапках «C:Program Files», тогда рейтинг надежности 78% опасности. Размер файла 385,698 байт (50% всех случаев) или 88,576 байт. Приложение не видно пользователям. Нет информации о создателе файла. Это не системный файл Windows. ssh-agent.exe представляется сжатым файлом.
Важно: Вы должны проверить файл ssh-agent.exe на вашем компьютере, чтобы убедится, что это вредоносный процесс. Мы рекомендуем Security Task Manager для безопасности вашего компьютера.
Комментарий пользователя
Пока нет комментариев пользователей. Почему бы не быть первым, кто добавить небольшой комментарий и одновременно поможет другим пользователям?
Лучшие практики для исправления проблем с ssh-agent
Следующие программы так же полезны для грубокого анализа: Security Task Manager исследует активный процесс ssh-agent на вашем компьютере и явно говорит, что он делает. Malwarebytes’ — популярная антивирусная утилита, которая сообщает вам, если ssh-agent.exe на вашем компьютере отображает назойливую рекламу, замедляя быстродействие компьютера. Этот тип нежелательной рекламы не рассматривается некоторыми антивирусными программами в качестве вируса и таким образом не удаляется при лечении.
Чистый и аккуратный компьютер является ключевым требованием для избежания проблем с ПК. Это означает: проверка на наличие вредоносных программ, очистка жесткого диска, используя cleanmgr и sfc /scannow, удаление программ, которые вам больше не нужны, проверка Автозагрузки (используя msconfig) и активация Автоматического обновления Windows. Всегда помните о создании периодических бэкапов, или как минимум о создании точек восстановления.
Если у вас актуальная проблема, попытайтесь вспомнить последнее, что вы сделали, или последнюю программу, которую вы установили, прежде чем проблема появилась первый раз. Используйте resmon команду, чтобы определить процесс, который вызывает у вас проблему. Даже если у вас серьезные проблемы с компьютером, прежде чем переустанавливать Windows, лучше попробуйте восстановить целостность установки ОС или для Windows 8 и более поздних версий Windows выполнить команду DISM.exe /Online /Cleanup-image /Restorehealth. Это позволит восстановить операционную систему без потери данных.
ssh-agent сканер
Security Task Manager показывает все запущенные сервисы Windows, включая внедренные скрытые приложения (например, мониторинг клавиатуры или браузера, авто вход). Уникальный рейтинг надежности указывает на вероятность того, что процесс потенциально может быть вредоносной программой-шпионом, кейлоггером или трояном.
Бесплатный aнтивирус находит и удаляет неактивные программы-шпионы, рекламу, трояны, кейлоггеры, вредоносные и следящие программы с вашего жесткого диска. Идеальное дополнение к Security Task Manager.
Reimage бесплатное сканирование, очистка, восстановление и оптимизация вашей системы.
Источник: www.filecheck.ru
HackWare.ru
Этичный хакинг и тестирование на проникновение, информационная безопасность
SSH (ч.1): Что такое SSH. Утилиты SSH
Оглавление
Что такое и для чего нужен SSH
SSH — это набор программ, которые позволяют выполнить вход на удалённую машину для выполнения команд на ней. Он предназначен для обеспечения защищённой зашифрованной связи между двумя узлами через незащищённую сеть. Соединения X11, произвольные порты TCP и сокеты домена UNIX также могут быть переадресованы по защищённому каналу. В SSH входят программы, которые дополнительно позволяют передавать файлы по зашифрованному соединению.
SSH несёт в себе различные улучшения безопасности, среди них аутентификация пользователя/хоста, шифрование данных и целостность данных, благодаря чему невозможны популярные атаки вроде подслушивания (сниффинга), DNS/IP спуфинга, подделка данных (data forgery), перехват соединения (connection hijacking) и т. д. Пользователям ftp, telnet или rlogin, которые используют протокол, передающий данные в виде открытого текста, крайне рекомендуется переключиться на SSH.
OpenSSH — это реализация с открытым исходным кодом протокола SSH, позволяющая шифровать соединение в сети посредством набора программ. Если вам хочется иметь SSH на Linux, вы можете установить OpenSSH, который состоит из сервера OpenSSH и клиентских пакетов.
Технология работает по принципу сервер-клиент. То есть на удалённой машине, на которой вы хотите выполнять команды, нужно запустить сервер OpenSSH. К этому серверу можно подключаться с помощью клиентов OpenSSH. На одном компьютере могут быть одновременно установлены и сервер и клиент. Их запуск и настройка выполняется независимо друг от друга.
Утилиты SSH
К серверным утилитам OpenSSH относятся:
- sshd (OpenSSH Daemon) — программа демон для ssh. sshd ожидает подключений от клиентов.
- sftp-server (серверная подсистема SFTP) — это программа, которая участвует в передачи файлов по протоколу SFTP. sftp-server не предназначен для прямого вызова, обычно она задействуется автоматически демоном sshd.
Итак, на сервере основного внимания требует sshd, а программа sftp-server будет запущена автоматически по мере необходимости.
К клиентским утилитам OpenSSH относятся:
- ssh (клиентская программа SSH) — это программа для выполнения входа на удалённую машину и выполнения команд на этой удалённой машине.
- scp — программа для копирования файлов на удалённую машину с локальной, или в обратном направлении — с локальной на удалённую. При передаче данных используется зашифрованный канал.
- sftp — это тоже программа для передачи файлов по безопасному каналу. Эта программа похожа на ftp.
- ssh-keygen — утилита для создания ключей аутентификации и управления ими. Также она может использоваться для отзыва ключей.
Это основные программы, которые могут понадобиться большинству пользователей для создания ключей, подключения к удалённой машине и при удалённом копировании файлов.
Следующие утилиты присутствуют в пакете OpenSSH, но не требуют от пользователя явного запуска или применяются редко:
- ssh-add — добавляет приватный ключ к агенту аутентификации.
- ssh-agent — это программа для хранения закрытых ключей, используемая для аутентификации с открытым ключом (RSA, DSA, ECDSA, Ed25519). ssh-agent обычно запускается в начале сеанса X или сеанса входа в систему, а все другие окна или программы запускаются как клиенты для программы ssh-agent. Благодаря использованию переменных среды агент может быть найден и автоматически использован для аутентификации при входе на другие машины с использованием ssh.
- ssh-keyscan — это утилита для сбора открытых ключей хоста SSH с нескольких хостов. Она была разработана для помощи в создании и проверке файлов ssh_known_hosts. ssh-keyscan предоставляет минимальный интерфейс, подходящий для использования скриптами оболочки и perl.
- ssh-keysign — используется ssh для доступа к ключам локального хоста и генерирования цифровой подписи, необходимой во время аутентификации на основе хоста. ssh-keysign отключена по умолчанию и может быть включена только в глобальном файле конфигурации клиента /etc/ssh/ssh_config, если для EnableSSHKeysign установлено значение «yes». ssh-keysign предназначена не для вызова пользователем, а из ssh.
- ssh-copy-id — использует локально доступные ключи для авторизации на удаленном компьютере.
Как установить OpenSSH
Для некоторых конфигураций служба OpenSSH установлена и включена по умолчанию. Как правило, это относится к системам, к которым затруднительно получить доступ иным способом, кроме как по SSH. Например, на хостингах VPS (виртуальных частных серверов) устанавливаемые системы практически всегда даже в минимальной конфигурации уже имеют установленную и запущенную службу SSH, поэтому после развёртывания нового сервера, клиенту достаточно подключиться используя присланные учётные данные.
В образах для ARM компьютеров, которые зачастую не имеют дисплея, как правило служба OpenSSH уже установлена и запущена.
В Debain и производных (Kali Linux, Linux Mint, Ubuntu), программы OpenSSH можно установить по отдельности, например, имеются пакеты для клиента и для сервера openssh-client и openssh-server. Либо можно установить метапакет ssh, который содержит и клиентскую, и серверную часть.
sudo apt install ssh
В Arch Linux клиент и сервер OpenSSH собраны в один пакет. Для установки OpenSSH в Arch Linux выполните:
sudo pacman -S openssh
В других дистрибутивах Linux поищите пакет openssh или ssh.
Управление службой OpenSSH
Клиент ssh запускается самим пользователем по мере необходимости.
Запуск службы OpenSSH требуется только на сервере.
OpenSSH поставляется с файлами служб systemd (смотрите также «Как использовать Systemctl для управления службами Systemd и юнитами») двух видов:
Таким образом, если вы хотите воспользоваться первой моделью (демон SSH всегда активен), то для запуска службы и добавления её в автозагрузку наберите следующие команды:
sudo systemctl start sshd.service sudo systemctl enable sshd.service
Они добавят демона SSH в автозагрузку и запустят его прямо сейчас.
Для второй модели (запуск SSH только по требованию), сделайте так:
sudo systemctl start sshd.socket
sudo systemctl enable sshd.socket
Для проверки статуса службы:
systemctl status sshd.service
Либо если вы используете сокет:
systemctl status sshd.socket
Обратите внимание, что в разных дистрибутивах служба может называться ssh или sshd, следовательно, в приведённых выше и далее командах, используйте имена:
Как проверить журнал событий SSH службы
События SSH можно разделить на события:
- запуска и остановки этой службы
- события, связанные с подключением пользователей
Просмотреть логи SSH можно различными способами, один из вариантов (помните, что в некоторых системах служба называется ssh.service, без буквы d):
journalctl -u sshd.service
Например, для вывода последних 100 записей:
journalctl -u sshd.service | tail -n 100
Также можно просмотреть события SSH с помощью:
journalctl /usr/bin/sshd
Универсальная команда в независимости от имени службы:
journalctl -u «ssh*»
Для вывода событий, связанных с подключением пользователей, другой информации, в том числе отладочной (зависит от настройки уровня подробности сообщений), можно посмотреть следующим образом:
journalctl | grep -i ssh
Как увидеть неудачные попытки входа SSH
Если настроен вход по паролю, то для вывода неудачных попыток наберите команду:
journalctl | grep -i ‘Failed password for’
Если настроен вход по публичному ключу, но не отключена возможность входа по паролю, то после неверного ключа, будет предоставлена возможности войти по паролю. Такие неудачные попытки входа по паролю можно найти такой же командой:
journalctl | grep -i ‘Failed password for’
При неудачной попытке входа из-за неверного ключа, при уровне вербальности (LogLevel) по умолчанию (INFO) специальные сообщения не записываются в журнал. Подобные неудачные попытки можно обнаружить по записи «Connection closed by authenticating user», но она означает отключение на этапе аутентификации, независимо от способа аутентификации — по паролю или по ключу.
Если установить уровень вербальности на VERBOSE, то в журнале можно будет найти записи о неудачных попытках входа с помощью публичного ключа следующей командой:
journalctl | grep -i ‘Failed publickey for’
Подробнее об этой настройке во второй часте.
Как просмотреть журнал подключений пользователей SSH
Чтобы показать подключения, когда вход был сделан по паролю:
journalctl | grep -i ‘Accepted password for’
Чтобы показать подключения аутентификации по публичному ключу:
journalctl | grep -i ‘Accepted publickey for’
Другой вариант просмотреть историю входов, это использовать следующую команду:
last
Связанные статьи:
- SSH (ч.5): Копирование файлов с помощью scp и sftp (80.8%)
- SSH (ч.4): Создание и настройка ключей OpenSSH (64.3%)
- SSH (ч.2): Настройка сервера OpenSSH (61.5%)
- Введение в IPv6 адреса: как пользоваться и как исследовать сеть (часть 2) (60.1%)
- SSH (ч.3): Как подключиться к SSH. Настройка клиента OpenSSH (53.3%)
- VNC в Linux: настройка сервера и клиента (RANDOM — 50.4%)
факультете информационной безопасности от GeekBrains? Комплексная годовая программа практического обучения с охватом всех основных тем, а также с дополнительными курсами в подарок. По итогам обучения выдаётся свидетельство установленного образца и сертификат. По этой ссылке специальная скидка на любые факультеты и курсы!
Источник: hackware.ru
какова цель ssh-agent?
ssh-agent — это программа для хранения закрытых ключей, используемая для аутентификации с открытым ключом (RSA, DSA, ECDSA). Идея состоит в том, что ssh-agent запускается в начале сеанса X или сеанса входа в систему, а все другие окна или программы запускаются как клиенты для программы ssh-agent. Благодаря использованию переменных среды агент может быть найден и автоматически использован для аутентификации при входе на другие машины с использованием ssh (1).
«. программа для хранения закрытых ключей ..» — ИМХО — ключи ssh генерируются пользователем с помощью команды ssh-keygen и просто и просто хранятся в ~ / .ssh — зачем мне нужен демон для хранения этих ключей? Как именно они их хранят? Разве они не хранятся в .ssh?
«запускаются как клиенты к программе ssh-agent» — не понимаю. Где это нужно? Я обычно просто использую ssh как это:
Что именно означает «клиенты» — какие клиенты? Разве вы не просто запускаете команду ssh из терминала для подключения — какие есть другие клиенты и почему они не могут просто использовать путь к этому приватному файлу ssh, как команда ssh?
Агент SSH обрабатывает подпись данных аутентификации для вас. При аутентификации на сервере вы должны подписать некоторые данные, используя свой закрытый ключ, чтобы доказать, что вы, в общем-то, вы.
В качестве меры безопасности большинство людей разумно защищают свои закрытые ключи парольной фразой, поэтому любая попытка аутентификации потребует от вас ввода этой парольной фразы. Это может быть нежелательно, поэтому ssh-agent кеширует ключ для вас, и вам нужно ввести пароль только один раз, когда агент захочет его расшифровать (и зачастую даже не так, поскольку ssh-agent может быть интегрирован с pam, что делают многие дистрибутивы).
Агент SSH никогда не передает эти ключи клиентским программам, а просто представляет сокет, по которому клиенты могут отправлять ему данные и по которому он отвечает подписанными данными. Дополнительным преимуществом этого является то, что вы можете использовать свой закрытый ключ даже с программами, которым вы не полностью доверяете.
Еще одно преимущество агента SSH заключается в том, что его можно пересылать через SSH. Поэтому, когда вы пересылаете своего агента по ssh на хост A, вы можете затем перешагнуть ssh с A на другой хост B без необходимости присутствия вашего ключа (даже в зашифрованном виде) на хосте A.
Я чувствую, что это самый полный ответ, но все еще не хватает одного пункта. Использование ключевого агента также позволяет легко использовать несколько ключей. Вместо того, чтобы указывать путь к ключу, при использовании ключевого агента ssh будет пробовать каждый ключ в нем.
поэтому можно предположить, что в ssh-agent этом нет необходимости, если закрытый ключ не защищен парольной фразой?
Преимущество ssh-agent заключается в том, что вам нужно ввести пароль только один раз. Если ваш закрытый ключ RSA не зашифрован парольной фразой, тогда ssh-agent не требуется. Команда ssh будет примером клиента.
Если вы регулярно ssh ИНГ в различных машинах, каждый со своим собственным ключом и ключевую фразу, а затем работает ssh-agent позволяет ввести ключевую фразу для каждого ключа один раз 1 в начале сеанса , а затем вы можете проверить подлинность каждой машине столько раз , как вам нравится без необходимости повторного ввода вашей парольной фразы.
Еще одним преимуществом является то, что, согласно man странице, агент никогда не отправляет закрытый ключ по своему каналу запроса; поэтому, если вы переключаетесь между разными окнами, ваши закрытые ключи защищены.
1 Вы можете установить life время удержания клавиш в агенте.
Статья в Википедии, вероятно, имеет лучшее описание:
Проверка на сервере основана на аутентификации запрос-ответ. ssh подключается к серверу с именем пользователя и запросом ключа. Демон ssh получает запрос и отправляет обратно запрос на основе открытого ключа, хранящегося в файле аутентификации. ssh использует закрытый ключ для создания ответа ключа и отправляет его ожидающему sshd на другом конце соединения. Сам секретный ключ не отправляет. Демон ssh проверяет ответ ключа и, если он действителен, предоставляет доступ к системе. ssh-agent упрощает это, создавая сокет, который прослушивает SSH-соединения. Пользователь просто запускает ssh-agent, сообщая ему, как найти свои ключи (если они не находятся в расположении по умолчанию), вводит ключевую фразу для каждого используемого ключа, единовременно,
Опять дословно из статьи в википедии:
. ssh-agent создает сокет и затем проверяет соединения из ssh. Каждый, кто может подключиться к этому сокету, также имеет доступ к ssh-агенту. Права доступа установлены как в обычной системе Linux или Unix. Когда агент запускается, он создает новый каталог в / tmp с ограниченными правами. Гнездо находится в папке.
Обычно он помещается в системные или пользовательские rc-файлы, такие как $HOME/.bashrc или $HOME/.profile (для оболочек bash), так что ssh-agent набор переменных среды полностью включается в вашу среду.
В моей системе Fedora 14 она запускается довольно рано как часть подсистемы X11. В этом файле /etc/X11/xinit/xinitrc-common :
# Prefix launch of session with ssh-agent if available and not already running. SSH_AGENT= if [ -z «$SSH_AGENT_PID» ] [ -x /usr/bin/ssh-agent ]; then if [ «x$TMPDIR» != «x» ]; then SSH_AGENT=»/usr/bin/ssh-agent /bin/env TMPDIR=$TMPDIR» else SSH_AGENT=»/usr/bin/ssh-agent» fi fi
Затем переменная $SSH_AGENT используется в других сценариях запуска X11, таких как здесь /etc/X11/xinit/Xclients :
exec -l $SHELL -c «$SSH_AGENT $XCLIENTS_D/Xclients.$1.sh»
При включении этого здесь следующие переменные среды устанавливаются как часть родительской оболочки, поэтому они должны быть у всех разветвленных потомков, например:
SSH_AUTH_SOCK=/tmp/ssh-PspRF18958/agent.18958; export SSH_AUTH_SOCK; SSH_AGENT_PID=18959; export SSH_AGENT_PID;
Это немного сложнее, но в двух словах, это в основном то, что происходит ssh-agent .
Например, в GNOME ssh-agent фактически запускается для каждого пользователя в качестве запускаемого приложения:
TL; DR
Суть в том, ssh-agent что когда вам нужны ssh-ключи, вам нужно всего лишь один раз разблокировать их парольной фразой (при условии, что она есть), и с тех пор они доступны в расшифрованном виде в памяти (RAM).
Источник: qastack.ru
SSH, аутентификация по ключам, ssh-keygen, ssh-agent (FreeBSD)
Весь процесс аутентификации можно посмотреть, с помощью опции -v ( verbose ), программы ssh, очень полезная штука, особенно на стадии настройки серверной и клиентской частей протокола SSH.
Генерация ключей с помощью программы ssh-keygen.
Для создания и управления ключами, предназначена программа ssh-keygen, так-же входящая в пакет программного обеспечения OpenSSH. Полный список опций можно как всегда посмотреть командой man ssh-keygen. Здесь приведу лишь несколько из них:
-t type ssh-keygen, работает с тремя типами ключей. Возможные значения:
RSA 1 — для протокола SSH версии 1.
RSA — для протокола SSH версии 2.
DSA — для протокола SSH версии 2. -b Длина ключа в битах.
RSA — минимальная длина, 768 бит, длина ключа по-умолчанию, 2048 бит.
DSA — длина 1024 бита. -i Данная опция используется для импорта ключей из одного формата ( например ключи сгенерированные программой PuTTYgen, для Windows ), в формат OpenSSH. -l Посмотреть отпечаток секретного ключа ( fingerprint ). -p Изменить секретную фразу приватного ключа.
Сгенерируем пару RSA ключей, это рекомендуемый формат, как наиболее устойчивый к взлому. По-умолчанию, ключи, сохраняются в домашнюю директорию пользователя, в файлы ~/.ssh/id_rsa — приватный ( секретный ) ключ, и ~/.ssh/id_rsa.pub — публичный ключ.
Вот собственно и все, сгенерирована пара ключей RSA, с длиной 4096 бит и сохранены в файлы /root/.ssh/id_rsa и /root/.ssh/id_rsa.pub.
Настройка SSH сервера на аутентификацию по открытому ключу.
SSH сервер естественно должен быть настроен на аутентификацию по ключам, приведу кусок, касающийся аутентификации, своего файла конфигурации, SSH сервера. Все что закомментировано в файле конфигурации SSH, отсюда убрал, для простоты восприятия:
PermitRootLogin yes
Данная директива нужна, если вы планируете работать под учетной записью root.
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
UseLogin no
Теперь копируем публичный ключ на удаленный SSH сервер:
vds-admin /root/.ssh# cat id_rsa.pub | ssh 192.168.50.50 «cat >> ~/.ssh/authorized_keys»
Так как для копирования вы подключаетесь к SSH серверу, он запросит пароль, авторизацию по ключам-то мы еще не настроили. ) Я работал под учетной записью root, а без явного указания имени пользователя в командной строке или в конфигурационном файле SSH клиента, подключение происходит с именем текущего пользователя, то есть мне нужно было ввести пароль пользователя root, удаленной системы. После ввода пароля, публичный ключ будет добавлен в конец файла ~/.ssh/authorized_keys, так как мы подключаемся пользователем root, то путь ~/.ssh/authorized_keys указывает на директорию /root/.ssh/authorized_keys.
Ключи сгенерированы и скопированы на SSH сервер, сервер соответствующим образом настроен, пробуем подключится:
vds-admin /root/.ssh# ssh 192.168.50.50 Enter passphrase for key ‘/root/.ssh/id_rsa’: Здесь вводим нашу секретную фразу, указанную при генерации ключей.
Если пароль на ключ введен верно, получаем доступ в удаленную систему.
Обратите внимание на следующий момент, с приведенным выше вариантом конфигурации SSH сервера, при неудачной аутентификации по ключам, например если неправильно ввести секретную фразу ключей, будет предложена аутентификация по паролю. Что-бы изменить это поведение и например вообще не пускать пользователя root иначе, как по ключам, можно изменить в конфигурационном файле сервера, значение директивы PermitRootLogin с yes на without-password.
Использование программы ssh-agent
Как было сказано выше, в целях безопасности, приватный ключ, всегда должен быть защищен секретной фразой ( паролем ), но это вызывает некоторые неудобства, вам придется вводить секретную фразу, каждый раз когда вы подключаетесь к удаленному серверу по ключу, было-бы гораздо проще ввести пароль на ключ один раз и пользоваться им сколько потребуется. На этот случай в пакете OpenSSH, существуют специальные программы ssh-agent и ssh-add, в общем-то вторая является дополнением первой.
Как это работает. Поле запуска программы ssh-agent, в нее добавляются расшифрованные ключи, то есть при добавлении она запросит секретную фразу ключа, для его дешифровки, и далее ssh-agent, будет выдавать уже расшифрованные ключи по запросу, например программе SSH.
Запускать ssh-agent, можно двумя способами, со специальной опцией, говорящей, какой тип оболочки используется, или с помощью команды eval. Принципиальной разницы как его запускать, нет, просто в случае с опцией, вы должны точно знать, какую оболочку вы используете.
ssh-agent -c Если в качестве оболочки используется С — Shell ssh-agent -s Если в качестве оболочки используется Bourne Shell eval `ssh-agent` В таком варианте запущенный ssh-agent, будет передан команде eval, которая выполнит его в текущей оболочке. Обратите внимание, используются обратные кавычки а не обычные !
Итак, запускаем ssh-agent:
vds-admin /root/.ssh# eval `ssh-agent` Agent pid 1982
При запуске, ssh-agent создает переменные окружения, проверим какие:
vds-admin /root/.ssh# env | grep SSH_A SSH_AUTH_SOCK=/tmp/ssh-7EeitdI5mr/agent.1981 В этой переменной хранится сокет, через который программа ssh, будет связываться с ssh-agent. SSH_AGENT_PID=1982 Это PID процесса ssh-agent
Теперь нужно поместить в него расшифрованные ключи, делается это с помощью программы ssh-add.
Если запустить ее без аргументов, будут добавлены все ключи, найденные в стандартных местах их обитания, то есть будут просканированы следующие файлы, ~/.ssh/identify, ~/.ssh/id_rsa и /.ssh/id_dsa. Если ключ защищен парольной фразой, программа попросит ввести ее, что-бы расшифровать ключ и загрузить уже готовый к применению.
vds-admin /root/.ssh# ssh-add Enter passphrase for /root/.ssh/id_rsa: Запрос пароля на расшифровку Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
Теперь пробуем подключиться к удаленному SSH серверу:
vds-admin /root/.ssh# ssh 192.168.50.50 Last login: Tue Jul 7 18:45:27 2009 from .host. Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD 7.1-STABLE (SMP_KERNEL) #1: Tue Mar 10 18:14:59 UTC 2009 Welcome to FreeBSD!
Как видите пароль у нас больше никто не спрашивает, программа SSH, получает уже расшифрованный ключ от ssh-agent и мы успешно подключаемся к удаленному SSH серверу.
Посмотреть отпечатки загруженных в ssh-agent ключей, можно той-же командой ssh-add с опцией -l, или целиком ключи, опцией -L.
vds-admin /root/.ssh# ssh-add -l 4096 56:79:b5:61:ea:19:70:13:a4:67:a2:af:15:11:db:b5 /root/.ssh/id_rsa (RSA) vds-admin /root/.ssh# ssh-add -L ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAgEArL0hIMmhw8rXeg0p72+EJXnC4iAY2XTkPAdTb3LnQb9bc0E5wvd cwCdNEtLlDIDCH+z0I1FaP3TfpvgVkv59X15TaNIeoB7uydqXvlLMOxpOJkfbc3eiA6a07PvZHMKXcIA0ZZ9+j12u l+HsGOK2qMQ5g52mOc6BOF1PVuoHfTR1C9nExv5UCA6h7e/v2wxq79pMW07nx7nshB5/1n5Gnyx+toQEzRiFbf zOJBB1ry/9NUF1DiBwOhKJVdEJBTUi0hyh/e77UAmVtkguEtjrsDEdxJ31sV21SL97EZHymMjRPjwU2nWjRkHf0Pi7 dlXBoCKRj3dQps38kwFd3m9Tu4+hXSnsF8FdxkX5y9XmN8Uz8UWR6O2zslr7xZubkDR3aCq1dtcbu2nkvC4+Vy TOxEdnaNqDlC6U6G6aUVKFc0Rb5dcPnqpKqUHWE8MlXq/obKMRjuSz+GOr1VgRe/wZM7/0GoO1Xrv2MDMhS+ S1uR+XkHkQr/EjTSxPiDZ92snZhtiyPIzTUZDOmclWHbe4gyvxDtU3Lxqzl3t1+Murg4sN1NrkZIHefMq2xeCOS8P bI89b3zJG2PJ3i2PSsOMviqIBOL3BBskGSWksJKi/YvvKwrlKaSM10wMZTbXHomgu+6jRd7cZtUOmU/FO0IoKejB MwuYbcPC+TCWBks0phU= /root/.ssh/id_rsa
Загружен один ключ, по которому мы подключались к удаленной машине. Кроме этого, при запуске ssh-add, можно указать путь до конкретного ключа, который необходимо загрузить, например:
vds-admin /root/.ssh# ssh-add /root/.ssh/id_rsa.new1 Enter passphrase for /root/.ssh/id_rsa.new1: Identity added: /root/.ssh/id_rsa.new1 (/root/.ssh/id_rsa.new1) Проверяем, что у нас теперь в ssh-agent: vds-admin /root/.ssh# ssh-add -l 4096 56:79:b5:61:ea:19:70:13:a4:67:a2:af:15:11:db:b5 /root/.ssh/id_rsa (RSA) 2048 68:81:38:fe:66:e8:05:88:8b:49:80:d2:d1:8b:bf:99 /root/.ssh/id_rsa.new1 (RSA) Загружено уже 2 ключа
Удаляются ключи из ssh-agent, так-же просто как и добавляются, для этого используется опция -d, без параметров, для удаления стандартных ключей, опция -d файл_ключа, если нужно удалить конкретный ключ, или опция -D, для удаления всех ключей, например:
vds-admin /root/.ssh# ssh-add -l 4096 56:79:b5:61:ea:19:70:13:a4:67:a2:af:15:11:db:b5 id_rsa (RSA) 2048 68:81:38:fe:66:e8:05:88:8b:49:80:d2:d1:8b:bf:99 id_rsa.new1 (RSA) 2048 c7:9f:b1:3b:c1:d0:61:15:38:27:d1:36:a7:49:55:cd id_rsa.new2 (RSA) vds-admin /root/.ssh# ssh-add -d id_rsa.new2 Identity removed: id_rsa.new2 (id_rsa.new2.pub) vds-admin /root/.ssh# ssh-add -l 4096 56:79:b5:61:ea:19:70:13:a4:67:a2:af:15:11:db:b5 id_rsa (RSA) 2048 68:81:38:fe:66:e8:05:88:8b:49:80:d2:d1:8b:bf:99 id_rsa.new1 (RSA) vds-admin /root/.ssh# ssh-add -D All identities removed. vds-admin /root/.ssh# ssh-add -l The agent has no identities.
Приведу список самых используемых опций программы ssh-add:
ssh-add Без опций, добавляются стандартные ключи ssh-add имя файла Добавляются конкретный ключ -l Показывает отпечатки всех загруженных в данный момент ключей -L Посмотреть список самих ключей -D Из ssh-agent, будут удалены все ключи -d имя файла Удаляет конкретный ключ -t Установить время жизни ключей, через данный промежуток времени ключи будут выгружены. -x Заблокировать ssh-agent паролем -X Разблокировать ssh-agent
Что-бы закрыть ssh-agent, можно вызвать его c опцией -k, ну или на крайний случай прибить сигналом, например kill -QUIT PID, но это крайняя мера и при корректном запуске, это не потребуется:
vds-admin /root/.ssh# ssh-agent -k unsetenv SSH_AUTH_SOCK; unsetenv SSH_AGENT_PID; echo Agent pid 1982 killed;
Как видите произошел обратный процесс, переменные очищены, процесс убит.
Форвардинг ssh-agent
Форвардинг агента включается в файле конфигурации клиента SSH, директивой ForwardAgent yes. Как это работает. Вы запускаете ssh-agent на локальной машине, загружаете ключи, подключаетесь к удаленному SSH серверу, сервер создает обратное перенаправление через созданный SSH туннель к вашему ssh-agent и вы можете использовать загруженные в него ключи для последующих соединений.
Для примера, с локального хоста, Local_host, подключаемся к удаленной машине Remote_host, по каким-то причинам, нам понадобилось что-то посмотреть на еще одном хосте, Next_remote_host, что происходит в таком случае:
- Клиент ssh c Local_host, подключается к SSH серверу, Remote_host, и запрашивает форвардинг для ssh-agent
- Сервер SSH, /usr/sbin/sshd, хоста Remote_host, создает сокет в /tmp/ssh-XXXXXXX/agent.##### и устанавливает переменную окружения SSH_AUTH_SOCK, присваивая ей путь к сокету.
- Когда нам понадобится подключиться к следующему серверу, ( мы сейчас на сервере Remote_host ), SSH клиент хоста Remote_host, обращается по пути, лежащему в переменной SSH_AUTH_SOCK, то есть к сокету.
- SSH сервер, находящийся на другом конце сокета /tmp/ssh-XXXXXXX/agent.#####, передает данные из ssh, сервера Remote_host, на ssh-agent, запущенный на хосте Local_host. Вся работа с ключами происходит на машине Local_host а не на машинах, на которых вы регистрируетесь в процессе работы.
- Теперь с хоста Remote_host, вы можете подключиться к хосту Next_remote_host, используя ключи, загруженные в ssh-agent, на хосте Local_host.
Это только на первый взгляд сложно выглядит, вся эта схема работает абсолютно прозрачно для пользователя, от него требуется только соответствующим образом настроить /etc/ssh/ssh_config а дплее все просто. Собственно тут даже показывать нечего в качестве примера.
Программа PuTTy, клиент SSH под Windows.
Все о чем было рассказано выше, говорилось и делалось в контексте операционной системы FreeBSD, теперь пару слов о клиентах под Windows. Самым популярным, и на мой взгляд, самым функциональным и удобным клиентом под операционные системы Windows, является программный пакет PuTTy. В него входят следующие утилиты:
- putty.exe — Программа, SSH, Telnet, Rlogin клиент;
- puttygen.exe — Утилита для генерации и конвертации ключей;
- pageant.exe — Аналог программы ssh-agent;
- plink.exe — Клиент SSH, Telnet и Rlogin для командной строки;
- pscp.exe — Программа командной строки для безопасного копирования SCP/SFTP
- psftp.exe — Интерактивный SFTP клиент для командной строки;
Читайте другие интересные статьи
Понравилась статья, расскажи о ней друзьям, нажми кнопку!
Источник: adminunix.ru