Инструменты пользователя

Инструменты сайта


ssh

SSH

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

Защита демона sshd

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

# nano /etc/ssh/sshd_config
 
# Authentication:
LoginGraceTime 120
PermitRootLogin no # запретить удалённый доступ для root
AllowUsers user1 user2 # список пользователей, которым разрешён доступ по SSH
StrictModes yes

iptables. Защита от bruteforce средствами iptables на примере sshd:

# limit ssh-port connections per minute
$IPT -I INPUT -p tcp --dport 22 -i $IFACE_EXT -m state --state NEW -m recent --set
$IPT -I INPUT -p tcp --dport 22 -i $IFACE_EXT -m state --state NEW -m recent
 --update --seconds 60 --hitcount 2 -j DROP
$IPT -A INPUT -p tcp -m tcp -i $IFACE_EXT --dport 22 -j ACCEPT

sshrc

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

Пример. Настройка опций подключения для отдельных хоcтов 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:~

Пример. multiple ssh private keys

Про безпарольную авторизацию в 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

  • Вместо использования паролей, с помощью 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.

$ 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-keygen. Ключи для Azure

Создание 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.txt · Последние изменения: 2016/02/25 10:00 (внешнее изменение)

Яндекс.Метрика