Основы использования протокола SSH

SSH - (Secure Shell — «безопасная оболочка») - сетевой протокол прикладного уровня, позволяющий производить удалённое управление операционной системой и туннелирование Порты TCP- соединений (например, для передачи файлов). Далее рассматривается OpenSSH (демон sshd) альтернатива проприетарного ПО от SSH Communications Security. OpenSSH (открытая безопасная оболочка) — набор программ, предоставляющих шифрование сеансов связи по компьютерным сетям с использованием протокола SSH.

Какой порт у SSH? SSH сервер обычно прослушивает соединения на TCP -порту 22.

Настройка SSH доступа к вашему серверу

ssh root@your_server_ip

И делаем свое черное дело =) список здесь список здесь.

Потом вы подумали, что это очень легко работать под правами root, нужно усложнить себе работу и ввести новую сущность - бесправного пользователя и обязательно дать ему имя как ваш ник в Одноглазиках (сорри, вы продвинутые тогда берите из VK)! Чтобы когда вы в логах (/var/log/auth.log) увидите как хакеры пробуют взломать вашего демона SSH и не догадались о вашем нике из Одноглазиков - это победа!! Вы можете гордиться вашим ником в социальных сетях - его никто не знает. И значит можно пароль поставить как на домашний роутер admin. Я шутил!

По делу: не работайте от root, пожалуйста!

Cоздадим пользователя с правами которого будем работать с сервером, для примера создается новый пользователь с именем remuserbak, но вы должны заменить его на имя пользователя, которое вам нравится:

root@vps:~# adduser remuserbak

Вам будет задано несколько вопросов, начиная с пароля учетной записи.

Введите надежный пароль и, при желании, введите любую дополнительную информацию. Это не обязательно, и вы можете просто нажать ENTER в любом поле, которое хотите пропустить.

На втором шаге был создан пользователь remuserbak, но администрировать с ним сервер нельзя, ибо нет у него прав таких! Придется дать ему возможность становится рутом, как говорится с чего начали - тем и закончили. :-)

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

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

От имени пользователя root выполните команду usermod, чтобы добавить нового пользователя в группу sudo (замените имя пользователя своим новым пользователем:

root@vps:~# usermod -aG sudo remuserbak

Проверим командой id добавился ли пользователь в группу sudo

root@vps:~# id remuserbak
uid=1000(remuserbak) gid=1000(remuserbak) groups=1000(remuserbak),27(sudo)

Теперь, когда вы войдя в систему как обычный пользователь remuserbak, можете ввести sudo перед командами, чтобы выполнять действия с привилегиями суперпользователя (root).

После установки сервера SSH, первым делом исправить файл sshd_config. В нем запретить удалённый доступ пользователя root и разрешить доступ только для доверенных пользователей. Настраиваем от непривилегированного пользователя, используя sudo.

Первое действие перед правкой любого файла - это бекап этого файла, делаем:

remuserbak@vps:~$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.orig
[sudo] password for remuserbak:

Посмотреть текущее настройки демона ssh

sudo sshd -T

Отключение SSH-логин для пользователя root, используя параметр PermitRootLogin no.

remuserbak@vps:~$ sudo nano /etc/ssh/sshd_config
 
# Authentication:
PermitRootLogin no # запретить удалённый доступ для root
AllowUsers user1 user2 # список пользователей, которым разрешён доступ по SSH

После внесения изменений в sshd_config - перегружаем демона SSH

$ sudo systemctl restart ssh.service

Теперь при попытке залогинеться с пользователем root, в логах вы увидите запись:

User root from 222.187.238.57 not allowed because not listed in AllowUsers

Всё, у вас демон SSH минимально защищен!

Дополнительные параметры sshd_config, которые можно менять, под ваши задачи и условия, но не делайте это без нужды и предварительно изучите руководство man 5 sshd_config

  • LoginGraceTime 120: Сервер отключается по истечении этого времени, если пользователю не удалась регистрация в системе. Если стоит значение 0, то время ожидания не ограничено. Значение по умолчанию - 120 секунд.
  • StrictModes yes: Проверять наборы прав доступа и принадлежность конфигурационных файлов и домашнего каталога пользователя перед разрешением регистрации в системе. Это рекомендуется выполнять потому, что новички иногда оставляют свои каталоги или файлы доступными для записи всем. Значение по умолчанию - yes.
  • AddressFamily inet: Семейство адресов которое должна использовать служба sshd, допустимые значения: any, inet (только IPv4) и inet6 (только IPv6). Значение по умолчанию - any.
  • Port 22: Порт, на котором следует ожидать запросы на ssh соединение. Значение по умолчанию - 22.

Дополнительно о SSH

man sshd раздел SSHRC рассказывает об использовании файла /etc/ssh/sshrc. Если этот файл создан с правами на выполнение, то он будет запускать после успешного логина пользователя, но до запуска оболочки пользователя, например bash.

Пример использования файла sshrc для отслеживания действий пользователя в текущей сессии ssh.

Если вам достался шел с неудобочитаемым именем типа hoster2956@super.puper.shell.net.org то сложно его набирать при запуске ssh(scp,sftp), да и запомнить (пусть даже и с автодополнением как тут. И допустим нужно указывать подключиться к определенному хосту по ssh1. В ~/.ssh/config вносим

Host pup
HostName super.puper.shell.net.org
User hoster2956
Protocol 1

протестируем скопировав на этот хост файл ~/.screenrc

scp ~/.screenrc pup:~

Про безпарольную авторизацию в ssh с помощью ключей не пишет разве что ленивый. Зачастую бывает нужно использовать разные ssh-ключи для различных групп серверв/хостов. Например по ролям, территориальному признаку, логину … ну и вообще..

Набирать каждый раз полный путь к файлу с ключем, а главное помнить в каких случаях какой ключ нужен - лень. Да, лень двигатель прогресса: видел как люди пишут алиасы на такие ssh-команды (сам такой), а еще пишут про ssh-agent. но в этом типсе пример работы с несколькими ключами, и распределеним каким ключем на какой хост ходить.

собственно типс - перевод статьи "multiple ssh private keys" Karanbir Singh

итак: делаем ssh-ключи для беспарольной авторизации.

$ ssh-keygen -b 2048 -t rsa -f ~/.ssh/work_key -C "Key for Work stuff"
$ ssh-keygen -b 2048 -t rsa -f ~/.ssh/myvps -C "Key for vps"

Мы обзавелись ключами, раскидали их публичные части в authorized_keys соотвествующих хостов. Теперь определим с каким ключем куда ходить:

создаем конфиг

$ touch ~/.ssh/config
$ chmod 600 ~/.ssh/config

с содержимым, например

IdentityFile ~/.ssh/work_key
IdentityFile ~/.ssh/myvps

Host *.company.org
  IdentityFile ~/.ssh/work_key
  User workusername
 
Host 127.65.43.21
  IdentityFile ~/.ssh/myvps
  User bliznezz
  Port 22322

это подтянет соотв. конфиги при

Конечно, при подключении к хосту, который не определен в ~/.ssh/config - будет по-умолчанию, или стандартные ключи ~/.ssh/id_dsa ~/.ssh/id_rsa, или логин/пароль если иначе не прописано в конфиге.

ssh-keygen

Утилита ssh-keygen служит для генерация, преобразование и управление ключами. По умолчанию генерирует RSA ключ (ключ -t позволяет задать тип ключа). При генерации запрашивается парольная фраза для 3DES (рекомендуется 10-30 символов). Забытую парольную фразу восстановить невозможно. Число бит по умолчанию - 1024 (минимум - 512 бит, увеличение длины ключа замедляет работу). Комментарий по умолчанию - имя-пользователя@имя-хоста. Имя файла для хранения публичного ключа образуется из имени файла для частного ключа добавлением суффикса ".pub". Ключ хоста должен иметь пустую парольную фразу.

  • ssh-keygen [-t rsa1|dsa|rsa] [-b бит] [-N парольная-фраза] [-C комментарий] [-f имя-файла-записи] [-q]
  • ssh-keygen -c [-P парольная-фраза] [-C комментарий] [-f файл-с-ключами] - изменить комментарий
  • ssh-keygen -e [-f файл-с-ключами] - читает приватный или публичный ключ в формате OpenSSH и преобразует его в формат SECSH для экспорта в другие реализации SSH
  • ssh-keygen -i [-f файл-с-ключами] - читает приватный или публичный ключ в формате SSH2 или SECSH и преобразует его в формат OpenSSH
  • ssh-keygen -l [-f файл-с-ключами] - показать fingerprint
  • ssh-keygen -B [-f файл-с-ключами] - показать bubblebabble digest
  • ssh-keygen -p [-P старая-парольная-фраза] [-N новая-парольная-фраза] [-f файл-с-ключами] - изменить парольную фразу
  • ssh-keygen -y [-f файл-с-ключами] - читает приватный OpenSSH DSA ключ и выдает OpenSSH DSA публичный ключ
  • ssh-keygen -r доменное-имя [-g] [-f файл-с-ключами] - выводит запись ресурса DNS SSHFP (fingerprint RR)

Обычно каждый пользователь, желающий использовать SSH с RSA или DSA аутентификацией, запускает его единожды для создания аутентификационного ключа в $HOME/.ssh/identity, $HOME/.ssh/id_dsa или $HOME/.ssh/id_rsa.

Обычно эта программа генерирует ключи и спрашивает название файла в котором надо сохранить приватный ключ. Публичный ключ будет сохранен в файле с тем же именем, только к нему будет добавлено расширение ".pub". Программа также спросит у вас ключевую фразу. Ключевая фраза может быть пустой, это означает, что ключевая фраза не используется (ключ машины должен иметь пустую ключевую фразу), или это может быть строка произвольной длины. Ключевая фраза схожа с паролем, за исключением того, что ключевая фраза может состоять из набора слов, знаков препинания, цифр, пробелов или любого набора символов, какой вы пожелаете. Хорошими считаются ключевые фразы из 10-30 символов, не являющиеся простыми предложениями или легко угадываемыми (английская проза имеет только 1-2 бита энтропии на символ и обеспечивает очень плохие ключевые фразы) и содержать чередование букв, цифр и не буквенно-цифровых, набранных в верхнем и нижнем регистре, знаков. Ключевая фраза может быть позднее изменена при помощи опции -p.

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

Для RSA1-ключей в файле ключа имеется поле комментария, который служит только для удобства пользователя, чтобы было проще идентифицировать ключ. Комментарий может вам сообщить для чего этот ключ или чем он полезен. Комментарий инициализируется при создании для "user@host", но может быть изменен при помощи опции -c.

После генерации ключа будут приведены инструкции куда его надо поместить для активации.

Используемые опции:
-b bits
    Определяет число бит в ключе при его создании. Минимум это 512 бит. Как правило, 2048 бит считается достаточным.
По умолчанию используется 2048 бит. 
-c
    Запрашивает изменение комментария в файлах приватных и публичных ключей. Операция поддерживается только для RSA1-ключей.
Программа предложит указать файл содержащей приватный ключ, спросит ключевое слово, если таковое имеется, и новый комментарий. 
-е
    Эта опция позволяет прочитать приватный или публичный OpenSSH-файл ключа и распечатать его в "SECSH Public Key File Format"
в стандартный вывод. Также, данная опция позволяет экспортировать ключи для использования с некоторыми коммерческими
реализациями SSH. -f filename Определяет имя файла для файла ключа. 
-i
    Эта опция считывает не зашифрованный SSH2-совместимый приватный (или публичный) файл ключа и распечатывает OpenSSH-совместимый
приватный (или публичный) ключ в стандартный вывод. Также, ssh-keygen считывает "SECSH Public Key File Format". Данная опция
позволяет импортировать ключи из некоторых коммерческих реализаций SSH. 
-l
    Показывает распечатку указанного приватного или публичного ключа. Также поддерживаются приватные RSA1-ключи. Для RSA- и
DSA-ключей ssh-keygen предпримет попытку найти соответствующие публичные ключи и их отпечатки. 
-p
    Запрашивает изменение ключевой фразы приватного ключа вместо создания нового приватного ключа. Программа предложит
указать имя файла содержащего приватный ключ, старую ключевую фразу и, дважды, новую ключевую фразу. 
-q
    Тихий ssh-keygen. Используется в работе /etc/rc при создании нового ключа. 
-y
    Эта опция читает приватный OpenSSH-формат файла и печатает публичный ключ OpenSSH в стандартный вывод. 
-t type
    Определяет тип создаваемого ключа. Допустимыми являются значения "rsa1", для протокола версии 1, и "rsa1" или "dsa",
для протокола версии 2. 
-В
    Этот параметр отображает "bubblebabble" дайджест заданного файла публичного или приватного ключа. 
-C comment
    Обеспечивает ввод нового комментария. 
-D reader
    Копировать сохранённый публичный RSA-ключ со smartcard в устройстве reader. 
-N new_passphrase
    Обеспечивает ввод новой ключевой фразы. 
-P passphrase
    Обеспечивает ввод (старой) ключевой фразы. 
-D reader
    Копировать публичный RSA-ключ на smartcard в устройстве reader. 

ФАЙЛЫ

  • $HOME/.ssh/identity Содержит идентификацию для RSA-аутентификации пользователя по протоколу версии 1. Этот файл должен быть доступен для чтения только владельцу. Этого можно добиться путем указания ключевой фразы при создании ключа; эта ключевая фраза будет использована для шифрования приватной части этого файла с использованием 3DES. Этот файл не доступен для ssh-keygen автоматически, но подразумевается, что это файл по умолчанию для приватного ключа. ssh(1) будет считывать данные из этого файла, если будет предпринята попытка входа в систему.
  • $HOME/.ssh/identity.pub Содержит публичный ключ для RSA-аутентификации по протоколу версии 1. Содержимое этого файла должно быть добавлено к $HOME/.ssh/authorized_keys на всех машинах, где вы желаете иметь возможность входа в систему с использованием RSA-аутентификации. Нет никакой необходимости хранить содержимое этого файла в тайне.
  • $HOME/.ssh/id_dsa Содержит идентификацию для DSA-аутентификации пользователя по протоколу версии 2. Этот файл должен быть доступен для чтения только владельцу. Этого можно добиться путем указания ключевой фразы при создании ключа; эта ключевая фраза будет использована для шифрования приватной части этого файла с использованием 3DES. Этот файл не доступен для ssh-keygen автоматически, но подразумевается, что это файл по умолчанию для приватного ключа. ssh будет считывать данные из этого файла, если будет предпринята попытка входа в систему.
  • $HOME/.ssh/id_dsa.pub Содержит публичный ключ для DSA-аутентификации по протоколу версии 2. Содержимое этого файла должно быть добавлено к $HOME/.ssh/authorized_keys на всех машинах, где вы желаете иметь возможность входа в систему с использованием аутентификации с публичным ключем. Нет никакой необходимости хранить содержимое этого файла в тайне.
  • $HOME/.ssh/id_rsa Содержит идентификацию для RSA-аутентификации пользователя по протоколу версии 2. Этот файл должен быть доступен для чтения только владельцу. Этого можно добиться путем указания ключевой фразы при создании ключа; эта ключевая фраза будет использована для шифрования приватной части этого файла с использованием 3DES. Этот файл не доступен для ssh-keygen автоматически, но подразумевается, что это файл по умолчанию для приватного ключа. ssh будет считывать данные из этого файла, если будет предпринята попытка входа в систему.
  • $HOME/.ssh/id_rsa.pub Содержит публичный ключ для RSA-аутентификации по протоколу версии 2. Содержимое этого файла должно быть добавлено к $HOME/.ssh/authorized_keys на всех машинах, где вы желаете иметь возможность входа в систему с использованием аутентификации с публичным ключем. Нет никакой необходимости хранить содержимое этого файла в тайне.
  • Вместо использования паролей, с помощью ssh-keygen можно создать ключи DSA или RSA, которыми пользователи могут аутентифицироваться:
% ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_dsa):
Created directory '/home/user/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_dsa.
Your public key has been saved in /home/user/.ssh/id_dsa.pub.
The key fingerprint is:
bb:48:db:f2:93:57:80:b6:aa:bc:f5:d5:ba:8f:79:17 user@host.example.com

ssh-keygen создаст пару публичного и приватного ключей, используемых для аутентификации. Приватный ключ сохраняется в ~/.ssh/id_dsa или ~/.ssh/id_rsa, а публичный в ~/.ssh/id_dsa.pub или ~/.ssh/id_rsa.pub (для ключей DSA и RSA соответственно). Для включения аутентификации по ключам публичный ключ должен быть помещен в файл ~/.ssh/authorized_keys на удаленном компьютере.

Это позволяет соединяться с удаленным компьютером с помощью SSH-ключей вместо паролей.

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

  • Создаст ключи с паролем fgdfgytyityirioyroryoyuouiy:
$ ssh-keygen -N fgdfgytyityirioyroryoyuouiy -t rsa -C test4@test4 -f test4 -q
  • Создаст ключи без пароля (пароль пустой):
$ ssh-keygen -t rsa -N "" -C test4@test4 -f test4 -q

Задача. На удаленном компьютере Anacron запускает скрипт для резервирования БД PostgreSQL один раз в сутки. Нужно создать скрипт который будет копировать удаленные backup-копии на локальный сервер бекапов. Скрипт запустим при помощи Использование планировщика cron в Linux.

$ ssh-keygen -t dsa
$ ls
id_dsa  id_dsa.pub
$ chmod 600 id_dsa

Поместим публичный ключ файл ~/.ssh/authorized_keys на удаленном компьютере.

$ ssh-copy-id -i id_dsa.pub USER@HOST

Скрипт:

#!/bin/bash
 
# Copy PostgreSQL
 
SFTP='/usr/bin/sftp'
DIR='/home/backups_mbill_sql/'
HOST='user@host:/home/backups_mbill_sql/'
FILES="psql-`date +%d.%m.%Y`*.sql"
 
$SFTP $HOST$FILES $DIR

Создание ssh ключей для виртуальной Linux в Microsoft Azure. Для создания и использования ключей SSH с Azure выполните описанные ниже действия.

cd .ssh/
ssh-keygen -t rsa -b 2048 -N "" -C 'your-email@example' -f azuressh -q

Будут созданы два ключа azuressh и публичный azuressh.pub. Чтобы без ошибок скопировать содержимое azuressh.pub и вставить его в поле при создании VE, используйте ssh-keygen. Весь вывод, без исключений нужно копировать.

ssh-keygen -e -f azuressh.pub
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "2048-bit RSA
...
---- END SSH2 PUBLIC KEY ----

Не забудьте настроить файл config, для большего удобства.

Дополнительная документация SSH

  • Крупнейшая в Европе школа английского языка

    Промокоды, акции и подарки, чтобы Ваше обучение было не только интересным, но и выгодным. Закажите пробный урок уже сейчас!

    skyeng.ru
  • Онлайн школа английского языка

    Английский по скайпу от 680р за урок, без заучивания правил. Эффективно! Удобно! Выгодно! Начните обучение прямо сейчас.

    melene.ru
  • Школа английского языка по Skype

    Персональные занятия по разумным ценам. Бесплатные ресурсы для студентов: разговорные клубы, блог, вебинары, книги, тест на определение уровня английского. Пробный урок бесплатно!

    englex.ru