Техническая поддержка

Работа в консоли (SSH)

SSH (Secure Shell) - защищенный сетевой протокол, который позволяет работать непосредственно на площадке виртуального хостинга или выделенного сервера VPS/VDS.

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

Все эти операции, реализуются с помощью стандартных утилит операционной системы FreeBSD (или Linux), которые вызываются в консоли SSH.

Работая в Unix-shell, Вы управляете сервером через удаленный терминал: на своем компьютере Вы видите интерфейс командной строки, для которой все отправляемые команды выполняются на сервере, а результат выводится Вам.

Все тарифные планы (кроме ТП "Свободный") на хостинге “Зенон НСП” поддерживают протокол SSH.

В среде Windows для работы по SSH-протоколу мы рекомендуем использовать утилиту PuTTY.

Данные для авторизации по SSH Вы можете найти в разделе "логины-пароли" в Панели управления.

Управление контентом

Рассмотрим для начала список команд, которые могут Вам пригодиться, а затем опишем практические примеры.

  • ls - эта команда отображает содержимое директории
  • rm - удаляет файлы
  • mv - перемещает файлы
  • cp - копирует файлы
  • mkdir - создает директорию
  • joe - редактор текстовых файлов
  • tar, gzip, gunzip - эти команды чаще всего применяются совместно и позволяют работать с архивами: создавать их, извлекать файлы из архивов
  • zip, unzip - команды для работы с zip-архивами
Подробнее о каждой команде можно узнать, выполнив команду "man имя_команды" в Unix-shell. Вы узнаете, для чего служит конкретная команда, ключи ее запуска, примеры выполнения. Вам понадобится минимальное знание английского языка.

Теперь рассмотрим несколько практических примеров.

Предположим, Вам нужно скопировать файлы с расширениями .html и .jpg в папку "images", которая должна быть в свою очередь в папке "www", а Вы, закачивая файлы на сервер, по ошибке записали все файлы корневую папку на площадке, то есть на уровень выше, чем "www". Решается данная ситуация достаточно просто:

cd www
mkdir images
mv ~/*.html ~/www/
mv ~/*.jpg ~/www/images/

Вы "заходите" в директорию "www", в ней создаете директорию "images", потом переносите все файлы с расширением .html (по маске "*.html") в директорию "www" (путь "~/" обозначает путь к Вашей домашней директории), а все файлы .jpg - в "www/images".

В следующем примере Вам, допустим, нужно удалить резервные копии файлов, которые остались после применения редактора "joe" (имена таких файлов заканчиваются символом "~"):

rm *~

Будьте предельно осторожны, применяя команду "rm" с ключами "-r" и "-f". Первый ключ "говорит" о том, что заданные файлы нужно удалять рекурсивно по всем поддиректориям. Второй - отключает запрос каких-либо подтверждений.

Работая с архивами, можно значительно минимизировать трафик, а, следовательно, и время загрузки Ваших файлов на сервер.

Предположим, что у Вас есть готовый проект, который занимает весьма значительный объем. Вместо того, чтобы закачивать все файлы на сервер по отдельности, можно упаковать их на локальной машине в один архив, сохранив всю структуру директорий, записать на площадку хостинга один файл, а потом просто распаковать его:

если это zip-архив:

unzip имя_архива

если это tar.gz-архив:

tar -zxf имя_архива

Это будет значительно быстрее.

Точно так же и в обратную сторону. Более того, расширив задачу, представим, что нужно перенести весь контент с одного сервера на другой:

1. упакуем весь сайт в один архив:

tar -czf archive.tar.gz "www"

или, если нужен zip-архив:

zip -r archive.zip "www"

2. с помощью команды "ftp адрес_другого_сервера", авторизовавшись и выполнив команду "put archive.tar.gz", Вы закачаете архив на другой сервер и, зайдя в Unix-shell уже нового сервера, распакуете архив там:

tar -zxf archive.tar.gz

или, если zip-архив:

unzip archive.zip

Если Вы хотите повысить уровень безопасности, не передавая пароли ftp в открытом виде, можно воспользоваться программой "scp". Она позволяет копировать файлы с одного компьютера на другой, используя для шифрования данных протокол SSH. Например, команда:

scp login@home.domain_name:~/www/index.html index.html

сначала запросит пароль. Если введенный пароль совпадет с паролем логина доступа (login) на сервере "home.domain_name", то Вы скопируете к себе в текущую директорию файл 'index.html' из директории "www" домашнего каталога пользователя "login".

Более подробно о командах "ftp" и "scp" можно узнать, выполнив

man ftp 
man scp

Управление сервером

Зачастую единственным инструментом для выполнения тех или иных действий с сервером является доступ в Unix-shell. Серьезно занимаясь веб-программированием или дизайном, рано или поздно Ваш уровень становится настолько высоким, что возникает необходимость овладевать и некоторыми навыками администрирования unix-систем. Рассмотрим те команды, которые могут Вам пригодиться:

  • ps - эта команда отображает список текущих процессов
  • kill - позволяет отправить процессу определенный сигнал, в том числе и прекратить выполнение процесса
  • du - отображает информацию о потреблении дисковых ресурсов

Конечно же, и для этой группы команд верно то, что подробную информацию о них можно получить, выполнив "man имя_команды".

Команда "du -sh ~/" "расскажет" о том, какой объем занимает Ваш сайт. Если какие-либо процессы "зависли" и требуют перезапуска, то можно с помощью команды "ps x" получить числовое значение PID необходимого процесса, после чего выполнить команду "kill значение_PID_процесса".

Далее, рассматривая управление своим веб-сервером, нельзя не упомянуть об администрировании баз данных. Одними из самых распространенных серверов баз данных в рамках хостинга на платформе Unix являются MySQL и PostgreSQL. Скажем о том, что основным инструментом для управления ими являются утилиты администрирования, которые запускаются из Unix-shell. Конкретно для MySQL - это программы mysql, mysqladmin и mysqldump.

При использовании общего MySQL доступ предоставляется только к одной базе данных, а не ко всему серверу. В таком случае для Вас будет актуальным использование mysqldump и mysql. Первая утилита служит для создания дампа базы или отдельных таблиц в виде текстового файла. Подробнее об этом можно прочитать в нашей статье "Импорт/экспорт данных из MySQL". mysql - это работающий в текстовом режиме клиент для сервера баз данных, позволяющий выполнять различные SQL-запросы.

Для начала рассмотрим ключи, которые могут Вам пригодиться при запуске MySQL:

  • "-hадрес_хоста" (или "--host=адрес_хоста") - задает адрес хоста для подключения
  • "-uимя_пользователя" (или "--user=имя_пользователя") - имя пользователя, который подключается к серверу
  • "-pпароль" (или "--password=пароль") - пароль, с которым Вы подключаетесь к серверу. Если Вы не введете пароль, а только зададите ключ "-p", то пароль будет запрошен после выполнения команды.
  • "-Pпорт" (или "--port=порт") - порт, который используется для подключения

Кроме того, после всех ключей можно указать название базы данных, с которой Вы собираетесь работать. Например:

mysqlXX --user=base_login --host=baze.domain_name --port=64000 -p base_name

Где XX - версия используемой базы данных, base_login - имя пользователя базы данных (на общем MySQL совпадает с именем базы данных), domain_name - Ваш домен, base_name - имя базы данных.

Конечно же, подключиться к нужной базе можно и в интерактивном режиме, выполнив команду "use название_базы;". Запрос "show tables;" покажет Вам список таблиц в данной базе, "desc название_таблицы;" отобразит структуру заданной таблицы. Подробно об остальных командах, таких как создание таблиц (create table ...), выборка по заданным условиям (select ...), изменение данных (update ...), удаление (delete ...), можно прочитать в документации по MySQL.

Если Вы используете персональный MySQL-сервер, Вам пригодится утилита mysqladmin. С помощью нее можно создавать и удалять базы данных, обновлять данные о правах доступа пользователей, если Вы вносили изменения, отображать список выполняемых сервером процессов. Кроме того, с помощью клиента mysql можно будет выполнять необходимые действия с таблицами в базе mysql ("use mysql;", "show tables"). Например, вносить изменения в таблицу пользователей ("user").

Как всегда, Вам помогут команды:

man mysql 
man mysqldump 
man mysqladmin

Отладка скриптов

Как обычно, начнем со списка полезных команд:

  • less - эта команда позволяет просматривать содержимое файла
  • grep - ищет заданную последовательность в файле
  • tail - отображает содержимое конца файла
  • chmod - изменение атрибутов файла

Конечно же, и для этой группы команд верно то, что подробную информацию о них можно получить, выполнив "man имя_команды".

В процессе отладки работы скриптов, приложений, сервисов очень важным фактором является возможность анализа файлов протоколов. Чаще всего именно в протоколах ошибок содержатся ответы на вопросы "почему скрипт не работает / работает неправильно?" Самое простое действие - обычный просмотр такого файла:

less file.log

Стрелки "вверх" и "вниз" позволят "листать" файл, клавиша "H" отобразит экран с текстом подсказки, "Q" - закончит работу с файлом.

Однако, можно столкнуться со следующей проблемой. Файлы протоколов зачастую обновляются очень активно, и вся новая информация дописывается в конец файла. Таким образом, чтобы получить интересующие данные, необходимо скачать файл протокола к себе на компьютер либо "пролистать" его до самого конца. Что с точки зрения передачи некоторого объема данных равнозначно. Вот, именно в таких случаях поможет команда:

tail имя_файла_протокола

Вы увидите последние 10 строк файла (по умолчанию). Это значение можно изменить с помощью ключа "-n", где n - число строк, которое Вы хотите увидеть. Например, "tail -30 file.txt" - показать 30 последних строк файла "file.txt".

Еще одним очень удобным средством диагностики ошибок является запуск команды "tail" с ключом "-f":

tail -f имя_файла_протокола

В этом случае выполнение данной команды не прекращается при достижении конца файла, а продолжается и отображает вновь добавляемую информацию. При этом можно запустить ssh-клиент и, например, выполнять параллельно другие задачи.

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

grep "ключевая_фраза" имя_файла_протокола

Например, нужно найти в файле "file.txt" все строчки, в которых содержится слово "web". Для этого используем команду:

grep "web" file.txt

А если Вы хотите, чтобы команда "grep" искала без учета регистра и находила в том числе и "Web" или "WEB", используйте ключ '-i':

grep -i "web" file.txt

Еще полезные ключи команды grep :

  • "grep -r" - поиск и в подкаталогах текущего каталога
  • "grep -v" - показать те строки, которые не удовлетворяют условиям поиска

Подробнее о применении "grep":

man grep

Нельзя не упомянуть о таких полезных возможностях Unix, как перенаправление стандартного ввода и вывода, а также объединение команд с помощью каналов. Покажем на примерах, что это такое.

Команда

ls -la

выводит на экран содержимое текущей директории. Предположим, что эти данные Вам нужно каким-либо образом сохранить.

Команда

ls -la > file.txt

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

При использовании команды

ls -la >> file.txt

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

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

sort < file1.txt

отсортирует по алфавиту строки из текстового файла "file1.txt" и выведет результат на экран. А, например

sort < file1.txt > file2.txt

сделает то же самое, но сохранит полученные данные в "file2.txt". Данный пример показывает, что перенаправление стандартного ввода и вывода можно применять одновременно. Кроме того, вывод одной команды может являться вводом для другой. Это объединение команд каналами. Например:

grep "web" file.txt | grep "site"

найдет все строки в файле "file.txt", в которых одновременно встречаются слова "web" и "site", а

grep "web" file.txt | grep "site" | wc -l

посчитает количество таких строк.

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

Авторизация методом RSA-ключей

Сначала нужно выставить правильные права на домашнюю директорию на площадке. Тут важно убрать sgid-бит на домашней директории, ставящийся у нас по-умолчанию.

chmod 750 .

После чего в домашней директории должно быть следующее:

ls -la
drwxr-xr-x    9    your_login  sadmin     512   7 мар 08:01 .
drwxrws--x  716    root        admin    44032  18 июн 03:08 ..
... ... ...

Далее, если Вы генерируете ключи командой (мы описываем так, как если бы генерация была бы на нашем сервере, но Вы можете это делать, либо у другого провайдера, либо дома, так что возможны изменения):

ssh-keygen -t rsa

Оставляйте предложенные имена файлов.

Далее, поскольку Вы будете подключаться к нашему хосту, Вы кладете файл id_rsa.pub в директории ~/.ssh и переименовываете в authorized_keys.

На директорию .ssh должны быть права 700. На файлы - права установленные при генерации.

Далее, подключаетесь командой:

ssh login@host_name

Если Вы при генерации используете команду:

ssh-keygen -t rsa1

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

ssh -1 login@host_name

У нас поддерживается и ssh1 и ssh2.

Полезные ссылки