Answers:
您可能会缺少包含的软件包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
我最初错过了这个,但是在进一步阅读之后,我在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“没有关联的终端” AND DISPLAY
&SSH_ASKPASS
已设置。注意这是关键。因此,要ssh
开始使用,SSH_ASKPASS
我们需要ssh
不连接任何终端(也称为STDIN
&STDOUT
)。
一种使用命令的方式setsid
。不要难过 我也从未听说过此工具。从手册页:
setsid-在新会话中运行程序
因此,如果我们ssh
以“程序”身份运行,则setsid
可以ssh
从满足我们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
setsid ssh
plain instad ssh
。
ssh
使用别名替换诸如命令之类的setsid ssh
方法。还有其他方法。限制因素是openssh不需要附加TTY即可激活ASK_SSHPASS。
setsid
,然后ssh
从终端进行操作。那根本不是一个有效的答案!另外,它可以在旧版本的Ubuntu中运行,所以我不太确定我为什么会突然停止工作!
无法在当前的OpenSSH中完成:从2013-07开始,OpenSSH Bugzilla中存在一个要求此功能的问题:Generalize SSH_ASKPASS。
有一种方法可以通过单个命令关闭终端,即使用文件重定向:
ssh-add > /dev/null < /dev/null 2>&1
这将ssh-add
在终端关闭的情况下运行命令。除了它的复杂性之外,还算不错。但是,既然您知道正确的命令,只需将其命名为别名并将其附加到~/.bash_aliases
:
alias ssh-add="/usr/bin/ssh-add > /dev/null < /dev/null 2>&1"
而你应该被设置。ssh-add
现在,只需键入将调用别名,该别名将在所有重定向到位的情况下调用真实命令。
在ssh-add
现在正确地问你一个对话框,密码......只要你有这些软件包安装(在Ubuntu或衍生物,它们可能有其他地方的名称)中的一种:
ssh-askpass
ssh-askpass-fullscreen
ssh-askpass-gnome
ksshaskpath
kwalletcli
lxqt-openssh-askpass
razorqt-openssh-askpasss
现在,这些东西是什么意思?
该2>&1
装置重定向文件描述符#2(标准误差),以相同的地方文件描述符#1(标准输出)被引导到。
这> /dev/null
意味着将标准输出重定向到/dev/null
,这是一个特殊文件,该文件将丢弃所有写入其中的数据。
该< /dev/null
装置重定向标准输入/dev/null
(同上)。
作为附带说明,还有一个与主题无关的相关说明,如果您想在bash中对服务进行编程,则必须记住实际上是什么服务,该进程在后台具有标准输入,输出和错误关闭功能:
service > /dev/null < /dev/null 2>&1 &
请注意,唯一的区别是在末尾添加了&(加上我更改ssh-add
了理论上的命令的事实service
。这些命令将正确地在后台放置服务。
ssh
功能完全相同,我以前给出的答案仍然适用。只需将的所有出现替换为ssh-add
,ssh
您就会被设置。
ssh-add
对我有用-我什至无需重定向stdout / stderr即可获得所需的行为,即弹出ssh-askpass
程序。(那就ssh-add < /dev/null
足够了。)
在seahorse-ssh-askpass
未gnome-keyring
在ArchLinux上安装软件包的情况下安装seahorse(提供)时遇到了相同的问题。
查看此软件包的内容gnome-keyring
(https://www.archlinux.org/packages/extra/i686/gnome-keyring)可以帮助您解决问题。
无论如何,如果您不介意使用seahorse,也可以安装软件包seahorse
和gnome-keyring
(或与您的发行版等效的软件包)。如果您不使用Gnome,则可能需要其他步骤:https : //wiki.archlinux.org/index.php/GNOME_Keyring。