Updated to connect to another host after ssh exit.

This commit is contained in:
2018-04-02 16:07:35 +01:00
parent f79e38d49c
commit 0f597e39fd

46
main.go
View File

@@ -75,18 +75,7 @@ func readHosts(lines []string) []host {
return hosts return hosts
} }
func main() { func promptHost(hosts []host) (host, error) {
args := os.Args[1:]
if len(args) == 0 {
log.Fatalf("Usage: %s [configfile]", os.Args[0])
}
fileName := args[0]
lines := strings.Split(readFile(fileName), "\n")
for i, line := range lines {
lines[i] = strings.Trim(line, "\r\t ")
}
hosts := readHosts(lines)
searcher := func(input string, index int) bool { searcher := func(input string, index int) bool {
host := hosts[index] host := hosts[index]
name := strings.Replace(strings.ToLower(host.Name+host.User+host.HostName), " ", "", -1) name := strings.Replace(strings.ToLower(host.Name+host.User+host.HostName), " ", "", -1)
@@ -94,7 +83,6 @@ func main() {
return strings.Contains(name, input) return strings.Contains(name, input)
} }
hostTemplate := "{{\"[\" | bold}}{{.Name | cyan | bold }}{{\"]\" | bold}} {{ .User |bold }} @ {{ .HostName | bold }}" hostTemplate := "{{\"[\" | bold}}{{.Name | cyan | bold }}{{\"]\" | bold}} {{ .User |bold }} @ {{ .HostName | bold }}"
templates := &promptui.SelectTemplates{ templates := &promptui.SelectTemplates{
Label: "{{ . | bold }}", Label: "{{ . | bold }}",
@@ -107,20 +95,44 @@ func main() {
Label: "Select SSH Host", Label: "Select SSH Host",
Items: hosts, Items: hosts,
Templates: templates, Templates: templates,
Size: 4, Size: len(hosts),
Searcher: searcher, Searcher: searcher,
} }
i, _, promptErr := prompt.Run() i, _, promptErr := prompt.Run()
if promptErr != nil { if promptErr != nil {
fmt.Println("No option selected") return host{}, promptErr
return
} }
cmd := exec.Command("ssh", hosts[i].Name) return hosts[i], nil
}
func main() {
args := os.Args[1:]
if len(args) == 0 {
log.Fatalf("Usage: %s [configfile]", os.Args[0])
}
fileName := args[0]
lines := strings.Split(readFile(fileName), "\n")
for i, line := range lines {
lines[i] = strings.Trim(line, "\r\t ")
}
hosts := readHosts(lines)
var selected host
var promptErr error
for {
selected, promptErr = promptHost(hosts)
if promptErr != nil {
break
}
cmd := exec.Command("ssh", selected.Name)
cmd.Stdin = os.Stdin cmd.Stdin = os.Stdin
cmd.Stdout = os.Stdout cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr cmd.Stderr = os.Stderr
cmd.Run() cmd.Run()
fmt.Println("\n\tSSH Session Closed\n")
}
} }