Ssh
Содержание:
- Как использовать SSH?
- Формат файла ssh_known_hosts
- Авторизация SSH по ключам
- Использование ключа
- Dynamic Port-Forwarding
- Навигация
- Подключение по SSH к хосту в VPN
- Настроить SSH-туннелирование в Windows
- Настройка SSH в Ubuntu
- Как пользоваться PuTTY
- Как работает SSH
- Примеры использования SSH
- Запустить SSH в фоновом режиме
- SSH-туннелирование
- Передача стандартного вывода с локальной машины на удалённую по ssh
Как использовать SSH?
Для использования PuTTY необходимо скачать и инсталлировать приложение, после чего в графическом интерфейсе можно осуществить настройку программы. Приложение имеет 4 вкладки:
- Session. В этой вкладке осуществляется настройка подключения к серверу.
- Terminal. Здесь можно корректировать настройки работы терминала, через который и осуществляется вся работа.
- Connection. В этой вкладке можно задать параметры подключения, выбрать алгоритм шифрования и задать другие настройки соединения.
- Window. В этом окне пользователь может выбрать внешний вид приложения, изменить шрифт и цвет текста.
В PuTTY , как и других приложениях для запуска SSH-протокола, используются два основных метода аутентификации: по паролю и по ключу.При использовании аутентификации по паролю пользователь использует для установки соединения персональный логин и пароль.
В случае использования ключа предварительно генерируются открытый (на устройстве, к которому будут подключаться) и закрытый (на устройстве, с которого будет происходить подключение) ключи для каждого отдельного пользователя. Эти файлы не передаются во время аутентификации, система только проверяет, чтобы владелец открытого ключа владел и закрытым. Этот метод используется для автоматического входа в удаленный ПК.
В PuTTY для управления удаленным ПК используется терминал: и команды, и передача файлов осуществляются только через него.
SSH — один из самых безопасных протоколов для реализации удаленного доступа к ПК. Современные алгоритмы шифрования и широкий выбор инструментов для настройки протокола делают его самым популярным вариантом для удаленного администрирования компьютеров и безопасной передачи данных. Наш виртуальный хостинг сайтов поддерживает работу SSH во всех тарифных планах хостинга.
Формат файла ssh_known_hosts
В файлах /etc/ssh/ssh_known_hosts и ~/.ssh/known_hosts хранятся открытые ключи всех машин, с которыми когда-либо устанавливалась связь. Глобальный файл должен быть подготовлен администратором (это необязательно), пользовательский файл поддерживается автоматически: каждый раз, когда поступает запрос на соединение от неизвестной машины, её ключ автоматически заносится в пользовательский файл.
Каждая строка в этом файле содержит следующие поля: имена хостов, битность, порядок, модуль, комментарий. Поля разделены пробелами.
Имена хостов — это разделённый запятыми список шаблонов (символы подстановки — «*» и «?»); каждый шаблон сопоставляется с каноническим именем машины (при аутентификации клиента) или с именем, которое указано пользователем (при аутентификации сервера). Этот шаблон может также быть предварён знаком «!» для обозначения отрицания: если имя машины соответствует отрицаемому шаблону, оно будет отвергнуто (этой строкой) даже если оно соответствует другому шаблону в этой же строке. Также можно, заключив имя хоста или IP-адрес в квадратные скобки «» и «», через «» указать нестандартный порт.
Вместо имён хостов можно записывать их хэши. Это позволит скрыть их от злоумышленника в случае попадания файла в его руки. Для различия хэшей от имён хостов первые предваряются символом «|». На одной строке может быть не больше одного хэша, операция отрицания в этом случае не доступна.
Разрядность, порядок и модуль копируются из ключа хоста RSA, например, /etc/ssh/ssh_host_key.pub. Необязательное поле комментария занимает всю оставшуюся часть строки и игнорируется.
Комментариями также считаются пустые и строки начинающиеся с «#».
Идентификация машины принимается, если любая совпавшая строка содержит правильный ключ. Таким образом, можно (хотя это не рекомендуется) иметь несколько строк или различных ключей для одного и того же хоста. Это неизбежно случается при помещении в файл кратких форм имён хостов из различных доменов. В файлах может содержаться противоречивая информация. Идентификация принимается, если адекватная информация имеется в любом из них.
Примечание! Заметьте, что строки в этих файлах, обычно имеют длину в несколько сотен символов и, очевидно, не стоит вводить имена хостов вручную. Вместо этого их можно сгенерировать при помощи сценария оболочки или взять из файла /etc/ssh/ssh_host_key.pub, добавив в начале имя хоста.
Пример файла ssh_known_hosts:
# допустимы явные комментарии только на всю строку closenet 192.0.2.53 1024 37 159...93 closenet.example.net cvs.example.net,192.0.2.10 ssh-rsa AAAA1234 = # хэш имени хоста |1|JfKTdBh7rNbXkVAQCRp4OQoPfmI=|USECr3SWf1JUPsms5AqfD5QfxkM= ssh-rsa AAAA1234 =
Авторизация SSH по ключам
Намного безопаснее, удобнее и правильнее будет настроить ssh авторизацию без пароля. Для этого будет использоваться авторизация по ключу.
Итак, вот инструкция:
-
Распаковываем архив, открываем PUTTYGEN:
-
Вводим и выбираем всё как на скриншоте: и ключ длиной и жмём Generate
Во время генерации ключей водим мышкой по специальному полю под статусной строкой, чтобы пошла генерация ключей (она использует набор из координат мыши) -
Теперь нужно заполнить (это пароль для доступа к приватному ключу). Заполнять не обязательно, но его наличие повысит безопасность, так как любой, кто имеет доступ к приватному ключу, сможет с его помощью авторизоваться на сервере по ssh:
- Сохраним приватный ключ где-нибудь в надёжном месте — . Назовём его, к примеру,
- А вот публичный ключ нужно сохранить на сервере, куда устанавливаем доступ — Назовём его . Авторизуемся по ssh по паролю и переходим в директорию пользователя, под которым будет происходить авторизация.
Итак, копируем файл в .
Далее нужно импортировать данные в файлssh-keygen -i -f /root/.ssh/sheensay.ru.pub >> /root/.ssh/authorized_keys
После можно удалить
- Осталось настроить подключение. Я пользуюсь Far Manager в связке с плагином WinSCP.
Открываем Far Manager, Alt + F1, выбираем , далее Shift + F4 и настроим наше подключение. Допустим, мы сохранили приватный файл в
При настройке нужно будет указать IP или доменное имя на нём для доступа к серверу, порт, на котором висит SSH, имя пользователя и путь к приватному файлу-ключу - Подключаемся. Если при генерации ключей вы вводили пароль, то в этом случае при подключении у вас будет запрашивать пароль к приватному файлу.
Подключение настроено. Если что-то сделали не так, при авторизации появится ошибка , то есть Сервер не принял наш ключ. В этом случае пройдитесь по всем пунктам последовательно и поищите ошибку
Отключить авторизацию по паролю
Теперь, когда всё настроено, совсем не лишним будет отключить авторизацию по паролю. Для этого внесём изменения в конфигурационный файл:
PasswordAuthentication no
Использование ключа
Ввод пароля для подключения через SSH — раздражающая процедура. У меня почти никогда не получалось ввести его правильно с первого раза. Поэтому я начал искать информацию о том, как подключиться к серверу через SSH без пароля. Простое и безопасное решение — использование ключа. Почему это безопаснее? Потому что пароль можно подобрать. Чтобы исключить такую вероятность, многие пользователи выбирают авторизацию с помощью ключа.
Суть процедуры в формировании двух ключей: публичного и приватного. Первый копируется на сервер, а второй остается на компьютере пользователя и не передается по сети. В таком случае пароль при подключении не требуется. Когда вы подключаетесь к серверу через SSH, публичный ключ взаимодействует с приватным и открывает доступ к удаленному управлению.
Генерирование ключа и подключение на Windows
Для удобства используем программу PuTTy. Вместе с ней устанавливается утилита PuTTYgen — в ней можно сгенерировать публичный и приватный ключи.
- Запустите программу PuTTYgen.
- Нажмите на кнопку Gengerate.
- Водите курсором мышки по рабочему столу, чтобы сгенерировать случайные значения ключей.
- Нажмите на кнопку Save private key, чтобы сохранить на жестком диске приватный ключ. Место хранения может быть любым — его нужно указать в параметрах PuTTY. Сделаем это позже.
- Скопируйте публичный ключ в буфер обмена (Ctrl + C) и закройте генератор ключей.
Теперь нужно перенести публичный ключ на сервер. Запустите программу PuTTY и подключитесь к серверу с помощью пароля. Затем последовательно введите следующие команды:
mkdir ~/.ssh chmod 0700 ~/.ssh touch ~/.ssh/authorized_keys chmod 0644 ~/.ssh/authorized_keys
Эти команды создают на сервере папку и файл для хранения ключей, а также ограничивают к ним доступ — получить его может только владелец.
Следующий шаг — вставка публичного ключа из буфера обмена в файл authorized_keys. Для этого используется команда cat > .ssh/authorized_keys. После ввода команды щелкните по окну терминала правой кнопкой, чтобы вставить скопированный ранее публичный ключ. Для завершения ввода нажмите на сочетание клавиш Ctrl+D.
Вернитесь в настройки PuTTY. Перейдите в раздел Connection — SSH — Auth. Нажмите на кнопку Browse и укажите путь к приватному ключу, который вы ранее сохранили на жестком диске.
Теперь для подключения к серверу через SSH пароль не нужен — достаточно указать логин и IP-адрес сервера.
Генерирование ключа и подключение на Linux и macOS
Теперь посмотрим, как подключиться через SSH ключи на Linux и macOS.
- Запустите терминал на локальном компьютере.
- Выполните команду ssh-keygen, чтобы сгенерировать ключи.
- Нажмите на Enter, чтобы сохранить ключи.
Генератор предложит также задать кодовую фразу для ключа. Это дополнительная мера безопасности: если кто-то получит доступ к вашей локальной машине, то все равно не сможет подключиться к серверу через SSH. Минус один — вам тоже придется постоянно вводить ключевую фразу. Можно отказаться от этой меры защиты, просто нажав на клавишу Enter.
На этом процедура создания ключей завершена. Файлы d_rsa (приватный ключ) и id_rsa.pub (публичный ключ) хранятся в папке ~/.ssh/. Осталось скопировать открытую часть ключа на сервер.
- Вернитесь в терминал.
- Выполните команду ssh-copy-id root@185.104.114.90, где root — логин для подключения к серверу по SSH, а 185.104.114.90 — IP-адрес или хост сервера.
После выполнения этой команды публичный ключ будет скопирован на сервер. Теперь вы можете подключаться к удаленной машине с помощью логина и IP-адреса — например, ssh root@185.104.114.90. Ключи будут сопоставляться автоматически.
Отключение запроса пароля
Суть приватных ключей в том, что они хранятся на локальных компьютерах. Если вы попытаетесь подключиться к серверу с другой машины, на которой нет ключа, то снова увидите запрос на ввод пароля. Чтобы авторизоваться можно было только по ключу, запретите использование пароля.
- Подключитесь к удаленному серверу.
- Выполните команду sudo nano /etc/ssh/sshd_config. Файл sshd_config откроется во встроенном текстовом редакторе.
- Найдите строку PasswordAuthentication yes и измените ее на PasswordAuthentication no.
- Сохраните изменения и перезапустите службу SSH командой sudo service ssh restart.
Авторизация по паролю отключена. Теперь подключиться к серверу можно только с помощью пары ключей.
Dynamic Port-Forwarding
As outlined above, static port-forwarding feature requires the client to set up the tunnel
source port and destination before making the connection.
This problem is addressed by secure shell’s dynamic port forwarding. With dynamic port forwarding,
the client sets up a listening port (as with normal port fowarding), but when a software connects
to the port, it can tell the client which host and port it wants to connect to. This is done
in the same way that client software can request connections from SOCKS proxies.
The ssh client will then forward the connection request to the secure shell server which makes
the connection to the destination host. This way, the ssh client could let an unencrypted ftp
software access ftp servers on the remote network through an encrypted data channel.
Навигация
Вывод текущей рабочей директории
Для вывода информации о текущей рабочей директории используется команда pwd.
Пример использования:
username@server:~$ pwd /home/u/username
Вывод содержимого директории
Чтобы посмотреть содержимое директории, воспользуйтесь командой ls.
Вывод содержимого текущей директории в несколько колонок (только имена файлов и директорий):
ls .
Вывод содержимого текущей директории в одну колонку (только имена файлов и директорий):
ls -1
Вывод подробной информации о содержимом текущей директории, включая скрытые файлы (имя которых начинается с точки):
ls -la
Вывод содержимого конкретной директории:
ls имя_директории
Пример использования:
username@server:~$ ls -la total 16 drwx------ 4 username customers 4096 Mar 10 12:56 . drwx------ 14 username customers 4096 Mar 10 12:55 .. -rw------- 1 username customers 0 Mar 10 12:56 .htaccess drwx------ 2 username customers 4096 Mar 10 12:55 test drwx------ 2 username customers 4096 Mar 10 12:55 test1 -rw------- 1 username customers 0 Mar 10 12:55 test.txt где "." - текущий каталог, а ".." - родительский каталог.
Перемещение между директориями
Команда cd позволяет выполнить переход в другую директорию.
Основные способы применения:
Перейти в директорию, которая находится в текущей директории:
cd dirname
Перейти в родительский каталог (на уровень выше):
cd ..
Перейти в домашний каталог:
cd # Либо: cd ~
Перейти в домашний каталог по абсолютному пути (начиная с корня):
cd /home/u/username
Перейти в предыдущий каталог:
cd -
Примеры использования:
# Текущая директория отображается после двоеточия и до символа "$". # Перейти в каталог media username@server:~$ cd /home/u/username/public_html/media # Перейти в каталог cms username@server:~/public_html/media$ cd cms # Перейти в домашний каталог username@server:~/public_html/media/cms$ cd # Перейти в предыдущий каталог username@server:~$ cd - /home/u/username/public_html/media/cms # Перейти на уровень выше username@server:~/public_html/media/cms$ cd .. username@server:~/public_html/media$
Подключение по SSH к хосту в VPN
VPN, то есть виртуальная частная сеть, состоит из подключённых к ней хостов, которые могут быть разбросаны по всему миру, но которые благодаря VPN объеденены в одну локальную сеть, внутри которой каждый узел может связываться с другим по локальному IP адресу. Причём соединения надёжно зашифрованы и сторонние лица не смогут узнать, какой именно трафик передаётся внутри VPN.
Предположим, я хочу подключиться по SSH к компьютеру, который находится в VPN к которой я также подключён. В этом случае я могу подключиться указав IP интересующего меня компьютера в VPN сети, например:
ssh root@10.8.0.1
Некоторую дополнительную информацию смотрите .
Настроить SSH-туннелирование в Windows
-
Запустите Putty и введите IP-адрес SSH-сервера в поле .
-
В меню « разверните и выберите « . Установите переключатель для настройки локального, для удаленного и для динамической переадресации портов.
- При настройке локальной переадресации введите локальный порт пересылки в поле « а в поле « введите хост и IP-адрес назначения, например .
- Для перенаправления удаленного порта введите порт перенаправления удаленного SSH-сервера в поле а в поле введите целевой хост и IP-адрес, например .
- При настройке динамической пересылки введите только локальный порт SOCKS в поле .
-
Нажмите кнопку « , как показано на изображении ниже.
-
Вернитесь на страницу чтобы сохранить настройки, чтобы не вводить их каждый раз. Введите имя сеанса в поле « и нажмите кнопку « .
-
Выберите сохраненный сеанс и войдите на удаленный сервер, нажав кнопку « .
Появится новое окно с запросом вашего имени пользователя и пароля. После того, как вы введете свое имя пользователя и пароль, вы войдете на свой сервер, и будет запущен туннель SSH.
Настройка аутентификации с открытым ключом позволяет вам подключаться к вашему серверу без ввода пароля.
Настройка SSH в Ubuntu
С параметрами по умолчанию сервер SSH не очень безопасен поэтому перед тем, как программа будет готова к полноценному использованию ее нужно немного настроить. Все настройки сервера SSH хранятся в конфигурационном файле sshd_config, который находится в папке /etc/ssh.
Перед тем как вносить изменения в этот конфигурационный файл рекомендуется сделать его резервную копию, для этого можете использовать такую команду:
Дальше вы можете перейти к настройке конфигурационного файла:
Первым делом желательно сменить порт, на котором работает ssh, возможный злоумышленник не знал включен ли у вас этот сервис. Найдите в конфигурационном файле строчку Port и замените ее значение на любое число, например, Port 2222:
По умолчанию вход от имени суперпользователя включен, рекомендуется отключить такую возможность. Для этого найдите строчку PermitRootLogin и замените ее значение на no:
Чтобы разрешить аутентификацию по ключу, а не по паролю найдите строку PubkeyAuthentication и убедитесь, что ее значение yes.
Как настроить авторизацию по ключу в SSH читайте здесь. После того как все настройки будут завершены, сохраните изменения нажав :w и перезапустите службу SSH:
Более подробно про настройку и использование различных тонкостей ssh рассказано в статье как использовать ssh.
Если вы изменили порт, то при подключении в клиенте тоже нужно указать новый порт, так как по умолчанию будет использоваться 22, например:
К тому же, если на компьютере установлен и настроен брандмауэр, то в нем тоже нужно разрешить доступ к новому порту ssh, для этого выполните:
Даже если служба ssh находится на порту по умолчанию, его тоже нужно открыть в брандмауэре если вы собираетесь подключаться к компьютеру через интернет:
Настройка ssh Ubuntu 20.04 полностью завершена.
Как пользоваться PuTTY
1. Интерфейс программы
Сразу же после запуска программы из меню пуск вы увидите графический интерфейс ее настройки. После подключения вы будете видеть только терминал, но настроить программу можно через удобный интерфейс.
Рассмотрим за что отвечают те или иные вкладки программы, чтобы вы ориентировались что и где искать. У нас есть четыре вкладки:
- Session — отвечает за подключение удаленному серверу, тут мы вводим параметры подключения, порт, адрес, а также можем сохранить все настройки putty, чтобы не настраивать каждый раз заново.
- Terminal — позволяет включать или отключать возможности терминала;
- Window — настройка внешнего вида окна, цвет, шрифт, кодировка;
- Connection — настройка параметров подключения, алгоритма шифрования, сжатия, ключей аутентификации, X11 и других параметров.
Каждая вкладка имеет несколько подразделов, но мы не будем сейчас их трогать, а перейдем сразу к практике и посмотрим как подключиться putty к удаленному узлу.
2. Подключение к удаленному компьютеру PuTTY
Чтобы подключиться к удаленному компьютеру по SSH перейдите на вкладку «Session», здесь, в поле «Host Name» необходимо прописать ip адрес или имя хоста, компьютера, к которому вы хотите подключиться, в поле порт — нужно указать порт, на котором запущен SSH сервер, по умолчанию используется порт 22:
Далее, нажмите кнопку «Open». После этого появится запрос на добавление ключа сервера в список доверенных ключей, нажмите «Да»:
Затем вам будет нужно ввести логин пользователя и пароль
Важно заметить, что скопировать логин или пароль у вас не получится, необходимо только вводить вручную:
Теперь авторизация прошла успешно, и вы можете выполнять нужные действия на сервере:
3. Сохранение сессии PuTTY
Чтобы не вводить каждый раз ip и порт можно сохранить эти данные в виде сессии, для этого пропишите новое имя в поле «Saved Sessions», а затем нажмите кнопку «Save»:
Теперь вы сможете загрузить сохраненную сессию, нажав кнопку «Load».
После того как будет завершена настройка putty и все параметры будут выставлены правильно вы можете сохранить настройки и не вводить их несколько раз.
4. Имя пользователя по умолчанию
Вы можете не вводить имя пользователя каждый раз, для этого перейдите на влкадку «Connection», затем «Data» и в поле «Auto-login Username» пропишите имя пользователя, например, root:
Теперь подключение putty будет выполняться от имени этого пользователя.
5. Авторизация по ключу ssh в PuTTY
Чтобы не вводить каждый раз пароль можно настроить авторизацию по ключу. В Linux такая возможность используется очень широко потому что это удобно. Первым делом необходимо создать ключ. Для этого запустите утилиту PuTTYgen и установите переключатель в положение «SSH-2 RSA» нажмите «Generate»:
Обязательно ключ должен быть SSH-2 RSA, если в главном окне нет, выберите в меню «Key». Подвигайте мышкой, чтобы создать достаточное количество энтропии:
Ключ готов, затем, с помощью кнопок «Save Public Key» и «Save Private Key» сохраните оба ключа.
Далее, откройте PuTTY, перейдите на вкладку «Connection», затем «SSH», затем «Auth»:
Здесь необходимо нажать кнопку «Browse» и добавить недавно сохраненный приватный ключ:
Далее, возвращаемся на вкладку «Session», выбираем наше сохранение и нажимаем «Save» чтобы сохранить настройки. Осталось только отправить наш открытый ключ на сервер. Для этого авторизуйтесь на нем с помощью пароля и открытый ключ вставьте ключ в конец файла /root/.ssh/authorized_keys.
Ключ можно брать прямо из окна PuTTYgen «Public key for pasting» или из файла открытого ключа:
Все, теперь можно выходить и авторизоваться снова. На этот раз подключение по ssh putty будет выполняться с помощью нашего ключа. Не забывайте сохранять настройки сессии, чтобы не выбирать ключ каждый раз. Теперь вы знаете как пользоваться программой putty, рассмотрим еще передачу файлов.
5. Передача файлов через scp в PuTTY
Не все знают, но PuTTY позволяет передавать файлы через ssh также как это делает linux с помощью утилиты scp. Нажмите Win+R, затем пропишите cmd, чтобы запустить командную строку.
Синтаксис утилиты pcsp выглядит следующим образом:
pscp опции путь_файлу имя_пользователя@хост/путь/к/файлу/на/удаленном/хосте
Например, мы можем отправить файл из текущей папки в папку пользователя /root/:
С помощью опции -P можно задать удаленный порт:
А опция load позволяет загрузить сохраенные настройки сессии PuTTY:
Теперь вы знаете как использовать putty для передачи файлов.
Как работает SSH
Если вы используете Linux или Mac, тогда использование SSH для вас не составит особого труда. Если вы используете Windows, вам необходимо установить SSH-клиент для подключения. Самым популярным SSH-клиентом является PuTTy, о котором вы можете узнать подробнее здесь.
Для пользователей Mac и Linux, перейдите к вашей программе терминала и следуйте инструкциям ниже:
SSH команда состоит из 3 отдельных частей:
ssh {user}@{host}
Часть с SSH даст системе знать, что вы хотите открыть SSH соединение. {user} даст системе сведения об аккаунте к которому вы хотите подключиться. К примеру, вы захотите получить доступ в качестве root пользователя, который фактически является синонимом для администратора системы с полными правами на изменение любых данных в системе. {host} означает компьютер к которому вы хотите подключиться. Это может быть IP адрес или доменное имя (например www.домен.xyz).
Когда вы нажмёте Enter, вылезет окно с просьбой ввести пароль от запрошенного аккаунта. Когда вы его введёте не последует никаких сообщений, однако, ваш пароль будет передан. После того, как вы закончите ввод пароля, нажмите кнопку Enter дважды вновь. Если ваш пароль правильный, то вас встретит окно терминала удаленного управления.
Если вы хотите узнать больше об SSH командах, посетите данное руководство.
Примеры использования SSH
Команда подключения к локальному SSH-серверу из командной строки GNU/Linux или FreeBSD для пользователя pacify (сервер прослушивает нестандартный порт 30000):
$ ssh -p 30000 pacify@127.0.0.1
Генерация пары ключей (в UNIX-подобных ОС) осуществляется командой
$ ssh-keygen
Генерация пары SSH-2 RSA-ключей длиной 4096 бита программой puttygen под UNIX‐подобными ОС:
$ puttygen -t rsa -b 4096 -o sample
Некоторые клиенты, например, PuTTY, имеют и графический интерфейс пользователя.
Для использования SSH в Python существуют такие модули, как python-paramiko и python-twisted-conch.
Запустить SSH в фоновом режиме
Существует несколько способов запустить ssh соединение в фоновом режиме — то есть освободим текущий терминал.
-L, screen, tmux, nohup
Мне запустить ssh фоном из скрипта помог nohup, поэтому начнём с него
nohup ssh user@host «cd scripts;python3 my_script.py $ARG1 $ARG2; exit» &
Для чего это было нужно: Python скрипт сначала
открывал одно ssh соединение из
subprocess
там выполнялась команда для запуска
мониторинга потребления памяти
и больше от этого соединения ничего было не нужно, зато необходимо было
выполнять новые соединения с нагрузкой из другого скрипта.
Чтобы уйдя из первого подключения не оборвать мониторинг потребления памяти
перед ssh нужно было добавить nohup, а в самом конце поставить &
SSH-туннелирование
SSH-туннель — это туннель, создаваемый посредством SSH-соединения и используемый для шифрования туннелированных данных. Используется для того, чтобы обезопасить передачу данных в Интернете (аналогичное назначение имеет IPsec). При пересылке через SSH-туннель незашифрованный трафик любого протокола шифруется на одном конце SSH-соединения и расшифровывается на другом.
Практическая реализация может выполняться несколькими способами:
- Созданием Socks-прокси для приложений, которые не умеют работать через SSH-туннель, но могут работать через Socks-прокси
- Использованием приложений, умеющих работать через SSH-туннель.
- Созданием VPN-туннеля, подходит практически для любых приложений.
- Если приложение работает с одним определённым сервером, можно настроить SSH-клиент таким образом, чтобы он пропускал через SSH-туннель TCP-соединения, приходящие на определённый TCP-порт машины, на которой запущен SSH-клиент. Например, клиенты Jabber подключаются по умолчанию на порт 443. Тогда, чтобы настроить подключение к серверу Jabber через SSH-туннель, SSH-клиент настраивается на перенаправление подключений с любого порта локальной машины (например, с порта 4430) на удалённый сервер (например, jabber.example.com и порт 443):
$ ssh -L 4430:jabber.example.com:443 somehost
В данном случае Jabber-клиент настраивается на подключение к порту 4430 сервера localhost (если ssh-клиент запущен на той же машине что и Jabber-клиент).
Для создания ssh-туннеля необходима машина с запущенным ssh-сервером и доступом к jabber.example.com. Такая конфигурация может использоваться в случае, если с локальной машины доступ к jabber.example.com закрыт файерволом, но есть доступ к некоторому ssh-серверу, у которого ограничения доступа в Интернет отсутствуют.
Передача стандартного вывода с локальной машины на удалённую по ssh
Не менее интересный вариант выполнения команд будет приведён немного ниже:
cat .ssh/id_rsa.pub | ssh mial@192.168.1.36 'cat >> .ssh/authorized_keys'
Команда cat построчно считывает и отображает содержимое файла .ssh/id_rsa.pub, расположенного на локальной машине.
| (труба) передаёт то, что должно было бы появиться в стандартном выводе, другой команде.
Вместо команды, которая должна была бы обрабатывать передаваемые ей строки, происходит соединение к удалённой системе (ssh mial@192.168.1.36).
На удалённую систему приходят строки, для которых предусмотрена команда cat >> .ssh/authorized_keys. Т.е. содержимое стандартного вывода построчно записывается в файл .ssh/authorized_keys, находящийся на удалённой машине.