OpenSSH Что это такое, и с чем это едят

OpenSSH Muther Fucker!В данной статье я хотел бы рассмотреть продвинутые функции OpenSSH. Мы рассмотрим как теоретическую часть, так и практическую. Зачем?..

На одном из моих серверов, в логах я заметил не очень позитивную активность, а именно китайцев, которые перебирали пароли, пытаясь авторизоваться под «админом», «рутом» и прочими логинами. Ок, я бы понял, если бы у меня был бы стандартный порт, но порт у меня был не стандартный, сервер вообще был в качестве тестовой среды и, короче, было странно, я заблокировал пол Китая и забил. 

Далее меня откровенно стала надоедать необходимость постоянно вводить пароль для авторизации на серверах. Не, ну а если у меня двадцать серверов — нужно знать двадцать паролей, причем разных, потому что ставить один и тот же пароль на весь зоопарк глупо.

Авторизация по SSH ключу

Собственно в OpenSSH есть такая интересная возможность, как авторизация по ключам. Для корректной работы этого метода используется два ключа, открытый (который publik_key) и закрытый (privat_key соответственно). Открытый ключ должен находится в домашней каталоге пользователя, на сервере, на который мы будем заходить, а закрытый ключ должен обитать в домашнем каталоге пользователя, на ноутбуке (или ПК, смартфоне, телефоне, холодильнике, космическом шатле и т.д.) с которого мы будем ломиться на сервер. Далее, при авторизации, грубо говоря, эти ключи сравниваются, клиент авторизуется на сервер, сервер авторизуется у клиента, и клиент попадает на сервер. Само преимущество этого метода заключается в том, что его нельзя украсть, так как при авторизации ключ не передается на сервер, а только доказывает серверу, что у него есть этот ключ.

Ну если, username, мы смогли тебя убедить в том, что это необходимо, то начнем с генерации ключа. Заходим на наш сервер и генерируем ключ из под обычного пользователя (не root):

ssh-keygen -t rsa

Далее в ответ «генератор» задаст нам несколько вопросов:

  1. Enter file in which to save the key (/home/wtf/.ssh/id_rsa) — или введите имя ключа, можно указав путь. Ну например введем maxidrom.net-rsa;
  2. Enter passphrase (empty for no passphrase): — или введите пароль для сертификата.. Ну я параноик, я ввел.. (Но вы можете оставить его пустым, если не хотите его вводить каждый раз, когда используете ключ)
  3. Enter same passphrase again: — и повторил.. (аналогично, если не вводили — оставьте пустым)

На этом вопросы заканчиваются, а ключи генерируются. Кстати, непонимающие «гуглочитатели» могут задать вопрос, почему я ввел ключ rsa, а не dsa? Все просто, dsa используется только для цифровой подписи, и не используется для шифрования. Так что смело вводите rsa.

В папке, в которой вы находитесь (или той,которую могли указать) вы найдете два файла, по названиям которых вы поймёте сто там публичное, а что там приватное.

maxidrom.net-rsa
maxidrom.net-rsa.pub

Теперь, установим ключ на сервере:

mkdir /home/wtf/.ssh/ 
cat maxidrom.net-rsa.pub >> /home/wtf/.ssh/authorized_keys
chmod 600 /home/wtf/.ssh/authorized_keys

и настроим openssh сервер, чтобы тот не просил логин и пароль, но мог авторизоваться по ключу. Для этого, уже под root пользователем или при помощи sudo, откроем файл конфигурации openssh любимым редактором:

vim /etc/ssh/sshd_config

приведем некоторые параметры к подобному виду:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
PasswordAuthentication no

и перезапустим службу openssh:

service ssh restart

Но с сервера пока не выходите, особенно если он далеко от вас..

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

Для этого скопируем файл закрытого ключа с сервера при помощи такой прекрасной утилиты, как scp:

scp user@server:~/maxidrom.net-rsa ~/.ssh/maxidrom.net-rsa

и добавим ключ для своего ssh клиента:

ssh-add ~/.ssh/maxidrom.net-rsa

Все, на это по идее можно закончить настройку авторизации, и авторизовываться на сервере можно таким образом:

ssh login@server

Но мне это не особо удобно. Что я имею в виду? Например мы можем авторизовываться на сервер набрав в терминале

ssh server1

Для этого достаточно в файл ~/.ssh/config добавить эти строки:

Host server1
HostName 10.10.10.10
Port 22
User root

Это называется Алиасом. Подробно ознакомиться с ключами вы можете на OpenNet.ru или набрав команду man ssh_config.

И еще, если вы собираетесь заходить на серверы с операционной системы Windows при помощи Putty, то вам понадобится утилита PuttyGen.

Шифрованное копирование файлов

Да, что то я ранее упоминал про такую штуку, как scp. Это не то, что вы, возможно, прочли на лурке, а это протокол RCP копирования файлов, использующий в качестве транспорта не RSH, а SSH.

При помощи этого протокола вы сможете копировать файл site1.zip  на сервер со своего компьютера, в папку ~/my_sites вот такой командой:

scp site1.zip user@server:~/my_sites

Можно скопировать файл sites22.zip с сервера на свой ноутбук в папку sites вот такой командой:

 scp user@server:~/sites/site22.zip ~/sites

При копировании директории важно указать ключ -r, как в этой команде:

 scp -r user@server:~/sites/sitesdir ~/sites

А если, вдруг, ваш ssh работает на другом порту, то делаем копирование вот такой командой:

scp -P 443 user@server:~/sites/site22.zip ~/sites

Ну а в нашем случае, при настроенном алиасе в файле ~/.ssh/config, скопировать файл мы сможем такой командой:

scp s1:~/sites/site22.zip ~/sites

Удобненько, не правда ли?

На этом, пожалуй, обзор команд я закончу. Этого много есть в интернете, но и пусть будет в моем блоге.

В написании этого шедевра мне помогли следующие ресурсы: