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