(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:tid) op: assign_op.Equal rhs: {(DQ <'protocol version mismatch'>)} spids: [7] ) ] ) (command.ShFunction name: mismatch body: (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:server) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [21] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:client) op: assign_op.Equal rhs: {($ Id.VSub_Number '$2')} spids: [25] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:banner) op: assign_op.Equal rhs: { (command_sub left_token: <Id.Left_Backtick '`'> child: (command.Pipeline children: [ (C {<echo>} {(${ Id.VSub_Name client)}) (C {(${ Id.VSub_Name SSHD)} {<-o>} {(DQ <'Protocol='> (${ Id.VSub_Name server))} {<-i>} {<-f>} {(${ Id.VSub_Name OBJ) <'/sshd_proxy'>} ) ] negated: F ) ) } spids: [29] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:r) op: assign_op.Equal rhs: {($ Id.VSub_QMark '$?')} spids: [65] ) ] ) (C {<trace>} {(DQ <'sshd prints '> (${ Id.VSub_Name banner))}) (command.If arms: [ (if_arm cond: (condition.Shell commands: [ (command.Sentence child: (C {<Id.Lit_LBracket '['>} {($ Id.VSub_DollarName '$r')} {<-ne>} {<255>} {<Id.Lit_RBracket ']'>} ) terminator: <Id.Op_Semi _> ) ] ) action: [ (C {<fail>} { (DQ <'sshd prints '> (${ Id.VSub_Name banner) <' and accepts connect with version '> (${ Id.VSub_Name client) ) } ) ] spids: [79 92] ) ] ) ] ) ) (C {<mismatch>} {<2>} {<SSH-1.5-HALLO>}) (command.If arms: [ (if_arm cond: (condition.Shell commands: [(command.Sentence child:(C {<ssh_version>} {<1>}) terminator:<Id.Op_Semi _>)] ) action: [(C {<mismatch>} {<1>} {<SSH-2.0-HALLO>})] spids: [120 127] ) ] ) ] )