3.0.0-beta.41). Tính năng có thể thay đổi trước bản stable tiếp theo.Chuyển sang stable →secrets
ak secrets run
Chạy một chương trình với secret chỉ được giao vào các biến môi trường được đặt tên, dưới exec grant.
Dùng ak secrets run để khởi chạy một chương trình với secret trong các biến
môi trường mà --env nêu tên, và không ở đâu khác. Lệnh phục vụ coding agent:
bên gọi được nhận diện giống cách ak secrets resolve nhận diện, bằng cách đi
ngược cây tiến trình và băm binary của agent.
Cách dùng
ak secrets run --env VAR=REF [--env VAR=REF ...] [--purpose <text>] [--project <slot>] [--session <id>] -- <program> [args...]Chương trình và đối số của nó đứng sau --; mọi thứ sau dấu phân cách thuộc
về chương trình, không bao giờ thuộc về ak. Cần ít nhất một cặp --env, tối
đa 16 cặp, và không biến nào được đặt tên hai lần. --json không được hỗ trợ:
đầu ra của chính chương trình là đầu ra.
| Cờ | Mặc định | Mô tả |
|---|---|---|
--env VAR=REF | bắt buộc | Giao secret REF vào biến môi trường VAR. Có thể lặp lại. |
--purpose <text> | rỗng | Nhãn purpose mà grant phải khớp nguyên văn. |
--project <slot> | AK project chứa thư mục hiện tại | Project slot mà các grant thuộc về. |
--session <id> | không | Session id gắn lần chạy này với lần chạy agent đã yêu cầu nó. |
--backend <backend> | keychain | Backend đang giữ giá trị: keychain, file hoặc memory. |
--unlock-with-recovery | tắt | Mở vault của backend file bằng khoá riêng khôi phục và đặt passphrase mới. |
Exec grant
Mỗi cặp VAR=REF cần một exec grant
(ak secrets grant REF --exec PROGRAM --env VAR) cho agent đang gọi trên đúng
chương trình này: đường dẫn đã giải mọi symlink và hash nội dung của nó. Một
chương trình tìm thấy ở chỗ khác trên PATH, hoặc đã thay đổi kể từ khi grant,
sẽ không khớp grant nào, và mỗi scope chưa được bao phủ được gửi tới người vận
hành để trả lời bằng ak secrets approve, như resolve vẫn làm.
Grant thường không bao giờ release ở đây, và exec grant không bao giờ release
cho resolve.
Một REF không có giá trị lưu trữ mà trùng tên một alias sẽ
đi theo alias đó một bước, và exec grant được kiểm tra theo đích của alias,
không bao giờ theo tên alias.
Mọi scope đều được kiểm tra, và chương trình được băm lại, trước khi đọc bất kỳ giá trị nào, nên một lần chạy bị kiểm tra grant từ chối sẽ không tiêu allow-once nào. Nếu chương trình vẫn không khởi chạy được sau khi giá trị đã release, ledger ghi lại rằng nó chưa bao giờ chạy.
Chương trình chạy thế nào
- Không qua shell. Chương trình được khởi chạy trực tiếp, trong thư mục làm việc hiện tại, nên không gì trong đối số được mở rộng. Shell và launcher bị từ chối.
- Môi trường dựng lại. Một vài biến được sao chép từ môi trường này
(
HOME,USER,LANG,TERM,TMPDIRvà các biến cùng loại),PATHlà danh sách cố định các thư mục hệ thống (dẫn đầu, với script#!/usr/bin/env NAME, bởi thư mục nơi tìm thấyNAME), cộng thêm các biến đã grant; không gì khác, kể cả proxy và tuỳ chọn runtime. Chương trình chạy một helper cài ngoài thư mục hệ thống phải gọi nó bằng đường dẫn. - Output bị gạch. Output của chương trình được chuyển tiếp với mọi giá trị đã grant bị gạch bỏ. Vài byte cuối được giữ lại (ít hơn dạng dài nhất của một giá trị, mà với dạng escape có thể dài hơn chính giá trị) cho tới khi chương trình ghi thêm hoặc thoát. Output đi qua pipe, không phải terminal.
- Tín hiệu và exit. Ctrl-C từ terminal tới được chương trình, còn SIGTERM
và SIGHUP được chuyển tiếp cho nó;
akchờ nó thoát và không bao giờ kill nó. Exit status của chương trình là của lệnh này. Lỗi của chínhakluôn in một dòng lỗi bắt đầu bằngsecrets run:trên stderr; status của chương trình được chuyển tiếp nguyên vẹn, dù bản thân chương trình có thể in bất cứ gì.
Exec grant giới hạn chương trình nào nhận giá trị, không giới hạn chương trình
làm gì với nó. Chương trình vẫn có thể gửi giá trị đi bất cứ đâu, ghi ra file
hoặc chuyển cho tiến trình con của nó; một interpreter chạy bất kỳ script nào
được đưa cho; một chương trình như curl, wget hay gh có thể được đối số của
nó chỉ thị gửi một biến đi bất cứ đâu hoặc chạy chương trình khác; và bất kỳ tiến
trình nào của cùng user đều đọc được môi trường của chương trình khi nó đang
chạy. Chỉ cấp exec scope cho chương trình mà chính bạn sẵn sàng trao giá trị.
Lệnh đọc vault, file alias và file grant, ghi một dòng audit cho mỗi biến, và khởi chạy chương trình. Lệnh không bao giờ in giá trị.
Đầu ra
Khi thành công, ak không có đầu ra riêng: stdout và stderr mang output được
chuyển tiếp của chương trình, với các giá trị đã grant bị gạch bỏ.
Kết quả và mã thoát
| Mã thoát | Ý nghĩa |
|---|---|
0 | Chương trình thoát 0. Mọi status khác của nó được chuyển tiếp nguyên vẹn (128 cộng số hiệu tín hiệu nếu một tín hiệu kết thúc nó). |
2 | Cờ không hợp lệ, --json, không có chương trình sau --, hoặc chương trình hay biến bị từ chối. |
3 | Không có secret với ref đó. |
5 | Không dùng được vault, file alias, file grant hoặc audit ledger, hoặc chương trình không khởi chạy được. |
6 | Một block từ chối bên gọi, không xác định được danh tính của nó, hoặc chương trình đã thay đổi sau khi được kiểm tra. |
7 | Vault của backend file cần passphrase và lần chạy này không có terminal. |
8 | Không có exec grant nào bao phủ một biến; một yêu cầu đang chờ ak secrets approve. |
9 | Bên gọi đã tạo quá nhiều yêu cầu duyệt và đang trong cool-down. |
15 | Một policy của vault đã sync từ chối lần release này, hoặc không trả lời được là có policy nào chi phối nó hay không; sync.reason trong lỗi JSON nêu lý do. |