Linux仮想端末でUnix `pass`プログラムを `ssh`とうまく機能させるにはどうすればよいですか?

Linux仮想端末でUnix `pass`プログラムを `ssh`とうまく機能させるにはどうすればよいですか?

passGUIインタラクションなしでプログラムから直接パスワードを抽出してSSHサーバーにログインしようとしています。

GUI(Gnome)の一般的なワークフローは、次のことです。

  1. パスワードをクリップボードにインポートします。pass -c Misc/MyAccount
  2. SSHプログラムを実行し、GUIクリップボードを使用して貼り付ける

    ssh myserver
    Right-Click + Paste
    

GUIコンポーネントなしでこれをやりたかったので、次のようにできると思いました。

 pass Misc/MyAccount | ssh myserver

ssh明らかに、これはパスワードが正しく読み取られないため機能しませんstdin。私が見つけたこの問題次のスクリプトを作成しました。

export SSH_ASKPASS="/path/to/script/calling/pass"
setsid ssh "myserver"

gnome-terminalGUIで実行すると、これはうまく機能します。

ただし、Linux仮想端末(Control-Alt-F1)では、パスワードプロンプトが通常passどおり(ターミナルから直接)ポップアップされず、ログインが失敗するため失敗します。

Linux仮想端末でこの機能を実装するには?

望む行動

  1. 上記のスクリプトを実行してください。
  2. プログラムパスワードのヒントを参照してくださいpass
  3. 正常にログインするためにサーバーパスワードを手動で入力する必要はありませんssh

答え1

これが機能するために満たす必要があるいくつかの要件があります。

  • DISPLAYSSH_ASKPASS機能を有効にするには、環境変数に何か(何でも可能)を設定する必要があります。
  • gpg-agentttyに基づいている必要があります。松の木プログラム。 Debian / Ubuntuシステムで実行しapt-get install pinentry-cursesて使用してください/usr/bin/pinentry-curses

次のようにスクリプトを実行します。

export DISPLAY=anything
export SSH_ASKPASS="/path/to/script/calling/pass"
gpg-agent --pinentry-program /usr/bin/pinentry-curses --daemon setsid ssh myserver

setsid最新リリース(Debian 8.0以降、Ubuntu 14.10以降)のutil-linuxは、子プロセスが終了するのを待つ必要があります。-wそうしないと、バックグラウンドで実行されているsshセッションによって混乱が発生します。

gpg-agent --pinentry-program /usr/bin/pinentry-curses --daemon setsid -w ssh myserver

関連情報