强制 ssh 始终使用 SSH_ASKPASS

Jos*_*uis 11 ssh openssh

我想强制 ssh 始终使用SSH_ASKPASS. 就我而言,该程序只是一个返回密码的 bash 脚本。

问题是,正如 ssh 文档所说:

如果 ssh 需要密码短语,如果它是从终端运行的它将从当前终端读取密码短语

因此,如果我从终端运行 ssh,SSH_ASKPASS则会被忽略。

有一个类似的问题: Tell SSH to use a graphics prompt for key passphrase

它建议为 ssh 创建一个别名,就像这样

$ alias ssh="setsid ssh"
Run Code Online (Sandbox Code Playgroud)

但对我不起作用,因为我不直接调用 ssh,而是从 git 或 rsync 调用。

我还在OpenSSH Bugzilla 中发现了一个未解决的问题,要求修复,但在 2002 年开放,所以我认为不会实施。

我正在考虑可能很奇怪的解决方案:

  1. 制作一个假的 ssh 代理,它调用脚本并返回密码。
  2. 创建一个寻找新 ssh 进程的进程,并在 ssh 要求输入密码之前将它们与终端分离。

有更好的建议吗?

ken*_*orb 5

每个ssh手册:

如果ssh没有与其关联的终端,但设置了 DISPLAY 和 SSH_ASKPASS,它将执行 SSH_ASKPASS 指定的程序。

因此,您需要取消与终端的关联(例如通过添加管道)并确保DISPLAY未设置(如果您想使用终端作为密码短语)。

简单的例子:

echo foo | SSH_ASKPASS=/my/cmd DISPLAY= ssh ...
Run Code Online (Sandbox Code Playgroud)

与以下相同ssh-add

$ echo foo | SSH_ASKPASS=/my/cmd DISPLAY= ssh-add id_rsa
ssh_askpass: exec(/my/cmd): No such file or directory
Run Code Online (Sandbox Code Playgroud)