~/.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)

그러나 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

관련 정보