pass
GUIインタラクションなしでプログラムから直接パスワードを抽出してSSHサーバーにログインしようとしています。
GUI(Gnome)の一般的なワークフローは、次のことです。
- パスワードをクリップボードにインポートします。
pass -c Misc/MyAccount
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-terminal
GUIで実行すると、これはうまく機能します。
ただし、Linux仮想端末(Control-Alt-F1)では、パスワードプロンプトが通常pass
どおり(ターミナルから直接)ポップアップされず、ログインが失敗するため失敗します。
Linux仮想端末でこの機能を実装するには?
望む行動
- 上記のスクリプトを実行してください。
- プログラムパスワードのヒントを参照してください
pass
。 - 正常にログインするためにサーバーパスワードを手動で入力する必要はありません
ssh
。
答え1
これが機能するために満たす必要があるいくつかの要件があります。
DISPLAY
SSH_ASKPASS
機能を有効にするには、環境変数に何か(何でも可能)を設定する必要があります。gpg-agent
ttyに基づいている必要があります。松の木プログラム。 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