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 других файлов конфига, тогда можно было бы отлично комбинировать файлы с личными серверами и рабочими.