Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Create SSH Manager with Go

syossan27
April 18, 2018
1.1k

Create SSH Manager with Go

This slide for Go(Un)Conference #1
https://gounconference.connpass.com/event/83112

syossan27

April 18, 2018
Tweet

More Decks by syossan27

Transcript

  1. Feature ɾManage ssh connection informations ɾConnect using by connection information

    ɾCrypt for connection information by AES key ɾBash completion
  2. 1 client, err := ssh.Dial("tcp", "[email protected]") 2 session, err :=

    client.NewSession() 3 fd := int(os.Stdin.Fd() 4 oldState, err := terminal.MakeRaw(fd)) 5 session.Stdout = os.Stdout 6 session.Stderr = os.Stderr 7 session.Stdin = os.Stdin 8 modes := ssh.TerminalModes{ 9 ssh.ECHO: 1, 10 ssh.TTY_OP_ISPEED: 14400, 11 ssh.TTY_OP_OSPEED: 14400, 12 } 13 err = session.RequestPty("xterm-256color", h, w, modes) 14 err = session.Shell() 15 err = session.Wait() Can implement by 15 line !
  3. ! Important processing 3 fd := int(os.Stdin.Fd() 4 oldState, err

    := terminal.MakeRaw(fd)) Important to exec ssh terminal in raw mode. If execute ssh terminal in cooked mode, buffering input. Therefore not work editor etc...
  4. Manage connection informations 1. Input connection information 2. Crypt for

    using by AES key 
 (ex. ~/.ssh/id_rsa) 3. Write to file
  5. 1 completionFileContent := ` 2 _cli_bash_autocomplete() { 3 local cur

    opts base 4 COMPREPLY=() 5 cur="${COMP_WORDS[COMP_CWORD]}" 6 opts=$( ${COMP_WORDS[@]:0:$COMP_CWORD} --generate-bash- completion ) 7 COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) 8 return 0 9 } 10 complete -F _cli_bash_autocomplete en 11 ` 12 13 f, err := os.Create(completionFile) 14 _, err = f.Write([]byte(completionFileContent)) 15 16 loadConfigFileContent := "if [ -f '/etc/bash_completion.d/en' ]; then source '/etc/bash_completion.d/en'; fi” 17 18 f, err := os.OpenFile(“~/.bashrc”, os.O_APPEND|os.O_WRONLY, 0600) 19 fmt.Fprintln(f, loadConfigFileContent)