вторник, 13 октября 2026 г.

WSL + claude cli

 Продолжение к 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:*)" ] } }



Комментариев нет:

Отправить комментарий