Работа в консоли (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-архивами
Теперь рассмотрим несколько практических примеров.
Предположим, Вам нужно скопировать файлы с расширениями .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.