# 1 - แพ็คเกจที่ขาดหายไป?
คุณอาจไม่มีแพ็คเกจที่บรรจุssh-askpass
อยู่ ลองติดตั้ง
Fedora / CentOS / RHEL:
$ sudo yum install openssh-askpass
Debian / Ubuntu:
$ sudo apt-get install ssh-askpass-gnome ssh-askpass
การหาสาธารณูปโภคที่ขาดหายไป
คุณสามารถค้นหาเครื่องมือที่หายไปโดยใช้คำสั่งเหล่านี้:
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 - ตัดการเชื่อมต่อเทอร์มินัล?
ฉันพลาดสิ่งนี้ไปก่อน แต่หลังจากอ่านต่อฉันสังเกตเห็นความคิดเห็นนี้ในหน้าคนssh
เกี่ยวกับSSH_ASKPASS
ตัวแปรสภาพแวดล้อม
สิ่งที่สกัดมา
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.)
หากคุณสังเกตเห็นในความคิดเห็นแสดงว่า ssh "ไม่มีเทอร์มินัลที่เชื่อมโยง" และ DISPLAY
& SSH_ASKPASS
ถูกตั้งค่าไว้ การสังเกตเห็นนี้เป็นกุญแจสำคัญ เพื่อที่ssh
จะใช้งานSSH_ASKPASS
เราจำเป็นต้องssh
ไม่ติดตั้งเทอร์มินัล (aka. STDIN
& STDOUT
) ไว้
setsid
วิธีหนึ่งที่จะทำเช่นนี้โดยการใช้คำสั่ง อย่ารู้สึกแย่ ฉันไม่เคยได้ยินเครื่องมือนี้เช่นกัน จากหน้าคน:
setsid - เรียกใช้โปรแกรมในเซสชั่นใหม่
ดังนั้นหากเราเรียกใช้ssh
เป็น "โปรแกรม" setsid
เราสามารถแยกออกssh
จากการประชุม terminal ของเราตามเกณฑ์ที่กล่าวไว้ในssh
หน้าคน เกณฑ์อื่น ๆ ที่กำหนดไว้ดังต่อไปนี้:
$ echo $DISPLAY; echo $SSH_ASKPASS
:0.0
/usr/libexec/openssh/ssh-askpass
ดังนั้นหากเรารวมทั้งหมดเข้าด้วยกัน:
$ setsid ssh user@remotehost
ตัวอย่างเช่น:
$ setsid ssh user@skinner
วิธีแก้ปัญหา
หากคุณต้องการที่จะทำให้มันsetsid
เป็น "ในตัว" คุณสามารถสร้างชื่อแทนดังนี้:
$ alias ssh="setsid ssh"
ตอนนี้เมื่อคุณssh
จะได้รับ GUI เปิดขึ้นเพื่อขอรหัสผ่านของคุณ:
$ ssh user@skinner
อ้างอิง