Как настроить и пользоваться SSH с помощью OpenSSH в Linux.

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

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

Для начала установим сервер и клиент:

1
sudo apt-get install openssh-server openssh-client

После установки все работает из коробки, можно проверить подключение командой

1
ssh -l login 127.0.0.1

Поговорим о важных параметрах настройки сервера SSH.

1
sudo nano /etc/ssh/sshd_config

ListenAddress — можем ограничить IP, которые будет слушать сервер.

Port — по умолчанию 22, я люблю вешать на 443, так как часто пользуюсь SSH из публичных мест, где 22 порт частенько зарезан.

LoginGraceTime — время ожидания ввода логина-пароля, после чего сеанс будет завершен.

PermitRootLogin — Разрешать ли логиниться пользователю root. Естественно ставим no.

Остальные параметры обычно имеет смысл менять только если есть нетривиальные задачи по использованию.

Итак, сохраняем конфигурацию и перезагружаем сервер

1
sudo /etc/init.d/ssh restart

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

1
ssh-keygen

Без параметров она сделает все, как надо. Не забудьте указать passphrase, все-таки секьюр он такой секьюр.

Программа сгенерирует два файла:

~/.ssh/id_rsa.pub — Открытый ключ, передающийся на хост назначения.

~/.ssh/id_rsa — Закрытый ключ. Его никогда и никуда передавать не надо.

Берем содержимое pub и сохраняем в файл на сервере ~/.ssh/authorized_keys каталога пользователя, под которым хотим ходить на сервер.

После этого можем заходить на сервер простой командой

1
ssh login@HOST

Итак, я выполнил обязательную программу подобных туториалов, теперь поговорим о более интересных вещах. Что-же умеет SSH? Да все! Многое. Ниже приведу список того, для чего можно использовать SSH. Список не полный, всегда есть простор для творчества.

  • Алиасы, очень удобная фича, редко кто использует, а зря.
  • Передача файлов. Про это некоторые даже знают.
  • Удаленный запуск программ
  • Форвардинг X сервера
  • Socks Proxy

Поговорим подробнее о этих фичах.

  1. Алиасы.

Представим себе, что у нас 20 серверов, на которые хотим ходить. Ну и ленивы мы в меру. Куда приятнее ходить по SSH используя команду

1
ssh server1

чем например

1
ssh -p443 cvetik@server.v.jope.mira.ru

Для этого создадим файл ~/.ssh/config

Вот пример его содержания:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
 Host server1 
     Hostname server.v.jope.mira.ru 
     User cvetik 
     ForwardX11 yes 
     Compression yes 
     Port 443
 Host server2 
     Hostname 192.168.0.1 
     User semicvetik 
     Protocol 1

И т.д. Поддерживаемые команды можно изучить в man ssh_config. Так-же стоит отметить, что можно использовать этот файл для определения настроек по умолчанию:

1
2
3
Host *
User cvetik
Compression yes

Конечно, можно определить их в /etc/ssh/sshd_config, но в этом случае они будут применяться для всех пользователей, что не всегда удобно.

Передача файлов.

Есть такой замечательный инструмент — scp. Кстати алиасы для SSH сильно упрощают работу с ним. Проверено.

Синтаксис крайне прост:

Передадим файл на сервер

1
scp /file/on/localhost user@host:/file/on/remotehost

Заберем файл с сервера

1
scp user@host:/file/on/remotehost /file/on/localhost

Удаленный запуск программ.

Крайне полезная и приятная вещь — выполнить удаленную команду и закрыть соединение.

Например:

1
ssh user@server ls /Users/Cvetik/

Если приложению требуется управляющий терминал, просто добавим ключ -t

Хотим сохранить вывод удаленной команды в локальный файл? Элементарно:

1
ssh user@server ls /Users/Cvetik/ >file.txt

Все описанное далее — шаманство в понимании большинства, но мы админы — шаманство наш конек. Так что поехали.

Форвардинг X сервера.

Предположим у нас есть рабочая станция с иксами, мы хотим приконнектиться по ssh к некоему гейту и с него зайти на RDP. Нет ничего проще:

1
ssh -XYC cvetik@server.v.jope.mira.ru desktop -k en-us rdphost -g 1280x1024

При этом, в отличие от RDP, траффик зашифрован и может отлично жаться SSH.

Используя алиасы, можно упростить ввод:

~/.ssh/config

1
2
3
4
5
6
Host rdpssh
    Hostname server.v.jope.mira.ru
    User cvetik
    ForwardX11 yes
    ForwardX11Trusted yes
    Compression yes

Далее простая команда

1
ssh rdpssh rdesktop -k en-us rdphost -g 1280x1024

Кстати никто не мешает так-же загнать ее в алиас никсов.

1
alias rdpserv1='ssh rdpssh rdesktop -k en-us rdphost -g 1280x1024'

После этого просто пишем

1
rdpserv1

и бинго.

Socks Proxy.

Итак, мы перешли к пункту, из-за которого я так любою вешать сервер на порт 443. Представим себе, что мы в европейской (или еще актуальнее — азиатской) гостинице, в которой естественно закрыт 22 порт, да и многие другие тоже.

443 порт оказывается очень удобен в нашей ситуации. А Socks Proxy позволит не опасаться перехвата данных непонятным хотспотом. Кстати ничто не мешает нашему серверу слушать сразу два порта, для этого в конфигурацию сервера впишем следующее:

1
2
Port 22
Port 443

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

Итак, введем команду проброса:

1
ssh -D 8080 cvetik@server.v.jope.mira.ru

После запуска остается лишь настроить наши приложения, которые мы хотим пускать по ssh, на socks-proxy localhost по порту 8080.

В общем и целом написал все, что хотел. Спасибо за внимание. Ciao.


Смотрите также

comments powered by Disqus