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/config
sagte, ich kann diesen Befehl so eingeben
Match host * exec "gpg-connect-agent updatestartuptty /bye"
Aber das funktioniert nicht, weil ich die GPG_TTY
Umgebungsvariable im Kontext davon exec
auf 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 exec
lä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 ssh
von einem TTY aus ausführen, sollte der Standardfehler des exec-Befehls weiterhin das TTY sein.
Der tty
Befehl meldet das TTY, das mit seiner Standardeingabe verbunden ist. Sie könnten eine Befehlszeilenumleitung verwenden, um den tty
stderr des Befehls mit seinem stdin zu verbinden. Ich bin kein fish
Benutzer, aber unter bash
diesem Beispiel würden Sie so etwas ausführen:
tty <&2