~/.ssh/config 一致ホストを作成する方法 * exec は現在のシェルの tty 名を継承しますか?

~/.ssh/config 一致ホストを作成する方法 * exec は現在のシェルの tty 名を継承しますか?

私はOS XとYubikeyに保存されているSSH秘密鍵を使用してSSHを介してリモートサーバーに接続しています。 Macがスリープ状態になったり目を覚ましたりするたびに、毎回実行する必要がありますgpg-connect-agent updatestartuptty /byeこの回答~/.ssh/configこのコマンドをこのように入力できるとします。

Match host * exec "gpg-connect-agent updatestartuptty /bye"

GPG_TTYただし、コンテキストの環境変数をexec現在のシェルの値に設定する必要があるため、これは機能しませんtty。私は魚の皮を使ってこのように入れます。~/.config/fish/config.fish

set -x GPG_TTY (tty)

ただし、sshexecが実行されるとttyが返されますnot a tty。これは私の環境変数です。

cat ~/.ssh/config

...
Match host * exec "env > /tmp/t"
...

[run ssh some-host command]

cat /tmp/t

PWD=/Users/dxia
COLORFGBG=12;8
LC_TERMINAL=iTerm2
LOGNAME=dxia
GPG_TTY=not a tty
LANG=en_US.UTF-8
XPC_FLAGS=0x0
TERM=xterm-256color
TMPDIR=/var/folders/x1/f9sjnv7j43z73sdv5lsk3r8h0000gp/T/
EDITOR=/usr/bin/vim
COLORTERM=truecolor
LC_TERMINAL_VERSION=3.4.10
XPC_SERVICE_NAME=0
__CF_USER_TEXT_ENCODING=0x1F6:0x0:0x0
HOME=/Users/dxia
ITERM_PROFILE=Default
TERM_PROGRAM=iTerm.app
TERM_PROGRAM_VERSION=3.4.10
DISPLAY=/private/tmp/com.apple.launchd.6iiZkY4Tos/org.xquartz:0
USER=dxia
SHLVL=1
COMMAND_MODE=unix2003
TERM_SESSION_ID=w0t0p1:5945A63C-850F-4DCF-A605-F72860D9D72C
__CFBundleIdentifier=com.googlecode.iterm2
SHELL=/usr/local/bin/fish
ITERM_SESSION_ID=w0t0p1:5945A63C-850F-4DCF-A605-F72860D9D72C
PATH=/opt/homebrew/sbin:/opt/homebrew/bin:/Users/dxia/.pyenv/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/usr/local/sbin:/usr/local/opt/fzf/bin:/opt/homebrew/opt/fzf/bin:/Users/dxia/.jenv/shims:/Users/dxia/.jenv/shims:/Users/dxia/.rbenv/shims:/Users/dxia/google-cloud-sdk/bin
SSH_AUTH_SOCK=/Users/dxia/.gnupg/S.gpg-agent.ssh

Match host * exec ...ttyをどのように継承できますか?それとも、スリープ/覚醒後にOS XにYubikey + SSHと連携させるより良い方法はありますか?

ベストアンサー1

~によるとOpenSSHソースコード、「Match exec」機能に対して呼び出されたコマンドの標準入力と出力は、/ dev / nullに接続されています。ただし、標準エラーは維持されます。sshTTYで実行している場合、execコマンドの標準エラーはまだTTYでなければなりません。

このttyコマンドは標準入力に接続されているTTYを報告します。コマンドラインリダイレクトを使用して、ttyコマンドのstderrを対応するstdinに関連付けることができます。私はfishユーザーではありませんが、bashたとえば、次のように実行します。

tty <&2

おすすめ記事