Статья подготовлена по материалам сайтов ru.wikipedia.org, www.diwaxx.ru, myvista.ru



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

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

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


Стандарты и программные реализации

Первая версия протокола, SSH-1, была разработана в 1995 году исследователем Тату Улёнен из Технологического университета Хельсинки, Финляндия. SSH-1 был написан для обеспечения большей конфиденциальности, чем протоколы rlogin, telnet и rsh. В 1996 году была разработана более безопасная версия протокола, SSH-2, несовместимая с SSH-1. Протокол приобрел ещё большую популярность, и к 2000 году его использовало уже порядка двух миллионов пользователей.

В 2006 году протокол был утвержден рабочей группой IETF в качестве Интернет-стандарта.

Однако, в некоторых странах (Франция, Россия, Ирак и Пакистан) до сих пор требуется специальное разрешение в соответствующих структурах для использования определенных методов шифрования, включая SSH. См. закон Российской Федерации «О федеральных органах правительственной связи и информации».

Распространены две реализации SSH: собственническая коммерческая и бесплатная свободная. Свободная реализация называется OpenSSH. К 2006 году 80 % компьютеров сети Интернет использовало именно OpenSSH. Собственническая реализация разрабатывается организацией SSH Inc., она бесплатна для некоммерческого использования. Эти реализации содержат практически одинаковый набор команд.

Существуют две версии протокола SSH: SSH-1 и SSH-2. В первой версии протокола есть существенные недостатки, поэтому в настоящее время SSH-1 практически нигде не применяется.

Многие взломщики сканируют сеть в поиске открытого порта SSH, особенно адреса хостинг-провайдеров, обычно пытаясь подобрать пароль суперпользователя.

Протокол SSH-2 устойчив к атакам «man-in-middle», в отличие от протокола telnet. То есть, прослушивание трафика, «снифинг», ничего не дает злоумышленнику. Протокол SSH-2 также устойчив к атакам путем присоединения посредине (англ. session hijacking) и обманом сервера имен (DNS spoofing).

Поддержка SSH реализована во всех UNIX?подобных системах, и на большинстве из них в числе стандартных утилит присутствуют клиент и сервер ssh. Существует множество реализаций SSH-клиентов и для не-UNIX ОС. Большую популярность протокол получил после широкого развития анализаторов трафика и способов нарушения работы локальных сетей, как альтернативное небезопасному протоколу Telnet решение для управления важными узлами.


SSH-серверы
OpenBSD: OpenSSH
Debian GNU/Linux: dropbear, lsh-server, openssh-server, ssh
MS Windows: freeSSHd, OpenSSH sshd, WinSSHD


SSH-клиенты и оболочки
Debian GNU/Linux: kdessh, lsh-client, openssh-client, putty, ssh
MS Windows и Windows NT: PuTTY, SecureCRT, ShellGuard, Axessh, ZOC, SSHWindows, ProSSHD
MS Windows Mobile: PocketPuTTy, mToken, sshCE, PocketTTY, OpenSSH, PocketConsole
Mac OS: NiftyTelnet SSH
Symbian OS: PuTTY
Java: MindTerm, AppGate Security Server
J2ME: MidpSSH

Для работы по SSH нужен SSH-сервер и SSH-клиент. Сервер прослушивает соединения от клиентских машин и при установлении связи производит аутентификацию, после чего начинает обслуживание клиента. Клиент используется для входа на удаленную машину и выполнения команд.

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


Рекомендации по безопасности использования SSH
Запрещение удаленного root-доступа.
Запрещение подключения с пустым паролем или отключение входа по паролю.
Выбор нестандартного порта для SSH-сервера.
Использование длинных SSH2 RSA-ключей (2048 бит и более). По состоянию на 2006 год система шифрования на основе RSA считалась надёжной, если длина ключа не менее 1024 бит. *) (см. КОММЕНТАРИЙ В КОНЦЕ ТЕКСТА)
Ограничение списка IP-адресов, с которых разрешен доступ (например, настройкой файрвола).
Запрещение доступа с некоторых потенциально опасных адресов.
Отказ от использования распространенных или широко известных системных логинов для доступа по SSH.
Регулярный просмотр сообщений об ошибках аутентификации.
Установка детекторов атак (IDS, Intrusion Detection System).
Использование ловушек, подделывающих SSH-сервис (honeypots)


Примеры использования SSH

Команда подключения к локальному SSH-серверу из командной строки GNU/Linux или FreeBSD для пользователя pacify (сервер прослушивает нестандартный порт 30000):
$ ssh -p30000 pacify@127.0.0.1

Генерация пары SSH-2 RSA-ключей длиной 4096 бита программой puttygen под UNIX?подобными ОС:
$ puttygen -t rsa -b 4096 -o sample

Некоторые клиенты, например, PuTTY, имеют и графический интерфейс пользователя.

Для использования SSH в Python существуют такие модули, как python-paramiko и python-twisted-conch.


SSH туннелирование

SSH туннель — это туннель, создаваемый посредством SSH соединения и используемый для шифрования туннелированных данных. Используется для того, чтобы обезопасить передачу данных в интернете (аналогичное назначение имеет IPsec). Особенность состоит в том, что не зашифрованный трафик какого-либо протокола шифруется на одном конце SSH соединения и расшифровывается на другом.

Практическая реализация может выполняться двумя способами:
Созданием Socks-прокси для приложений, которые не умеют работать через SSH-туннель, но могут работать через Socks-прокси
Использованием приложений, умеющих работать через ssh-туннель.


Техническая информация о протоколе

SSH — это протокол прикладного уровня (или уровня приложений). SSH-сервер обычно прослушивает соединения на TCP-порту 22. Спецификация протокола SSH-2 содержится в RFC 4251. Для аутентификации сервера SSH использует алгоритм Диффи — Хеллмана (DH). Для аутентификации клиента — шифрование с открытым ключом (оно сравнительно медленное). Для шифрования передаваемых данных — более быстрое симметричное шифрование. Среди алгоритмов шифрования с открытым ключом чаще всего используются RSA и DSA. Из симметричных алгоритмов — AES, Blowfish и 3DES. Целостность переданных данных проверяется с помощью CRC32 в SSH1 или HMAC-SHA1/HMAC-MD5 в SSH2.

Для сжатия шифруемых данных может использоваться алгоритм LempelZiv (LZ77), который обеспечивает такой же уровень сжатия, что и архиватор ZIP. Сжатие SSH включается лишь по запросу клиента, и на практике используется редко.


SFTP (англ. SSH File Transfer Protocol) — протокол прикладного уровня, предназначенный для копирования и выполнения других операций с файлами поверх надёжного и безопасного соединения. Как правило, в качестве базового протокола, обеспечивающего соединение, используется протокол SSH, но это не обязательно.

Существует заблуждение, что SFTP это просто обычный FTP, работающий поверх SSH. В действительности SFTP — это новый протокол, разработанный с нуля. Иногда его путают с Simple File Transfer Protocol.


PuTTY — свободно распространяемый клиент для протоколов SSH, Telnet, rlogin и чистого TCP (помимо интернет-протоколов PuTTY также поддерживает последовательные порты). Изначально разрабатывался для Microsoft Windows, однако позднее портирован на Unix. В разработке находятся порты для Mac OS и Mac OS X. Сторонние разработчики выпустили неофициальные порты на другие платформы, такие как мобильные телефоны под управлением Symbian OS и коммуникаторы с Windows Mobile. Программа выпускается под лицензией MIT.


OpenSSH (открытый безопасный shell) — набор программ, предоставляющих шифрование сеансов связи по компьютерным сетям с использованием протокола SSH. Он был создан под руководством Teo de Raadt (Тэо де Раадт) как открытая альтернатива проприетарного ПО от SSH Communications Security.


История

OpenSSH был создан командой OpenBSD как альтернатива SSH, который все еще является проприетарным ПО. Разработчики OpenSSH утверждают, что он более безопасен чем оригинальный Secure Shell, благодаря их политике чистки и аудита кода. Хотя исходный код также доступен для оригинального SSH, различные ограничения, накладываемые на его использование, делают OpenSSH более привлекательным проектом для большинства программистов.

OpenSSH впервые появился в OpenBSD 2.6.


Торговые марки

В феврале 2001, Тату Илонен (финск. Tatu Ylonen), председатель и технический директор SSH Communications Security, сообщил через почтовую рассылку OpenSSH, что после общения с ведущими разработчиками OpenSSH компания утвердила право собственности на торговые марки SSH и Secure Shell. Он также искал возможности изменить название протокола на SecSH или secsh и предложили сменить имя OpenSSH, во избежании судебных исков.

В это время, «SSH», «Secure Shell» и «ssh» были использованы в документах определяющих протокол как открытый стандарт и было проделано много работы без принадлежности к торговым маркам. Были высказаны сомнения в правильности претензий, ведь прошло уже 6 лет с создания компании и тем моментом, когда она начала защищать торговую марку от свободных альтернатив, вроде OpenSSH, и что только OpenSSH подвергся их судебным нападкам.

Оба разработчика OpenSSH и Илонен были членами рабочей группы IETF, разрабатывающей новые стандарты, которые после небольшого обсуждения отвергла любые притязания Илонена на переименование протокола, ссылаясь на то, что это создаст нежелательный прецедент для других торговых марок. Члены рабочей группы утверждали, что оба, Secure Shell и SSH, являются базовыми понятиями и они не могут являться торговыми марками.


Переносимость

Частично потому, что OpenSSH необходимо выполнять аутентификацию, выполнение которой может сильно отличаться на различных операционных системах, была создана мощная инфраструктура для обеспечения переносимости. Вскоре то, что включалось напрямую в OpenBSD и OpenSSH было выделено в отдельную часть — OpenSSH Portability Team и анонсировалось как «portable releases». Эти релизы обозначаются в конце буквой «p», например OpenSSH_5.1p1. Эта модель также использовалась и для других проектов OpenBSD, например OpenNTPD.


Состав

Набор OpenSSH содержит следующие компоненты:
ssh, замена для rlogin и telnet:
scp, замена для rcp:
sftp, замена для ftp-клиента:
sshd, SSH демон
sftp-server, sub-система для передачи файлов через ssh
ssh-keygen, генератор ключей
ssh-keyscan, сборщик публичных ключей с хостов
ssh-agent, агент для удержания приватных ключей
ssh-add, утилита для добавления ключей в ssh-agent



SSH - доступ. Crontab. Перенос MySQL.

Автор: Дмитрий
Сайт: http://erahosting.net/

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

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

Для всех этих и многих других действий пользователей хостинг-провайдеры предоставляют доступ по защищенному протоколу telnet (а не по ftp), так называемый shell-доступ (ssh-доступ). 

Работа с shell - это работа с командной строкой Unix. Если кто не знает, поясним, что Unix - это операционная система, альтернативная Windows. А так как это другая операционная система, то в ней существуют другие законы, команды и т.п. 

Что нужно для работы с ssh? Существует множество программ для работы из Windows. Вы можете скачать Putty или SecureCRT.

Рассмотрим подключение на примере работы с программой Putty.

Все очень просто. Запускаете файл putty.exe 

Откроется окно программы. 

В поле &quot;Host name&quot; прописываете доменное имя вашего сайта. К примеру, site.com

Выбираете протокол доступа - Protocol SSH.

Нажимаете &quot;Open&quot;. Все, сессия началась. Программа запросит ввести вас логин, вводите тот же, что у вас для доступа по FTP. Затем вводите пароль.

Внимание! Первое, что необходимо запомнить при работе с командной строкой unix - cистема различает регистр букв. То есть файлы типа Pupkin.pl и pupkin.pl и pupkin.Pl -- это совершенно разные файлы. Также и пароли wert и WerT - разные пароли!

Итак, вы подключились!

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

pwd - получить имя текущей папки, где вы находитесь.

cd - изменить текущую директорию 

Например, Вы находитесь в директории /home, а Вам нужно попасть в /usr/sbin. Для этого Вам нужно просто набрать команду: 

cd /usr/sbin. 

Вот что при этом Вы увидите на экране: 

vvs01% cd /usr/sbin 
vvs01%

ls - вывести информацию о файлах или папках 

При этом список может быть довольно большой.

Поэтому существуют ключи для этой команды, вот некоторые из них:
-a - вывести все файлы (даже те, имена которых начинаются с точки); 
-x - вывод в 4 колонки; 
-t - имена файлов сортируются не по алфавиту, а по времени последнего изменения (сначала идут самые свежие, только что измененные файлы); 
-R - рекурсивно пройти по всем подкаталогам 
-CF - оглавление каталога в несколько столбиков 
-al - оглавление в полном формате 

Эти ключи нужно подставлять сразу после команды sl.

Вот еще несколько команд:

cat -- слить или вывести файлы-аргументы на стандартный вывод 
cp -- копировать файлы 
mv -- переместить (переименовать) файлы 
ln -- создать ссылку на файл 

rm -- удалить файлы 

Формат команды: 

rm [-fri] файл ... 
-i - просить подтверждения на каждое удаление 
-r - рекурсивно удалить вместе с подкаталогами 
-f - не просить подтверждения, а сразу удалить

rmdir - удалить директорию 
mkdir - создать директорию
echo - вывести аргументы командной строки на стандартный вывод 
ps - узнать номера выполняемых процессов, т.е. какие программы выполняются.

Формат команды:

ps - запущенные только с этого терминала 
ps -e - все 
ps -f - в &quot;полном&quot; формате

kill - &quot;убить&quot; выполняемый процес по его номеру
man - выдать справку об использовании и ключах команды

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

Для этого существует механизм, называемый cron.

Для каждого пользователя создается конфигурационный файл, куда записывается расписание запуска программ. Данный конфигурационный файл каждую минуту просматривается cron'ом и запускаются те программы, время запуска которых подошло. Редактируется конфигурационный файл с помощью программы crontab. 

Вот основные команды:

crontab -e : войти в режим редактирования 
crontab -l : вывести все задания крона 
crontab -r : удалить все задания

Команда crontab file заменят текущие настройки cron на те, которые содержатся в файле 'file'. Для этого вам нужно закачать сначала на сервер этот самый файл (например, через ftp), а затем в команде указать полный путь к нему. Пути для вашего сайта можно узнать у своего хостинг-провайдера, он их обычно указывает в инструкциях. В результате, если вы закачали файл raspisanie.txt в папку /pupkin/public_html/mypapka/raspisanie.txt, то команда будет выглядеть так:

crontab /pupkin/public_html/mypapka/raspisanie.txt,

Когда вы задаете команду &quot;вывести все задания крона&quot;, вы увидите нечто вида:

SHELL=/bin/bash 
PATH=/sbin:/bin:/usr/sbin:/usr/bin 
MAILTO=pupkin 
HOME=/home/pupkin 
# run-parts 
01 * * * * command
02 4 * * * command 

Первые четыре строки просто обозначают настройку технических параметров, и на них не стоит обращать внимание (как впрочем и менять тоже). 

А вот на следующие строки внимание уже стоит обратить... Формат этих строк выглядит следующим образом: 
Нужная минута часа для запуска (0-59) 
Нужный час дня для запуска (0-23) 
Нужный день месяца (0-30) 
Нужный месяц года (1-12) 
Нужный день недели (0-6) 
Выполнимая команда. 

Значок * обозначает слово каждый (день, год, месяц, час). 

Например, строка 01 * * * * command будет обозначать запуск программы каждый час в одну минуту. 

А строка 02 4 * * * command означает запуск программы каждый день в 4 часа утра в две минуты. 

Вы можете как создать отдельный файл со строками запуска программ, просто в столбик написав

01 * * * * command
02 4 * * * command 

где command - ваша команда (запуска определенного скрипта или еще что-то), а затем просто командой &quot;crontab file&quot; перенести все задания из файла в крон, либо вручную все ввести в крон. Первое, на мой взгляд, удобнее.

Вот и все премудрости крона:) 

Ну и в окончании поговорим о командах для работы с MySQL. 

mysqldump - позволяет сохранить копию базы данных в текстовой файл, представляющий из себя команды SQL (о способе это сделать через phpmyadmin мы уже писали). Может быть использована при переносе базы данных с одного сервера на другой или для резервного копирования.

Формат команды:

mysqldump -u &lt;dbuser&gt; -p -h mysql.&lt;доменное_имя_сайта&gt; &lt;dbname&gt; &gt; backup-file.sql 
вместо &lt;dbuser&gt; подставьте имя субпользователя MySQL, которому присвоены права на базу dbname (без &lt;&gt;)
вместо &lt;dbname&gt; подставьте имя своей базы данных MySQL (без &lt;&gt;)
вместо 'backup-file.sql' подставьте имя файла, в который будут выведены данные
перед началом работы будет спрошен пароль доступа к базе данных. 

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

mysql -u &lt;dbuser&gt; -p -D &lt;dbname&gt; -h mysql.&lt;доменное_имя_сайта&gt; &lt; backup-file.sql 

Подробности о запуске этой программы можно получить командой man mysqldump 

Другая полезная программа для работы с базами данных - mysql

Запускается из командной строки следующим образом 

mysql -u &lt;dbuser&gt; -p -D &lt;dbname&gt; -h mysql.&lt;доменное_имя_сайта&gt;

Подробности о запуске этой программы можно получить командой man mysql 

Перенос баз данных MySQL

Если вам нужно перенести базу данных к себе на компьютер или с одного сервера на другой, рекомендуем проделать следующее:

1. Создание копии базы на сервере №1.

mysqldump -p -u &lt;dbuser&gt; &lt;dbname&gt; -h mysql.&lt;доменное_имя_сайта&gt; --add-drop-table &gt; &lt;filename&gt; 

Тут &lt;filename&gt; - имя файла, где будет храниться база данных.

В процессе выполнения команды mysqldump спросит пароль пользователя MySql - нужно будет ввести его в ответ на соответствующее приглашение и нажать &quot;Enter&quot; - при этом набираемый пароль на терминале не отображается. 

2. Содание базы данных из файла &lt;filename&gt; на сервере №2.

Закачиваете на сервер №2 по ftp файл &lt;filename&gt; 

Затем, соединившись по ssh

mysqldump -p -u &lt;dbuser&gt; -D &lt;dbname&gt; -h mysql.&lt;доменное_имя_сайта&gt; &lt; &lt;filename&gt; 

Здесь, обратите внимание, dbuser, dbname и пароль могут быть другими. 

Все, база перенесена! 

Если вы захотите узнать побольше о UNIX и им подобных системах, подробную информацию вы можете найти на сайтах, им посвященных.



Справочник команд Putty / SSH / Unix / Linux


Файловые команды


ls – список файлов и каталогов 

ls -al – форматированный список со скрытыми каталогами и файлами 

cd dir – сменить директорию на dir 

cd – сменить на домашний каталог 

pwd – показать текущий каталог 

mkdir dir – создать каталог dir 

rm file – удалить file 

rm -r dir – удалить каталог dir 

rm -f file – удалить форсированно file 

rm -rf dir – удалить форсированно каталог dir * 

cp file1 file2 – скопировать file1 в file2 

cp -r dir1 dir2 – скопировать dir1 в dir2; создаст каталог dir2, если он не существует 

mv file1 file2 – переименовать или переместить file1 в file2. если file2 существующий каталог - переместить file1 в каталог file2 

ln -s file link – создать символическую ссылку link к файлу file 

touch file – создать file 

cat &gt; file – направить стандартный ввод в file 

more file – вывести содержимое file 

head file – вывести первые 10 строк file 

tail file – вывести последние 10 строк file 

tail -f file – вывести содержимое file по мере роста, начинает с последних 10 строк 


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


ps – вывести ваши текущие активные процессы 

top – показать все запущенные процессы 

kill pid – убить процесс с id pid 

killall proc – убить все процессы с именем proc * 

bg – список остановленных и фоновых задач; продолжить выполнение остановленной задачи в фоне 

fg – выносит на передний план последние задачи 

fg n – вынести задачу n на передний план 
Права доступа на файлы

chmod octal file – сменить права file на octal, раздельно для пользователя, группы и для всех добавлением: 

4 – чтение (r)
2 – запись (w)
1 – исполнение (x) Примеры: 

chmod 777 – чтение, запись, исполнение для всех 

chmod 755 – rwx для владельца, rx для группы и остальных. 


Дополнительные опции: man chmod. 

SSH

ssh user@host – подключится к host как user 

ssh -p port user@host – подключится к host на порт port как user 

ssh-copy-id user@host – добавить ваш ключ на host для user чтобы включить логин без пароля и по ключам 
Поиск

grep pattern files – искать pattern в files 

grep -r pattern dir – искать рекурсивно pattern в dir 

command | grep pattern – искать pattern в выводе command 

locate file – найти все файлы с именем file


Системная информация


date – вывести текущую дату и время 

cal – вывести календарь на текущий месяц 

uptime – показать текущий аптайм 

w – показать пользователей онлайн 

whoami – имя, под которым вы залогинены 

finger user – показать информацию о user 

uname -a – показать информацию о ядре 

cat /proc/cpuinfo – информация ЦПУ 

cat /proc/meminfo – информация о памяти 

man command – показать мануал для command 

df – показать инф. о использовании дисков 

du – вывести “вес” текущего каталога 

free – использование памяти и swap 

whereis app – возможное расположение программы app 

which app – какая app будет запущена по умолчанию 


Архивация


tar cf file.tar files – создать tar-архив с именем file.tar содержащий files 

tar xf file.tar – распаковать file.tar 

tar czf file.tar.gz files – создать архив tar с сжатием Gzip 

tar xzf file.tar.gz – распаковать tar с Gzip 

tar cjf file.tar.bz2 – создать архив tar с сжатием Bzip2 

tar xjf file.tar.bz2 – распаковать tar с Bzip2 

gzip file – сжать file и переименовать в file.gz 

gzip -d file.gz – разжать file.gz в file 
Сеть

ping host – пропинговать host и вывести результат 

whois domain – получить информацию whois для domain 

dig domain – получить DNS информацию domain 

dig -x host – реверсивно искать host 

wget file – скачать file 

wget -c file – продолжить остановленную закачку 
Установка пакетов


Установка из исходников: 


./configure 

make 

make install 

dpkg -i pkg.deb – установить пакет (Debian) 

rpm -Uvh pkg.rpm – установить пакет (RPM) 
Клавиатурные сочетания

Ctrl+C – завершить текущую команду 

Ctrl+Z – остановить текущую команду, продолжть с fg на переднем плане или bg в фоне 

Ctrl+D – разлогиниться, тоже самое, что и exit 

Ctrl+W – удалить одно слово в текущей строке 

Ctrl+U – удалить строку 

!! - повторить последнюю команду 

exit – разлогиниться


 