Hashicorp Vault есть прикольная фишка со встроенным ssh враппером и подписными ключами.ㅤ
То есть ты не напрямую подключаешься к серверу:
ssh root@server
А подключаешься к серверу через сервер с
Vault, получается что-то вроде бастиона. Vault подписывает ключи и запускает тебя в нужное место.Настраивается эта штука так:
На сервере с
Vault выполняем:vault secrets enable -path=ssh ssh
vault write ssh/config/ca generate_signing_key=true
Создаём под это дело отдельную роль:
vault write ssh/roles/devops -<<"EOH"
{
"allow_user_certificates": true,
"allowed_users": "*",
"allowed_extensions": "permit-pty,permit-port-forwarding,permit-agent-forwarding,permit-user-rc,permit-X11-forwarding",
"default_extensions": [
{
"permit-pty": ""
}
],
"key_type": "ca",
"default_user": "root",
"ttl": "30m0s"
}
EOH
На сервере к которому хотим подключаться, делаем:
curl -o /etc/ssh/trusted-user-ca-keys.pem https://vault.bashdays.ru:8200/v1/ssh/public_key
Добавляем в конфиг
/etc/ssh/sshd_config строчку: TrustedUserCAKeys /etc/ssh/trusted-user-ca-keys.pem
И перезапускаем:
systemctl restart sshdПереходим на свою локальную машину, с которой будем подключаться:
export VAULT_TOKEN="token"
vault write -address='https://vault.bashdays.ru:8200' ssh/sign/devops public_key=@$HOME/.ssh/id_rsa.pub
Этой командой подписываем свой публичный ключ через
vault сервер. В ответ получаем кучу всякой хуйни типа: serial_number и signed_key.Сохраняем на локальную машину подписанный ключ:
export VAULT_TOKEN="token"
vault write -address='https://vault.bashdays.ru:8200' --field=signed_key ssh/sign/devops public_key=@$HOME/.ssh/id_rsa.pub > ~/.ssh/id_rsa_signed_key.pub
Смотрим параметры получившегося ключа:
ssh-keygen -Lf /Users/user/.ssh/id_rsa_signed_key.pub`
Опять же получишь портянку информации, можно посмотреть валидность и время жизни этого ключа.
Теперь подключаемся:
ssh -i ~/.ssh/id_rsa_signed_key.pub -i ~/.ssh/id_rsa root@server
Ну и вишенка, подключаемся через враппер:
vault ssh -address='https://vault.bashdays.ru:8200' -private-key-path=~/.ssh/id_rsa -public-key-path=~/.ssh/id_rsa.pub -mode=ca -role=devops -user-known-hosts-file=/dev/null root@server
В этом случае подписывать ключ не обязательно.
Доступ к серверам контролирует
Vault. Можно быстро накручивать необходимые права, забирать и отзывать ключи. Ну и там много чего еще можно сделать.Выглядит крайне неудобно и не интуитивно. Но порой такую штуку можешь встретить в компаниях. Хотя я против такой хуйни, какая-то блядь избыточная безопасность.
Что-то вроде центра сертификации, писал как-то отдельный пост на эту тему.
Нашел еще видос у пиндоса на эту тему, можешь визуально глянуть и проникнутся.
Такие дела!
🛠 #linux #devops
—
✅ @bashdays / @linuxfactory / @blog