OpenSSH Что это такое, и с чем это едят
В данной статье я хотел бы рассмотреть продвинутые функции OpenSSH. Мы рассмотрим как теоретическую часть, так и практическую. Зачем?..
На одном из моих серверов, в логах я заметил не очень позитивную активность, а именно китайцев, которые перебирали пароли, пытаясь авторизоваться под «админом», «рутом» и прочими логинами. Ок, я бы понял, если бы у меня был бы стандартный порт, но порт у меня был не стандартный, сервер вообще был в качестве тестовой среды и, короче, было странно, я заблокировал пол Китая и забил.
Далее меня откровенно стала надоедать необходимость постоянно вводить пароль для авторизации на серверах. Не, ну а если у меня двадцать серверов — нужно знать двадцать паролей, причем разных, потому что ставить один и тот же пароль на весь зоопарк глупо.
Авторизация по SSH ключу
Собственно в OpenSSH есть такая интересная возможность, как авторизация по ключам. Для корректной работы этого метода используется два ключа, открытый (который publik_key) и закрытый (privat_key соответственно). Открытый ключ должен находится в домашней каталоге пользователя, на сервере, на который мы будем заходить, а закрытый ключ должен обитать в домашнем каталоге пользователя, на ноутбуке (или ПК, смартфоне, телефоне, холодильнике, космическом шатле и т.д.) с которого мы будем ломиться на сервер. Далее, при авторизации, грубо говоря, эти ключи сравниваются, клиент авторизуется на сервер, сервер авторизуется у клиента, и клиент попадает на сервер. Само преимущество этого метода заключается в том, что его нельзя украсть, так как при авторизации ключ не передается на сервер, а только доказывает серверу, что у него есть этот ключ.
Ну если, username, мы смогли тебя убедить в том, что это необходимо, то начнем с генерации ключа. Заходим на наш сервер и генерируем ключ из под обычного пользователя (не root):
ssh-keygen -t rsa
Далее в ответ «генератор» задаст нам несколько вопросов:
- Enter file in which to save the key (/home/wtf/.ssh/id_rsa) — или введите имя ключа, можно указав путь. Ну например введем maxidrom.net-rsa;
- Enter passphrase (empty for no passphrase): — или введите пароль для сертификата.. Ну я параноик, я ввел.. (Но вы можете оставить его пустым, если не хотите его вводить каждый раз, когда используете ключ)
- 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
Удобненько, не правда ли?
На этом, пожалуй, обзор команд я закончу. Этого много есть в интернете, но и пусть будет в моем блоге.
В написании этого шедевра мне помогли следующие ресурсы: