Sử dụng gpg-agent trên ssh


8

Tôi gặp sự cố khi sử dụng tác nhân gpg qua ssh thông qua một dòng lệnh.

Đây là cấu hình của tôi:

Máy chủ A: kích hoạt lệnh thông qua ssh.

ssh user@serverB "sudo -E /path/to/script.sh"

Máy chủ B: Thực thi tập lệnh yêu cầu chữ ký mật khẩu.

Thông tin hệ thống: Ubuntu 12.04

Tôi đã thiết lập tác nhân gpg trên máy chủ B, tôi đã thêm cấu hình này vào /home/user/.bashrc:

Invoke GnuPG-Agent the first time we login.                                                                          
# Does `~/.gpg-agent-info' exist and points to gpg-agent process accepting signals?                                    
if test -f $HOME/.gpg-agent-info && \
    kill -0 `cut -d: -f 2 $HOME/.gpg-agent-info` 2>/dev/null; then
    GPG_AGENT_INFO=`cat $HOME/.gpg-agent-info | cut -c 16-`
else
    # No, gpg-agent not available; start gpg-agent                                                                     
    eval `gpg-agent --daemon --write-env-file $HOME/.gpg-agent-info`
fi
export GPG_TTY=`tty`
export GPG_AGENT_INFO

Đây là cấu hình của tác nhân trong /home/user/.gnupg/gpg-agent.conf:

enable-ssh-support
#1 year cache support
default-cache-ttl 31536000
default-cache-ttl-ssh 31536000
max-cache-ttl 31536000
max-cache-ttl-ssh 31536000
#debug-all

Vì vậy, để làm cho điều này hoạt động, tôi kết nối với máy chủB thông qua ssh:

ssh user@serverB

Tác nhân gpg được bắt đầu, tôi kích hoạt tập lệnh theo cách thủ công:

sudo -E /path/to/script.sh

Sau đó, tác nhân gpg nhắc tôi yêu cầu cụm mật khẩu, một khi tôi đã thiết lập cụm mật khẩu, tôi có thể chạy lại tập lệnh và nó đang thực hiện nhiệm vụ của mình mà không yêu cầu mật khẩu.

Vấn đề của tôi là, khi tôi cố gắng kích hoạt nó ở xa, ví dụ: thông qua:

ssh user@serverB "sudo -E /path/to/script.sh"

Có vẻ như tác nhân gpg không hoạt động, vì tập lệnh liên tục yêu cầu tôi nhập cụm mật khẩu.

Biên tập:

Tôi đã thêm nội dung sau vào /etc/sudoers.d/user để kích hoạt tập lệnh ở xa mà không cần mật khẩu sudo và để giữ các biến môi trường:

user ALL=(ALL)NOPASSWD:SETENV:/path/to/script.sh

Có ý kiến ​​gì không?


Tha thứ cho câu hỏi, nhưng bạn có chắc là nó yêu cầu một cụm mật khẩu không? Với những gì bạn đã trình bày ở trên, tôi hy vọng nó sẽ yêu cầu mật khẩu , để xác thực sudolệnh.
MadHatter

Tôi đã quản lý tệp sudoers bằng NOPASSWD cho người dùng / lệnh tôi cố gắng chạy xa. Tôi có thể cần phải chính xác điều này quá. Đó là yêu cầu tôi cho một mật khẩu.
Tony

Được rồi, cái đó có lý; cảm ơn vì đã làm rõ, tôi chỉ muốn chắc chắn rằng chúng ta sẽ không bị cắn bởi điều hiển nhiên!
MadHatter

Câu trả lời:


1

Khi bạn đăng nhập bằng ssh user@serverBcách thực hiện thủ công tập lệnh, nó sẽ nhắc bạn nhập cụm mật khẩu lần đầu tiên, sau đó khi bạn thực thi tập lệnh, shh-agent sẽ cung cấp cụm mật khẩu được lưu trữ.

Tuy nhiên, khi bạn chạy, ssh user@serverB "sudo -E /path/to/script.shbạn đang thực hiện đăng nhập mới mỗi lần và tôi không nghĩ ssh-agent sẽ hỗ trợ lưu cụm mật khẩu qua các thông tin đăng nhập SSH riêng biệt.

Keychain xuất hiện để làm những gì bạn yêu cầu: http://www.funtoo.org/Keychain

Với móc khóa, bạn chỉ cần nhập cụm mật khẩu một lần mỗi khi máy cục bộ của bạn được khởi động lại. Keychain cũng giúp các công việc cron từ xa dễ dàng "kết nối" một cách an toàn với quy trình ssh-agent chạy dài, cho phép các tập lệnh của bạn tận dụng các thông tin đăng nhập dựa trên khóa.

Phiên bản hiện tại của móc khóa hỗ trợ gpg-agent cũng như ssh-agent.


Theo như sshchuỗi đi, bạn đã sai. Tôi làm điều này nhiều lần một ngày; sshtừ máy chủ A đến máy chủ B, sau đó đến C, rồi đến D, với tác nhân ssh ở đầu thực hiện các thao tác chính trong toàn bộ thời gian.
MadHatter

Tôi hiểu rằng anh ta không cố gắng kết nối từ A đến B bằng cách sử dụng tác nhân. Máy chủ B được thiết lập là máy khách ssh-agent (cho tất cả ý định và mục đích) và khi anh ta thực thi sudo -E /path/to/script.shtrên máy chủ B, một cái gì đó ở đây đang yêu cầu cụm mật khẩu. EDIT: Mặc dù, với nhận xét của bạn, anh ta có thể hiểu rõ hơn về việc anh ta định cấu hình A làm máy khách tác nhân và sử dụng chuyển tiếp ssh-agent mà nó sẽ cho phép anh ta thực thi tập lệnh trên máy chủ B mà không cần nhắc mật khẩu .
v25

Ok, tôi sẽ thử thiết lập gpg-agent trên máy chủ A. Bạn có một số thông tin về chuyển tiếp ssh-agent? Tôi đã thấy bài đăng này cho đến nay: superuser.com/questions/161973/,
Tony

Đây là tài liệu tốt, đây là một hướng dẫn: livecodes.blogspot.co.uk/2013/02/ssh-agent-forwarding.html
v25

v25, lời xin lỗi của tôi, có vẻ như bạn đã đúng. Tony, nó sẽ không bao giờ hoạt động nếu bạn chạy tác nhân trên B, vì kết nối không liên tục.
MadHatter
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.