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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
一人でちいさくはじめる Platform Engineering
syossan27
4
3k
一人SREが歩んだPlatform Engineeringスモールスタート実践録 ~ クラウドネイティブ会議版 ~
syossan27
4
2.3k
プロポーザル サポートガイドを読み解いていこう!
syossan27
3
1k
幻滅期を越える サイトリライアビリティ エンジニアリング
syossan27
1
270
一人SREが歩んだ Platform Engineering スモールスタート実践録
syossan27
2
2k
SREって何? 現場で学んだサイト信頼性の第一歩
syossan27
5
1.7k
知識0からカンファレンスやってみたらこうなった!
syossan27
5
790
突然のメモリ使用率上昇へ対応! k8sカスタムコントローラー開発事例
syossan27
2
590
監視 やばい
syossan27
12
11k
Featured
See All Featured
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
520
Leo the Paperboy
mayatellez
8
2.2k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
How to build a perfect <img>
jonoalderson
1
6k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
230
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
540
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
65k
RailsConf 2023
tenderlove
30
1.5k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
270
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.