Упрощаем Жизнь с SSH config Файлом

SSH config

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

  • Заливка файлов на сервер
  • Мониторинг состояния сервера
  • Манипуляции файлами и папками, разрешениями

то не торопитесь закрывать страницу. Вполне вероятно, что здесь найдётся что-то интересное или новое.

Для начала предположим, что вы используете любую Unix-based систему. Для пользователей Putty на Windows придётся почитать мануалы, так как программа сохраняет конфигурацию в файле putty.conf и синтаксис может отличаться. К тому же Putty отлично вызывается из WinSCP, где можно хранить параметры подключения для каждого конкретного хоста.

Если впереди строки стоит символ доллара ($), значит мы в терминале, а его вбивать не надо.

Шелл алиасы (синонимы)

Итак, самый простой вариант, это когда мы соединяемся со своим сервером без ключей, по паролю.

$ ssh ig[email protected] -p 22000
password: *************

Всё, что от нас требуется, это указать имя пользователя и пароль, а также порт, если он отличается от стандартного (-p 22). Вроде бы неплохо, но придётся запоминать или копировать откуда-то пароли, что страшно раздражает.

Давайте улучшим ситуацию и используем для соединения с сервером свой приватный ключ. В таком случае в командную строку надо будет вбить всего лишь

$ ssh [email protected] -p 22000

И мы на сервере!

Если вы не слышали, что такое public/private key pair (публичный и приватный ключи), то можно сгенерировать её командой

$ ssh-keygen -t rsa -C "[email protected]"

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

У нас есть авторизация по ключам, но команду, которую мы вбиваем в терминал, всё равно нельзя назвать простой.

Открываем файл .bashrc (или .zshrc, если вы используете ZSH — очень рекомендую!), как правило они лежат в домашней директории вашего юзера, и добавляем строчку алиаса

alias miwby='ssh [email protected] -p 22000'

Сохраняем файл, и записываем изменения командой

$ source .bashrc

Если у вас ZSH:

$ source .zshrc

Вуаля! Сейчас для соединения с нашим сервером достаточно вбить в терминал

$ miwby

У меня в системе подобных алиасов десятки, и не только для SSH, поэтому я завёл привычку добавлять к алиасам серверов префиксы и соединяюсь так

$ sshmiwby

Но выбор алиаса — исключительно на ваше усмотрение и фантазию.

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

alias sshmiwby="ssh -i ~/.ssh/id_rsa_2 [email protected] -p 22000″

Казалось бы, что все идеально, но мы можем улучшить систему ещё чуть чуть.

Файл ~/.ssh/config

Если его или папки пока не существует, их надо создать.

Записываем наш хост

Host miwby
  HostName miw.by
  Port 22000
  User igor

Намного более читабельно, не так ли? А сейчас укажем приватный ключ

Host miwby
  HostName miw.by
  Port 22000
  User igor
  IdentityFile ~/.ssh/id_rsa_2

А теперь представим, что мы настолько продвинутый юзер, что поставили или включили на сервер файрвол, который разрешает только веб и ssh подключения (так и надо делать, вообще-то).

В таком случае использование какой-нибудь программы управления MySQL, того же Sequel Pro, становится невозможным, ведь она ждёт, что на сервере будет открыт порт 3306, который мы не можем открыть по соображениям безопасности.

Проблему решает ssh туннель, который можно пробросить командой

$ ssh -f -N -L 9906:127.0.0.1:3306 [email protected]

В этом случае весь трафик с локального порта 9906 будет перекидываться на порт 3306 на удалённом сервере, что позволит десктопной программе соединиться с локалхостом и вести себя так же, как если бы она говорила напрямую с удалённым сервером по ожидаемому порту 3306.

НО! Огромное количество флагов не самая простая вещь для запоминания, поэтому воспользуемся ssh config файлом.

Host tunnel
  HostName database.example.comm
  IdentityFile ~/.ssh/id_rsa_2
  LocalForward 9906 127.0.0.1:3306
  User igor

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

$ ssh -f -N tunnel

Если этого вам показалось мало, отсылаю к манаулу по ssh_config . Доступных опций просто куча.

Если на компьютер можно переложить рутинные однообразные задачи, грех этого не делать. Будьте ленивыми!

Источник: Nerderati