bypassing-ru

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

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

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

Для использования SSH необходимо наличие учетной записи (аккаунта) на серверной машине, которой, как правило, является Unix или Linux сервер. Для обхода Интернет цензуры этот сервер должен иметь неограниченный доступ к сети Интернет и, в идеале,  он должен находиться под управлением надежного знакомого.  Некоторые компании продают аккаунты на своих серверах и многие планы веб хостинга предоставляют доступ по SSH. Список провайдеров учетных записей SSH вы можете найти здесь: http://www.google.com/Top/Computers/Internet/Access_Providers/Unix_Shell_Providers/. Они продают учетные записи по цене от 2 до 10 долларов США в месяц.

Программа работы с SSH называемая OpenSSH входит в дистрибутив большинства версий операционных систем Unix, Linux, и Mac OS. Эта программа, работающая через командную строку, запускается из терминала при наборе «ssh» и нажатии кнопки ввод. Для операционных систем Windows вы также можете получить бесплатную SSH программу, которая называется PuTTY.

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

Командная строка Linux/Unix и Mac OS (с программой OpenSSH)

Программа OpenSSH доступна для скачивания на сайте http://www.openssh.com/, но она, как правило, предустановлена на компьютерах с операционными системами Linux/Unix и Mac OS.

Программа ssh запускается из терминала операционной системы. Её окно содержит номер локального порта (обычно 1080), имя сервера и имя пользователя (название учетной записи). Выглядит это примерно так:
ssh -D localportnumber accountname@servername

Например:

ssh_1

После ввода пароля вы подключитесь к серверу. При использовании опции -D будет создан локальный SOCKS прокси-сервер. Он будет работать до тех пор, пока вы подключены к серверу. Важно: проверьте ключ хоста и настройте ваши приложения, в противном случае вы не используете созданный туннель.

Графический интерфейс пользователя в Windows (с программой PuTTY)

Программу PuTTY можно скачать с сайта:
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html.

При этом вы можете сохранить программу putty.exe на свой жесткий диск для дальнейшего использования или запустить её прямо с веб сайта (этот вариант больше подходит при работе на публичных компьютерах в библиотеке или Интернет кафе).

После запуска PuTTY появится диалоговое окно сеанса настройки. Сначала введите название хоста (адрес) SSH сервера, к которому вы собираетесь подключиться (в данном примере «example.com»). Если вам известен только его IP-адрес или если DNS блокирование не позволяет вам подключиться с использованием имени хоста, вы можете указать IP-адрес. Если вы планируете выполнять эти действия часто, вы при желании можете создать профиль PuTTY, в котором будет сохранена вся необходимая информация, так что она будет автоматически использоваться при каждом запуске.

PuTTY_config_1

Далее в списке категорий выберите «Подключение», затем «SSH» и затем «Туннели».

В поле «Порт источника» введите 1080 и выделите блоки "Dynamic" и "IPv4", как указано ниже.

PuTTY_config_2

Теперь нажмите на кнопку «Добавить», а затем «Открыть». Создастся подключение к серверу и откроется новое окно, запрашивающее имя пользователя и пароль.

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

Проверка ключа хоста

Когда вы подключаетесь к серверу в первый раз, вам необходимо подтвердить контрольную сумму ключа хоста для этого сервера. Контрольная сумма ключа хоста представляет собой длинную (шестнадцатеричную) последовательность букв и цифр. Выглядит она приблизительно так: 57:ff:c9:60:10:17:67:bc:5c:00:85:37:20:95:36:dd. Она надежно идентифицирует каждый конкретный сервер. Проверка контрольной суммы ключа хоста является мерой обеспечения безопасности, которая позволяет удостовериться, что вы подключились именно к тому серверу, к которому хотели, и ваше кодированное соединение не перехватывается.

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

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

Настройка приложений на использование прокси-сервера

Прокси-сервер, созданный описанным выше способом, должен работать до тех пор, пока вы не закроете программу SSH. Однако если ваше соединение с сервером оборвется, вам придется повторить те же действия для повторной активации прокси-сервера.

Если прокси-сервер установлен и работает нормально, вам необходимо настроить программные приложения на его использование. Если создавать прокси-сервер по описанному выше примеру, будет создан SOCKS прокси-сервер, расположенный на локальном хосте (localhost), номер порта 1080 (известный также как 127.0.0.1, порт 1080). Вам надо постараться настроить ваши приложения так, чтобы не допустить утечку DNS, которая может сделать SSH менее эффективным, не только для обеспечения конфиденциальности, но и для обхода Интернет цензуры.

Дополнительные опции

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

$ ssh remoteusername@othermachine.domain.org 'mkdir /home/myname/newdir'

Иногда вам необходимо выполнить на удаленном компьютере затратные по времени команды, но вы не уверены, что у вас будет достаточно времени в ходе текущей ssh сессии. Если вы прервете соединение с удаленным компьютером перед тем, как завершится выполнение команды, эта команда будет прервана. Чтобы не терять драгоценные плоды своего труда, вы можете запустить через ssh удаленную экранную сессию (screen session) и затем отключаться от неё и подключаться к ней в любое удобное для вас время. Чтобы отключиться от удаленной экранной сессии, просто закройте ssh соединение: при отключении от экранной сессии она продолжит работу на удаленном компьютере.

ssh предлагает множество других опций. Вы можете также создать свои любимые системы, которые будут позволять вам подключаться и запускать команды без необходимости введения вашего пароля при каждом подключении. Установка является сложной, но в результате позволяет сохранить время на наборе текста; попробуйте поискать информацию в веб по ключевым словам «ssh-keygen», «ssh-add» и «authorized_keys».

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

Протокол SSH выходит за рамки базовых ssh команд. Особенно полезной командой, основанной на протоколе SSH, является команда scp - команда безопасного копирования. Пример командной строки, отображенный ниже, показывает копирование файла с вашей текущей директории, расположенной на локальном компьютере, в директорию /home/me/stuff, расположенную на удаленном компьютере.

$ scp myprog.py me@othermachine.domain.org:/home/me/stuff

Обратите внимание на то, что команда заменит файл, находящийся по адресу /home/me/stuff/ и имеющий имя myprog.py. (Или вы получите сообщение об ошибке, если файл с таким именем уже существует в этой папке и у вас нет прав администратора, чтобы его заменить.) Если /home/me является вашей домашней директорией, целевая директория может быть указана в сокращенном виде.

$ scp myprog.py me@othermachine.domain.org:stuff

Вы можете также просто скопировать файлы в другом направлении: с удаленного на ваш  локальный компьютер.

$ scp me@othermachine.domain.org:docs/interview.txt yesterday-interview.txt

Файл на удаленном компьютере называется interview.txt в подпапке docs вашей домашней директории. Файл будет скопирован в домашнюю директорию вашего локального компьютера под названием yesterday-interview.txt

Команда scp может быть использована для копирования файла с одного удаленного компьютера на другой.

$ scp user1@host1:file1 user2@host2:otherdir

Чтобы рекурсивно скопировать все файлы и подпапки в директорию, используйте опцию -r.

$ scp -r user1@host1:dir1 user2@host2:dir2

Обратите внимание на главную страницу scp для получения информации о других опциях.

rsync: автоматизированная групповая пересылка данных и создание резервных копий

rsync это очень полезная команда, которая позволяет автоматически синхронизировать содержимое удаленной директории с локальной директорией. Мы упоминаем это здесь, так как это полезный способ использования командной строки для сетевой работы, как ssh, и потому что протокол SSH рекомендуется в качестве базового для передачи информации для команды rsync.

Ниже приведен простой и полезный пример. Эта команда копирует файлы с вашей локальной папки /home/myname/docs в папку под названием backup/, расположенную в вашей домашней директории в системе quantum.example.edu. Более того, команда rsync позволяет минимизировать объемы копируемой информации благодаря различным сложным сверкам данных.

$ rsync -e ssh -a /home/myname/docs me@quantum.example.edu:backup/

Опция -e к команде ssh позволяет использовать протокол SSH для передачи данных, как и рекомендуется. Опция -a (от «архив») позволяет копировать все содержимое указанной папки. Если вы хотите удалить файлы с локальной системы во время копирования, укажите опцию -delete.

Как упростить жизнь при частом использовании SSH

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

Файл конфигурации скрыт в вашей домашней директории в папке .ssh (полный путь будет примерно таким /home/jsmith/.ssh/config – если этот файл не существует, вы не можете его создать). Воспользуйтесь вашим любимым редактором, чтобы открыть этот файл и указать хосты, как указано ниже:

Host dev
HostName example.com
User fc

Как показано выше, в вашем файле конфигурации вы можете создать множество хостов. После того, как вы их сохранили, подключитесь к хосту, который вы назвали «dev», запустив следующую команду:

$ ssh dev

Запомните: чем чаще вы используете эти команды, тем больше времени вы экономите.