Настройка тайм-аута SSH сессий

Чтобы настроить тайм-аут SSH сессий, посмотрим где находится файл конфигурации SSH сервера:

sudo find / -name sshd_config

Откроем его в любом текстовом редакторе, например nano:

sudo nano /etc/ssh/sshd_config

Читать далее Настройка тайм-аута SSH сессий

Как отсоединить SSH пользователя

Допустим через SSH подключено несколько пользователей.

Сначала посмотрим список онлайн пользователей:

w

Допустим отобразилось следующая информация (где test — это логин пользователя):

USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
test     tty1                      11:20    1:07   0.03s  0.03s -bash
test     pts/0    192.168.1.5      11:21   13.00s  0.02s  0.02s -bash
test     pts/1    192.168.1.3      11:21    0.00s  0.02s  0.00s w

tty1 — это клиент вошедший локально, то есть находится возле компьютера.
pts/1 — судя например по IP и WHAT, допустим что это мы, соответственно pts/0 это клиент которого мы хотим отсоединить.

Смотрим список процессов и их PID:

ps faux |grep sshd

У меня отобразилось:

root       946  0.0  0.5  65508  5368 ?        Ss   12:00   0:00 /usr/sbin/sshd -D
root      1147  0.0  0.6  92828  6920 ?        Ss   12:01   0:00  \_ sshd: test [priv]
test      1178  0.0  0.3  92828  3384 ?        S    12:01   0:00  |   \_ sshd: test@pts/0
root      1192  0.0  0.6  92828  6592 ?        Ss   12:02   0:00  \_ sshd: test [priv]
test      1223  0.0  0.3  92828  3532 ?        S    12:02   0:00      \_ sshd: test@pts/1
test      1248  0.0  0.0  15468   956 pts/1    S+   12:25   0:00              \_ grep --color=auto sshd

Находим test@pts/0 и соответственно 1178 — это нужный PID.

Завершаем процесс указав его ID, после чего пользователь сразу отсоединится:

sudo kill -9 1178

Смотрите также мои статьи:
Установка и настройка SSH
Настройка тайм-аута SSH сессий

Подключение к SSH с использованием ключей

Чтобы подключаться к SSH без ввода пароля, можно сгенерировать на локальном севере публичный и приватный ключи, публичный потом скопировать на удаленную машину, после чего пароль при подключении к ней не будет спрашиваться.

На локальной машине генерируем ключи:

sudo ssh-keygen -t rsa

Копируем публичный ключ на удаленный сервер:

sudo ssh-copy-id -i ~/.ssh/id_rsa.pub -p PORT USER@HOST

Если возникает ошибка при копировании ключа, то можно вручную скопировать строку из id_rsa.pub на удаленный сервер в файл authorized_keys.

Указанные команды нужно выполнять от того пользователя, от которого будет выполнятся подключение.
Например если от root, то нужно перед двумя командами выше выполнить команду:

sudo -i

Убрать хост можно командой:

ssh-keygen -f "/home/user/.ssh/known_hosts" -R [HOST]:22

Смотрите также:
Установка и настройка SSH

Мониторинг количества клиентов секторной Ubiquiti по SSH из Zabbix

На тесте приведу пример получения количества клиентов подключенных к обычной секторной антенне Ubiquiti AirMax Rocket M5.
Получать данные будем через SSH.

Для проверки один раз подключимся к устройству (первый раз при подключении наберем yes и нажмем enter):

sudo -u zabbix ssh -p 22 admin@192.168.0.55

Теперь в Zabbix добавим элемент данных к шаблону или хосту, например с именем «Template Ubiquiti Rocket M5 Sector»:

Имя: любое
Тип: SSH агент
Ключ: ssh.run[clients,,22,utf8]
Метод аутентификации: Пароль
Имя пользователя: ИМЯ
Пароль: ПАРОЛЬ
Выполняемый скрипт: команда выполняемая на устройстве (смотрите ниже)

Пример команды отображаемой количество подключенных клиентов:

wstalist |grep "mac" |wc -l

Соответственно создадим график элементу данных, а также триггер:

Имя: На секторной антенне  {HOST.NAME} > 40 клиентов
Выражение: {Template Ubiquiti Rocket M5 Sector:ssh.run[clients,,22,utff8].last(#1)}>40

Смотрите также:
Настройка SSH проверок в Zabbix

Настройка SSH проверок в Zabbix

Понадобилось как-то для некоторых Linux серверов настроить SSH проверки, чтобы не устанавливать на них Zabbix-agent.
Сам Zabbix-server у меня установлен на Ubuntu Server.

Ниже по порядку опишу как настроить SSH проверки в Zabbix.

Авторизацию по SSH настроим по ключу вместо пароля, для этого остановим zabbix-agent и zabbix-server:

sudo service zabbix-agent stop
sudo service zabbix-server stop

Создадим домашнюю директорию пользователя Zabbix (для хранения ssh ключей):

sudo usermod -m -d /home/zabbix zabbix
sudo chown zabbix:zabbix /home/zabbix
sudo chmod 700 /home/zabbix

Запустим обратно zabbix-agent и zabbix-server:

sudo service zabbix-agent start
sudo service zabbix-server start

Откроем конфигурационный файл /etc/zabbix/zabbix_server.conf (в редакторе nano комбинация клавиш Ctrl+O и Enter означает сохранение, Ctrl+X выход):

sudo nano /etc/zabbix/zabbix_server.conf

Раскомментируем строку SSHKeyLocation и укажем путь к директории с ключами:

SSHKeyLocation=/home/zabbix/.ssh

Перезапустим zabbix-server:

sudo service zabbix-server restart

Генерируем ssh ключ:

sudo -u zabbix ssh-keygen -t rsa
Нажмем Enter если предлагается путь /home/zabbix/.ssh/id_rsa
На предложение зашифровать файл ключа нажмем Enter чтобы не шифровать его или введем два раза любой пароль (им будет зашифрован файл ключа и при подключении его придется указывать)

Скопируем сгенерированый ключ на сервер за которым будем наблюдать:

sudo -u zabbix ssh-copy-id -i /home/zabbix/.ssh/id_rsa.pub -p 22 root@192.168.0.55

Если возникает ошибка при копировании ключа, то можно вручную скопировать строку из id_rsa.pub на удаленный сервер в файл authorized_keys.

И попробуем подключится к удаленному серверу без ввода пароля командой:

sudo -u zabbix ssh -p 22 root@192.168.0.55

Теперь в Zabbix добавим элемент данных к шаблону или хосту:
Имя: любое
Тип: SSH агент
Ключ: ssh.run[описание,ip,порт,кодировка] (например ssh.run[cpu,192.168.0.55,22,utf8]
Метод аутентификации: Публичный ключ
Имя пользователя (на удаленном хосте): root
Файл публичного ключа: id_rsa.pub
Файл приватного ключа: id_rsa
Фраза-пароль ключа: оставим пустым если не шифровали ключ паролем
Выполняемый скрипт: команда выполняемая на удаленном сервер, примеры ниже

Приведу ниже пример команд для Linux которые можно выполнить и получить различную информацию.
Загрузка процессора за 1мин/5мин/15мин:

cat /proc/loadavg |cut -d " " -f1
cat /proc/loadavg |cut -d " " -f2
cat /proc/loadavg |cut -d " " -f3

Количество текущих запущенных процессов указанной программы:

pgrep apache2|wc -l
pgrep -c sshd

Свободное пространство в точке монтирования «/» (в мегабайтах):

df -m|grep "/$"|awk '{print $4}'

Занятое пространство в точке монтирования «/» (в процентах):

df|grep "/$"|awk '{print $5}'|tr -d "%"

Получено байт на сетевой интерфейс eth0:

cat /proc/net/dev|grep eth0|awk '{print $2}'

Отправлено байт на сетевой интерфейс eth0:

cat /proc/net/dev|grep eth0|awk '{print $10}'

Количество свободной оперативной памяти:

free |grep "Память:"|awk '{print $4}'
free |grep "Mem:"|awk '{print $4}'

Смотрите также:
Подключение к SSH с использованием ключей

Как изменить порт SSH в Ubuntu

На тесте изменю порт SSH в Ubuntu Server 14.0.4 LTS и Ubuntu Server 16.0.4 LTS.

Откроем конфигурацию SSH например в текстовом редакторе nano (в nano клавиши Ctrl+X для выхода, y/n для сохранения или отмены изменений):

sudo nano /etc/ssh/sshd_config

Найдем строчку «Port 22» и изменим её например на «Port 58222«.

Чтобы применить изменения перезапустим ssh (на разных системах он может перезагружаться по разному, по этому приведу список возможных команд):

sudo service ssh restart
sudo /etc/init.d/ssh restart
sudo /etc/init.d/sshd restart

После перезапуска SSH, он станет доступен по новому порту, а текущая сессия на старом останется активной, по этому не отключаясь для проверки попробуем подключится по новому порту, если не пускает, то возможно в системе работает фаервол и нужно в нем разрешить новый порт, например в iptables это делается так (где 58222 наш новый порт):

sudo iptables -A INPUT -p tcp --dport 58222 -j ACCEPT

Можно разрешить средствами iptables подключение к SSH только с указанного диапазона IP адресов:

sudo iptables -A INPUT -d 192.168.0.0/24 -p tcp --dport 58222 -j ACCEPT

Если все ок, подключаемся через новый порт и можем удалить старое правило iptables, например так:

sudo iptables -D INPUT -p tcp --dport 22 -j ACCEPT

Пример команды для подключения из Linux к SSH по нестандартному порту:

ssh -p 58222 user@192.168.0.2

Посмотреть в системе на каком порту и на каких сетевых интерфейсах работает SSH можно так:

netstat -tulpan | grep ssh

Управление оборудованием Ubiquiti по SSH

Для подключения по SSH к оборудованию Ubiquiti (UBNT) из Windows можно использовать популярную утилиту PuTTY.
Из Linux можно подключится набрав команду:

ssh user@192.168.1.2

Перед изменением настроек рекомендую сделать резервную копию командой из Linux:

sudo sshpass -p "ПАРОЛЬ" scp -oStrictHostKeyChecking=no admin@192.168.1.2:/tmp/system.cfg /backups/192.168.1.2_system.cfg

Приведу ниже список некоторых команд.
Просмотр использования памяти:

free

Информация о памяти:

cat /proc/meminfo

Просмотр использования процессора:

top

Статистика процессора:

cat /proc/stat

Информация о процессоре:

cat /proc/cpuinfo

Просмотр прерываний:

cat /proc/interrupts

Просмотр таблицы маршрутизации:

route -n

Просмотр загруженных модулей ядра:

lsmod

Информация о сетевых подключениях:

netstat

Просмотр версии ядра:

cat /proc/version

Просмотр состояния всех сетевых интерфейсов:

ip link show

Просмотр сетевых интерфейсов и статистики по ним:

cat /proc/net/dev

Просмотр конфигурации сетевых интерфейсов:

iwconfig

Просмотр конфигурации беспроводного сетевого интерфейса ath0:

iwconfig ath0

Сканирование эфира:

iwlist scan

Перезагрузка устройства:

reboot

Общая статистика устройства:

mca-status

Wi-fi статистика:

wstalist

Количество подключенных клиентов к точке доступа:

wstalist |grep "mac" |wc -l

Просмотр уровня сигнала:

mca-status | grep signal
mca-status | grep "signal=" | cut -d= -f2

Просмотр уровня шумов:

mca-status | grep "noise=" | cut -d= -f2

Приведу команды для редактирования конфигурационного файла.
Просмотр конфигурационного файла (загруженный файл находится по адресу /tmp/running.cfg, его трогать не нужно):

cat /tmp/system.cfg

Редактирование конфигурационного файла (x — удаление символа, а — добавление, Esc — возврат в командный режим, :x — сохранение изменений в файле и выход из редактора):

vi /tmp/system.cfg

После изменения сохраним конфигурационный файл и применим его командами:

cfgmtd -f /tmp/system.cfg -w
/usr/etc/rc.d/rc.softrestart save

Стандартный вывод команды help:
. : [ [[ alias bg break cd chdir command continue echo eval exec
exit export false fg getopts hash help jobs kill let local printf
pwd read readonly return set shift source test times trap true
type ulimit umask unalias unset wait

Сбросить настройки к стандартным можно командами:

cfgmtd -w -f /etc/default.cfg
reboot

Можно также подключаться по SSH к другим устройствам например командой:

ssh -p 22 admin@192.168.1.5

Смотрите также:
Описание конфигурационного файла Ubiquiti Rocket M5
Использование текстового редактора vim
Как включить Web Server на Ubiquiti через SSH
Резервное копирование конфигурации Ubiquiti (UBNT) устройств

Настройка SSHGuard

SSHguard мониторит логи, выявляет атаки и с помощью фаервола блокирует адреса злоумышленников.

Установка в Linux Ubuntu/Debian:

sudo apt-get install sshguard

Команда информации:

man sshguard

Белый список адресов для исключения находится по адресу /etc/sshguard/whitelist.

Официальная документация www.sshguard.net/docs/

sshguard не имеет конфигурационного файла, поэтому нужно создать правило «sshguard» в iptables:

#Для IPv4
iptables -N sshguard
#Если используется IPv6 то вводим
ip6tables -N sshguard
# указываем чтобы входящий трафик шел через sshguard
iptables -A INPUT -j sshguard
# IPv6
ip6tables -A INPUT -j sshguard

# Либо указываем что нужно блокировать плохой трафик на порты SSH, FTP, POP и IMAP с использованием «multiport»

iptables -A INPUT -m multiport -p tcp --destination-ports 21,22,110,143 -j sshguard
ip6tables -A INPUT -m multiport -p tcp --destination-ports 21,22,110,143 -j sshguard

Установка и настройка SSH

SSH (англ. Secure SHell — «безопасная оболочка») — сетевой протокол прикладного уровня, позволяющий производить удалённое управление операционной системой и туннелирование TCP-соединений (например, для передачи файлов).

Устанавливаем в Ubuntu:

sudo apt-get install ssh

В CentOS так (вторая команда включает автозапуск SSH сервера при запуске системы):

yum install openssh-server
chkconfig sshd on
service sshd start

Для проверки можно набрать:

ssh localhost

Команда для подключения с сервера на сервер:

ssh -l ИМЯПОЛЬЗОВАТЕЛЯ ip -pПОРТ

либо

ssh user@ip -pПОРТ

Копирование файла на сервер в директорию польователя:

scp -P порт /home/user/file.zip user@192.168.1.1:/

Для отключения от ssh сервера служит команда exit, чтобы ее не набирать можно нажать комбинацию клавиш Ctrl+D.

Редактируем стандартный конфиг:

nano /etc/ssh/sshd_config

Опишу несколько параметров:
Port — порт на который сервер будет принимать подключения. Нужно писать в самом начале конфига.
Protocol — версия протокола по которой можно подключатся, стандартное значение = 2, можно указать несколько через запятую. Версия 2 более безопасная чем 1.
HostKey — файл с частными ключами хоста. sshd не будет принимать файлы с атрибутами чтения для всех.
UsePrivilegeSeparation — предпочитаемое значение yes. В целях безопасности при прохождении аутентификации на сервер создается дочерний процес с наинизшими правами, при успешной — пользователь получает соответствующие ему права.
KeyRegenerationInterval — время регенерации ключа, необходимо для того чтобы злоумышленник перехвативший ключ не успел его расшифровать. Значение 0 отключает регенерацию.
ServerKeyBits — длинна ключа сервера.
SyslogFacility — код сообщения для syslog сервера. Стандартное значение AUTH, в этом случает сервер логов будет заносить информацию выдаваемую сервером sshd в файл /var/log/auth.log.
LogLevel — уровень выдаваемой информации в логи. Возможные значения: QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2, DEBUG3. Стандартное — INFO.
LoginGraceTime — время ожидания в секундах аутентификация пользователя в системе. Если пользователь не успел ввести логин и пароль — соединение обрывается.
PermitRootLogin — в целях безопасности предпочитаемое значение — no. Параметр позволяющий или запрещающий вход на сервер пользователем root.
StrictModes — параметр позволяет проверять серверу sshd атрибуты и владельца файлов конфигурации и директории пользователя перед тем как разрешить доступ к серверу. Стандартное значение — yes.
RSAAuthentication — разрешает поключение к серверу только по ключу RSA, используется для протокола 1.
PubkeyAuthentication — разрешает поключение к серверу по открытому ключу, используется для протокола 2.
IgnoreRhosts — игнорирование содержания файлов .rhosts и .shosts, при аутентификации RhostsRSAAuthentication и HostbasedAuthentication. Учитываться будут только /etc/hosts.equiv и /etc/shosts.equiv.
RhostsRSAAuthentication — параметр разрешающий аутентификацию по файлам .rhosts или /etc/hosts.equiv, используется для протокола 1.
HostbasedAuthentication

Немного дополнительных параметров которых нет в стандартном конфиге:
ListenAddress — параметр указывает порт конкретно для каждого интерфейса. Пример:
ListenAddress 10.0.0.1
ListenAddress 10.0.0.2
PermitEmptyPasswords — параметр запрещает или разрешает подключатся к серверу пользователям с пустыми паролями.
PasswordAuthentication — разрешает либо запрещает аутентификацию по паролю. В случае отключения нужно включить аутентификацию по публичному ключу (PubkeyAuthentication yes) и указать параметром AuthorizedKeysFile путь к файлу с ключами, это метод позволяет защититься от прямого перебора паролей злоумышленниками.
MaxStartups 10:30:60 — установка максимального числа одновременных не авторизованных подключений. Если число превышает указанное, то все следующие подключения будут отброшены.

Параметры разрешают или запрещают подключаться к серверу только указанным через пробел пользователям или группам:
DenyUsers
AllowUsers
DenyGroups
AllowGroups

Например

AllowUsers user1 user2 user3@192.168.1.105

AddressFamily — Укажите какое семейство ip адресов вы используете. Возможные параметры: any (любое), inet (только IPv4), inet6 (только IPv6).
TCPKeepAlive — Возможные значения yes/no. Посылает TCP сообщения клиенту, тем самым поддерживая соединение. В случае плохого интернет соединения пакеты могут не дойти и клиент будет отсоединен от сервера.
PrintMotd no — Указывает, должен ли выводиться на экран текст файла /etc/motd.
Banner — указывает путь к текстовому файлу, содержимое которого показывается на экране в момент аутентификации.
Subsystem sftp /usr/lib/openssh/sftp-server — включение протокола передачи файлов. По умолчанию он включен.

Перезагружаем SSH сервер чтобы изменения вступили в силу:

sudo /etc/init.d/ssh restart

Для подключения к ssh серверу из среды Windows можно использовать известную всем программу Putty.

Смотрите также мои статьи:
IPTables правила для SSH
Как изменить порт SSH в Ubuntu
Подключение к SSH с использованием ключей
Настройка тайм-аута SSH сессий
Как отсоединить SSH пользователя