SSH Config

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

Представим ситуацию:

ssh -p 22 user@host1

Для 1 сервера набирать недолго, запомнить легко. А теперь представим 30-40-50 разных машин, с разными портами, именами пользователя и ip адресами.
В итоге имеем файлик:

ssh -p PORT_NUMBER user1@host1 # dev
ssh -p PORT_NUMBER user2@host2 # prod
...
ssh -p PORT_NUMBER user100@host100 # prod100

Ctrl+C и Ctrl+V и погнали. Но это не круто, поэтому в .bashrc или .zshrc добавляются алиасы:

alias dev='ssh -p PORT_NUMBER user1@host1'
alias prod1='ssh -p PORT_NUMBER user2@host2'
...
alias prod100='ssh -p PORT_NUMBER user100@host100'

Уже лучше, но оказывается можно и еще круче. Тут нам поможет ssh config, подробная документация тут.

2 варианта использования:

  • /etc/ssh/ssh_config – на всю систему
  • ~/.ssh/config – для пользователя

Рассмотрим последний. Создаем и заполняем:

# dev machine
Host dev
  HostName 127.0.0.1
  Port 22
  User username

Теперь мы можем набрать ssh dev и попасть на машину. Если надо пробросить ключи на сервер добавляем:

# dev machine
Host dev
  HostName 127.0.0.1
  Port 22
  ForwardAgent yes
  User username

Можно указать настройки для группы серверов. Предположим на всех production серверах у вас перевешен порт ssh со стандартного 22 на 2222. Пользователь везде одинаковый и везде хотим пробрасывать ключи на сервер.

Host prod*
  ForwardAgent yes
  Port 2222
  User username

Host prod1
  HostName 10.0.0.1

Host prod2
  HostName 10.0.0.2
...
Host prod100
  HostName 10.0.0.100

Бонус - автокомплит. Набираем ssh, нажимаем Tab и показывается список хостов из конфига. Профит. Из минусов - нельзя делать include других файлов конфига, тогда можно было бы отлично комбинировать файлы с личными серверами и рабочими.