Yêu cầu SSH sử dụng lời nhắc đồ họa cho cụm mật khẩu chính


41

Làm cách nào tôi có thể buộc SSH yêu cầu cụm mật khẩu bằng dấu nhắc đồ họa (ví dụ GTK) thay vì cụm từ chuẩn sử dụng thiết bị đầu cuối?

Tôi đã thử thiết lập SSH_ASKPASS=/usr/bin/ssh-askpassnhưng dường như không có hiệu ứng.

Vấn đề là thực tế tài liệu openssh nói

Nếu ssh không có thiết bị đầu cuối được liên kết với nó nhưng HIỂN THỊ và SSH_ASKPASS được đặt, nó sẽ thực thi chương trình được chỉ định bởi SSH_ASKPASS và mở cửa sổ X11 để đọc cụm mật khẩu.

Một ssh được khởi chạy từ dòng lệnh, trong trường hợp của tôi là kết quả của a git push, sẽ có một thiết bị đầu cuối được liên kết với nó, vì vậy SSH_ASKPASSlogic dường như bị bỏ qua.

Xin lưu ý rằng tôi không đề cập đến ssh-add, nhưng với các yêu cầu ssh chung đối với máy chủ lưu trữ có cặp khóa nhưng được bảo vệ bằng cụm mật khẩu.

Câu trả lời:


32

# 1 - Thiếu gói?

Có lẽ bạn đang thiếu gói chứa ssh-askpass. Hãy thử cài đặt nó.

Fedora / CentOS / RHEL:

$ sudo yum install openssh-askpass

Debian / Ubuntu:

$ sudo apt-get install ssh-askpass-gnome ssh-askpass

Tìm kiếm các tiện ích bị thiếu

Bạn có thể tìm kiếm các công cụ bị thiếu bằng cách sử dụng các lệnh sau:

Fedora / CentOS / RHEL:

$ yum search ssh-askpass
Loaded plugins: langpacks, presto, refresh-packagekit
Adding en_US to language list
======================================================= Matched: ssh-askpass =======================================================
x11-ssh-askpass.x86_64 : A passphrase dialog for X and not only for OpenSSH
ksshaskpass.x86_64 : A KDE version of ssh-askpass with KWallet support
connect-proxy.x86_64 : SSH Proxy command helper
openssh-askpass.x86_64 : A passphrase dialog for OpenSSH and X

Debian / Ubuntu:

$ apt-file -l search ssh-askpass
app-install-data
cruft
git-cola
luckybackup-data
pssh
sdm-terminal
seahorse
ssh-askpass
ssh-askpass-fullscreen
ssh-askpass-gnome

# 2 - Ngắt kết nối thiết bị đầu cuối?

Tôi đã bỏ lỡ điều này ban đầu nhưng sau khi đọc thêm tôi nhận thấy bình luận này trong trang hướng dẫn sshvề SSH_ASKPASSbiến môi trường.

đoạn trích

SSH_ASKPASS    If ssh needs a passphrase, it will read the passphrase from the 
               current terminal if it was run from a terminal.  If ssh does not
               have a terminal associated with it but DISPLAY and SSH_ASKPASS 
               are set, it will execute the program specified by SSH_ASKPASS 
               and open an X11 window to read the passphrase. This is particularly
               useful when calling ssh from a .xsession or related script.  
               (Note that on some machines it may be necessary to redirect the 
               input from /dev/null to make this work.)

Nếu bạn nhận thấy trong bình luận, nó nói rằng ssh "không có thiết bị đầu cuối liên quan" DISPLAY & SSH_ASKPASSđược đặt. Nhận thấy đây là chìa khóa. Vì vậy, để sshsử dụng, SSH_ASKPASSchúng ta cần sshphải có một thiết bị đầu cuối (aka. STDIN& STDOUT) Được gắn vào nó.

Một cách để làm điều này bằng cách sử dụng lệnh setsid. Đừng cảm thấy tồi tệ. Tôi chưa bao giờ nghe nói về công cụ này. Từ trang người đàn ông:

setsid - chạy một chương trình trong một phiên mới

Vì vậy, nếu chúng tôi chạy sshnhư "chương trình" để setsidchúng tôi có thể tách ra sshkhỏi thiết bị đầu cuối của mình đáp ứng các tiêu chí được đề cập trong sshtrang con người. Các tiêu chí khác được đặt như sau:

$ echo $DISPLAY; echo $SSH_ASKPASS
:0.0
/usr/libexec/openssh/ssh-askpass

Vì vậy, nếu chúng ta kết hợp tất cả lại với nhau:

$ setsid ssh user@remotehost

Ví dụ:

$ setsid ssh user@skinner

                                       hỏi gui

Một giải pháp

Nếu bạn muốn làm cho nó thành setsid"tích hợp", bạn có thể tạo một bí danh như vậy:

$ alias ssh="setsid ssh"

Bây giờ khi bạn sshsẽ nhận được GUI bật lên hỏi mật khẩu của bạn:

$ ssh user@skinner

Người giới thiệu


ssh-Askpass gnome được cài đặt và nó hoạt động tốt nếu được khởi chạy thủ công.
gioele

@gioele - xem cập nhật, tôi nghĩ rằng tôi đã tìm ra nó.
slm

vấn đề của giải pháp này là nó yêu cầu tôi sửa đổi từng lệnh git hoặc rsync để sử dụng setsid sshinstad of plain ssh.
gioele

@gioele - bạn đã yêu cầu một phương pháp "ép buộc" GUI mật khẩu, điều này cung cấp điều đó. Bạn có thể thay thế các lệnh như sshvới bí danh setsid sshlà một cách tiếp cận. Có nhiều cách khác. Yếu tố giới hạn là openssh không cần TTY kèm theo để kích hoạt ASK_SSHPASS.
slm

Tôi không thiếu gói và tôi không thể sử dụng setsidvà sau đó làm việc sshtừ thiết bị đầu cuối của mình. Đó hoàn toàn không phải là một câu trả lời hợp lệ!? Thêm vào đó, nó đã hoạt động trong các phiên bản cũ hơn của Ubuntu, vì vậy tôi không chắc tại sao tôi lại đột nhiên ngừng hoạt động!
Alexis Wilke

8

Điều này không thể được thực hiện trong OpenSSH hiện tại: có một vấn đề mở trong OpenSSH Bugzilla yêu cầu tính năng này kể từ 2013-07: Tổng quát hóa SSH_ASKPASS .


Điều này không cung cấp một câu trả lời cho câu hỏi. Để phê bình hoặc yêu cầu làm rõ từ một tác giả, hãy để lại nhận xét bên dưới bài đăng của họ.
cuonglm

8
@cuonglm "điều này là không thể" là một câu trả lời. Nó có thể sai hoặc gây hiểu lầm (tôi không nói là như vậy), nhưng nó vẫn là một câu trả lời.
terdon

2

Có một cách để đóng thiết bị đầu cuối cho một lệnh duy nhất và đó là sử dụng chuyển hướng tệp:

ssh-add > /dev/null < /dev/null 2>&1

Điều này sẽ chạy lệnh ssh-addvới thiết bị đầu cuối đóng. Điều đó là tốt và bảnh bao, ngoại trừ sự phức tạp của nó. Nhưng bây giờ bạn đã biết lệnh chính xác, chỉ cần đặt nó thành bí danh và thêm nó vào ~/.bash_aliases:

alias ssh-add="/usr/bin/ssh-add > /dev/null < /dev/null 2>&1"

Và bạn nên được thiết lập. Chỉ cần gõ ssh-addbây giờ sẽ gọi bí danh sẽ gọi lệnh thực sự với tất cả các chuyển hướng tại chỗ.

Các ssh-addhiện nay yêu cầu một cách chính xác bạn mật khẩu với một hộp thoại ... Với điều kiện là bạn có một trong những gói cài đặt (trong Ubuntu hoặc các dẫn xuất, họ có thể có những cái tên khác ở nơi khác):

  • ssh-askpass
  • ssh-askpass-fullscreen
  • ssh-askpass-gnome
  • ksshaskpath
  • kwalletcli
  • lxqt-openssh-askpass
  • razorqt-openssh-askpasss

Bây giờ, tất cả những điều đó có nghĩa là gì?

2>&1nghĩa là bộ mô tả tệp chuyển hướng số 2 (lỗi tiêu chuẩn) đến cùng một bộ mô tả tệp số 1 (đầu ra tiêu chuẩn) được hướng đến.

> /dev/nullnghĩa là chuyển hướng đầu ra tiêu chuẩn đến /dev/null, là một tệp đặc biệt loại bỏ tất cả dữ liệu được ghi vào nó.

< /dev/nullnghĩa là chuyển hướng đầu vào tiêu chuẩn đến /dev/null(idem).

Là một ghi chú bên cạnh, và một chủ đề ngoài nhưng lưu ý liên quan, nếu bạn muốn lập trình một dịch vụ trong bash, bạn phải nhớ dịch vụ thực sự là gì, một quá trình với đầu vào tiêu chuẩn, đầu ra và lỗi được đóng trong nền:

service > /dev/null < /dev/null 2>&1 &

Lưu ý rằng sự khác biệt duy nhất là & được thêm vào cuối (cộng với thực tế là tôi đã thay đổi lệnh ssh-addcho lý thuyết service. Những lệnh đó sẽ đặt chính xác một dịch vụ trên nền.


Cảm ơn bạn đã trả lời chi tiết Victor. Tuy nhiên, nó không phù hợp với yêu cầu của tôi. Như tôi đã viết ở cuối câu hỏi, «Xin lưu ý rằng tôi không đề cập đến ssh-add, mà là các yêu cầu ssh chung đối với một máy chủ lưu trữ một cặp khóa nhưng được bảo vệ bởi cụm mật khẩu.».
gioele

Tôi hiểu rồi. Vâng, sshhoạt động theo cùng một cách chính xác, và câu trả lời tương tự mà tôi đã đưa ra trước đây vẫn được áp dụng. Chỉ cần thay thế mọi sự xuất hiện của ssh-addvới sshvà bạn đã được thiết lập.
Victor

Chỉ có một chi tiết nhỏ mà bạn quên: nếu tôi đóng stdin / stdout cho ssh, làm thế nào để tôi đưa ra lệnh thông qua ssh? ;)
gioele

Điều này hiệu quả với ssh-addtôi - tôi thậm chí không cần phải chuyển hướng thiết bị xuất chuẩn / stderr để có được hành vi mong muốn, đó là bật lên ssh-askpasschương trình. (Đó là, ssh-add < /dev/nullđã đủ.)
Ben Stern

0

Tôi gặp vấn đề tương tự khi tôi cài đặt cá ngựa (cung cấp seahorse-ssh-askpass) mà không cài đặt gói gnome-keyringtrên ArchLinux.

Nhìn vào nội dung của gói này gnome-keyring( https://www.archlinux.org/packages/extra/i686/gnome-keyring ) có thể giúp bạn giải quyết vấn đề của mình.

Trong mọi trường hợp, nếu bạn không phiền khi sử dụng cá ngựa, bạn cũng có thể cài đặt các gói seahorsegnome-keyring(hoặc các gói tương đương cho bản phân phối của bạn). Nếu bạn không sử dụng Gnome, các bước bổ sung có thể được yêu cầu: https://wiki.archlinux.org/index.php/GNOME_Keyring .

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.