Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Create SSH Manager with Go
Search
syossan27
April 18, 2018
1.3k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Create SSH Manager with Go
This slide for Go(Un)Conference #1
https://gounconference.connpass.com/event/83112
syossan27
April 18, 2018
More Decks by syossan27
See All by syossan27
一人SREが歩んだPlatform Engineeringスモールスタート実践録 ~ クラウドネイティブ会議版 ~
syossan27
4
2.1k
プロポーザル サポートガイドを読み解いていこう!
syossan27
3
890
幻滅期を越える サイトリライアビリティ エンジニアリング
syossan27
1
240
一人SREが歩んだ Platform Engineering スモールスタート実践録
syossan27
2
1.9k
SREって何? 現場で学んだサイト信頼性の第一歩
syossan27
5
1.7k
知識0からカンファレンスやってみたらこうなった!
syossan27
5
750
突然のメモリ使用率上昇へ対応! k8sカスタムコントローラー開発事例
syossan27
2
570
監視 やばい
syossan27
12
11k
最先端を追う前に、まず広めよう! 〜AIツールの普及活動のすすめ〜
syossan27
2
1.6k
Featured
See All Featured
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
200
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
270
How to train your dragon (web standard)
notwaldorf
97
6.7k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
330
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
360
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
470
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
400
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.7k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Transcript
$SFBUF44).BOBHFS XJUI(P Shota Inoue Go (Un) Conference #1
I’m Shota Inoue (@syossan27) Golang Beginner ʕ ◔ϖ◔ʔ <
Write simple code !
None
None
Create this
Why? ɾOn business ɾCreate SSH Client with Go is simple!
Feature ɾManage ssh connection informations ɾConnect using by connection information
ɾCrypt for connection information by AES key ɾBash completion
Search Github… Only this! But…
Implement ssh client Use this package. golang.org/x/crypto/ssh golang.org/x/crypto/ssh/terminal
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 !
! 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...
None
Manage connection informations 1. Input connection information 2. Crypt for
using by AES key (ex. ~/.ssh/id_rsa) 3. Write to file
Another way… Use boltdb for store connection informations. but…
Bash completion Put bash_completion file by manual operation is easily,
but it is not cool ! Therefore…
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)
ʕ ◔ϖ◔ʔ < Go is God Fin.