Wie kann man erreichen, dass ~/.ssh/config mit Host * Exec den TTY-Namen der aktuellen Shell übernimmt?

Wie kann man erreichen, dass ~/.ssh/config mit Host * Exec den TTY-Namen der aktuellen Shell übernimmt?

Ich verwende OS X und einen privaten SSH-Schlüssel, der in einem Yubikey gespeichert ist, um per SSH auf Remote-Server zuzugreifen. Jedes Mal, wenn mein Mac in den Ruhezustand wechselt und wieder aufwacht, muss ich ausführen gpg-connect-agent updatestartuptty /bye.Diese Antwort~/.ssh/configsagte, ich kann diesen Befehl so eingeben

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

Aber das funktioniert nicht, weil ich die GPG_TTYUmgebungsvariable im Kontext davon execauf den Wert meiner aktuellen Shell setzen muss tty. Ich verwende die Fish-Shell und habe dies in~/.config/fish/config.fish

set -x GPG_TTY (tty)

Aber wenn SSH execläuft, gibt TTY zurück not a tty. Dies sind alle meine Umgebungsvariablen.

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

Wie kann ich Match host * exec ...das TTY übernehmen? Oder gibt es eine insgesamt bessere Möglichkeit, OS X nach dem Ruhe-/Aufwachen mit Yubikey + SSH zum Laufen zu bringen?

Antwort1

Entsprechend derOpenSSH-Quellcode, Befehle, die für die Funktion „Match exec“ aufgerufen werden, werden mit ihrer Standardeingabe und -ausgabe mit /dev/null verbunden. Der Standardfehler bleibt jedoch unverändert. Wenn Sie sshvon einem TTY aus ausführen, sollte der Standardfehler des exec-Befehls weiterhin das TTY sein.

Der ttyBefehl meldet das TTY, das mit seiner Standardeingabe verbunden ist. Sie könnten eine Befehlszeilenumleitung verwenden, um den ttystderr des Befehls mit seinem stdin zu verbinden. Ich bin kein fishBenutzer, aber unter bashdiesem Beispiel würden Sie so etwas ausführen:

tty <&2

verwandte Informationen