Продолжение к WSL + буфер обмена - пара настроек для более комфортной работы с claude code cli (в нашем случае применяется ansible)
Пароли и подтверждения, включая YubiKey
Главная идея: пароль должен запрашивать не Claude, а внешняя программа, которая показывает своё окно или требует касания ключа. Claude только запускает команду, а секрет в чат не попадает.
Вариант А: всплывающее окно Windows для пароля (askpass)
Скрипт ~/.local/bin/win-askpass:
#!/bin/bash
msg="${1:-Password}"
powershell.exe -NoProfile -Command \
"\$c = Get-Credential -UserName 'secret' -Message '$msg'; if (\$c) { \$c.GetNetworkCredential().Password }" \
| tr -d '\r'
Для локального sudo:
export SUDO_ASKPASS=~/.local/bin/win-askpass
echo 'SUDO_ASKPASS=~/.local/bin/win-askpass' >> ~/.bashrc
sudo -A <команда> # появится окно Windows, пароль уйдёт напрямую в sudo
Вариант Б: Ansible с become-паролем
Самое чистое решение: хранить become-пароль в ansible-vault, а пароль от vault отдавать через исполняемый скрипт. Если файл, переданный в --vault-password-file, исполняемый, Ansible запускает его и берёт stdout.
ansible_become_password: "..."~/.local/bin/vault-pass
#!/bin/bash
# окно Windows
exec ~/.local/bin/win-askpass "Ansible vault"
и далее
ansible-playbook restore.yml --vault-password-file ~/.local/bin/vault-pass
Вариант В: убрать пароль совсем и подтверждать касанием YubiKey
ssh-keygen -t ed25519-sk -O verify-required # PIN + касание при каждом входеКаждое SSH-подключение Ansible будет требовать физического касания ключа. Это и есть подтверждение. Учтите нюанс WSL: USB-доступа к YubiKey из WSL по умолчанию нет. Обычно используют Windows OpenSSH (он работает с -sk-ключами через Windows Hello) и пробрасывают агент в WSL через npiperelay + socat (готовые решения: wsl-ssh-agent, wsl2-ssh-pageant для GPG/PIV). Второй вариант — usbipd-win, чтобы подключить ключ прямо в WSL.
Подтверждения в самом Claude Code
Когда включён auto mode, а он может выполнять команды без вопросов. Добавьте в ~/.claude/settings.json (или .claude/settings.json проекта):
{ "permissions": { "ask": [ "Bash(ansible-playbook:*)", "Bash(sudo:*)", "Bash(ssh:*)" ] } }
Комментариев нет:
Отправить комментарий