36 lines
		
	
	
		
			880 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			880 B
		
	
	
	
		
			Go
		
	
	
	
	
	
package Sync
 | 
						|
 | 
						|
import (
 | 
						|
	"log"
 | 
						|
)
 | 
						|
 | 
						|
// Another auth. method.
 | 
						|
func KeyboardInteractiveChallenge(user, instruction string, questions []string, echos []bool) (answers []string, err error) {
 | 
						|
 | 
						|
	// Log all the provided data:
 | 
						|
	log.Println(`User: ` + user)
 | 
						|
	log.Println(`Instruction: ` + instruction)
 | 
						|
	log.Println(`Questions:`)
 | 
						|
	for q := range questions {
 | 
						|
		log.Println(q)
 | 
						|
	}
 | 
						|
 | 
						|
	// How many questions are asked?
 | 
						|
	countQuestions := len(questions)
 | 
						|
 | 
						|
	if countQuestions == 1 {
 | 
						|
 | 
						|
		// We expect that in this case (only one question is asked), that the server want to know the password ;-)
 | 
						|
		answers = make([]string, countQuestions, countQuestions)
 | 
						|
		answers[0] = callbackPassword
 | 
						|
 | 
						|
	} else if countQuestions > 1 {
 | 
						|
 | 
						|
		// After logging, this call will exit the whole program:
 | 
						|
		log.Fatalln(`The SSH server is asking multiple questions! This program cannot handle this case.`)
 | 
						|
	}
 | 
						|
 | 
						|
	err = nil
 | 
						|
	return
 | 
						|
}
 |