diff --git a/ssh/tailssh/tailssh.go b/ssh/tailssh/tailssh.go index 85ac064cc..b586a2e1d 100644 --- a/ssh/tailssh/tailssh.go +++ b/ssh/tailssh/tailssh.go @@ -1118,11 +1118,22 @@ func (ss *sshSession) run() { return } +// recorders returns the list of recorders to use for this session. +// If the final action has a non-empty list of recorders, that list is +// returned. Otherwise, the list of recorders from the initial action +// is returned. +func (ss *sshSession) recorders() []netip.AddrPort { + if len(ss.conn.finalAction.Recorders) > 0 { + return ss.conn.finalAction.Recorders + } + return ss.conn.action0.Recorders +} + func (ss *sshSession) shouldRecord() bool { // for now only record pty sessions // TODO(bradfitz,maisem): support recording non-pty stuff too. _, _, isPtyReq := ss.Pty() - return isPtyReq && len(ss.conn.finalAction.Recorders) > 0 + return isPtyReq && len(ss.recorders()) > 0 } type sshConnInfo struct { @@ -1306,11 +1317,12 @@ func randBytes(n int) []byte { // startNewRecording starts a new SSH session recording. func (ss *sshSession) startNewRecording() (_ *recording, err error) { - if len(ss.conn.finalAction.Recorders) == 0 { + recorders := ss.recorders() + if len(recorders) == 0 { return nil, errors.New("no recorders configured") } - recorder := ss.conn.finalAction.Recorders[0] - if len(ss.conn.finalAction.Recorders) > 1 { + recorder := recorders[0] + if len(recorders) > 1 { ss.logf("warning: multiple recorders configured, using first one: %v", recorder) }