~/.ssh/config Match Host * exec가 현재 쉘의 tty 이름을 상속받도록 만드는 방법은 무엇입니까?

~/.ssh/config Match Host * 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하지만 이 컨텍스트에서 env var를 exec현재 쉘 값으로 설정해야 하기 때문에 작동하지 않습니다 tty. 나는 생선 껍질을 사용하고 이것을 가지고 있습니다.~/.config/fish/config.fish

set -x GPG_TTY (tty)

그러나 ssh가 exec실행되면 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

관련 정보