mirror of
https://github.com/xxjwxc/public.git
synced 2025-09-26 20:01:19 +08:00
new
This commit is contained in:
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"go.inferGopath": false
|
||||||
|
}
|
@@ -39,21 +39,6 @@ func New(ip string, username string, password string, port ...int) (*Cli, error)
|
|||||||
return cli, cli.connect()
|
return cli, cli.connect()
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewSession new session
|
|
||||||
func (c Cli) newSession() (*ssh.Session, error) {
|
|
||||||
if c.client == nil {
|
|
||||||
if err := c.connect(); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
session, err := c.client.NewSession()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return session, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Run 执行 shell脚本命令
|
// Run 执行 shell脚本命令
|
||||||
func (c Cli) Run(shell string) (string, error) {
|
func (c Cli) Run(shell string) (string, error) {
|
||||||
session, err := c.newSession()
|
session, err := c.newSession()
|
||||||
@@ -118,7 +103,38 @@ func (c Cli) EnterTerminal() error {
|
|||||||
}
|
}
|
||||||
defer session.Close()
|
defer session.Close()
|
||||||
|
|
||||||
return c.enterTerminalSession(session, os.Stdout, os.Stdin)
|
fd := int(os.Stdin.Fd())
|
||||||
|
oldState, err := terminal.MakeRaw(fd)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer terminal.Restore(fd, oldState)
|
||||||
|
|
||||||
|
session.Stdout = os.Stdout
|
||||||
|
session.Stderr = os.Stdin
|
||||||
|
session.Stdin = os.Stdin
|
||||||
|
|
||||||
|
termWidth, termHeight, err := terminal.GetSize(fd)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
modes := ssh.TerminalModes{
|
||||||
|
ssh.ECHO: 1,
|
||||||
|
ssh.TTY_OP_ISPEED: 14400,
|
||||||
|
ssh.TTY_OP_OSPEED: 14400,
|
||||||
|
}
|
||||||
|
err = session.RequestPty("xterm-256color", termHeight, termWidth, modes)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = session.Shell()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return session.Wait()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enter 完全进入终端
|
// Enter 完全进入终端
|
||||||
@@ -129,17 +145,12 @@ func (c Cli) Enter(w io.Writer, r io.Reader) error {
|
|||||||
}
|
}
|
||||||
defer session.Close()
|
defer session.Close()
|
||||||
|
|
||||||
return c.enterTerminalSession(session, w, r)
|
|
||||||
}
|
|
||||||
|
|
||||||
// EnterTerminalSession 进入终端
|
|
||||||
func (c Cli) enterTerminalSession(session *ssh.Session, w io.Writer, r io.Reader) error {
|
|
||||||
fd := int(os.Stdin.Fd())
|
fd := int(os.Stdin.Fd())
|
||||||
oldState, err := terminal.MakeRaw(fd)
|
// oldState, err := terminal.MakeRaw(fd)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return err
|
// return err
|
||||||
}
|
// }
|
||||||
defer terminal.Restore(fd, oldState)
|
// defer terminal.Restore(fd, oldState)
|
||||||
|
|
||||||
session.Stdout = w
|
session.Stdout = w
|
||||||
session.Stderr = os.Stdin
|
session.Stderr = os.Stdin
|
||||||
@@ -186,3 +197,18 @@ func (c *Cli) connect() error {
|
|||||||
c.client = sshClient
|
c.client = sshClient
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// newSession new session
|
||||||
|
func (c Cli) newSession() (*ssh.Session, error) {
|
||||||
|
if c.client == nil {
|
||||||
|
if err := c.connect(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
session, err := c.client.NewSession()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return session, nil
|
||||||
|
}
|
||||||
|
@@ -23,14 +23,11 @@ func NewReader() *MyReader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (r *MyReader) Read(p []byte) (n int, err error) {
|
func (r *MyReader) Read(p []byte) (n int, err error) {
|
||||||
fmt.Println("into Read...")
|
|
||||||
fmt.Println("=======:", string(p))
|
|
||||||
cmd := <-r.channel
|
cmd := <-r.channel
|
||||||
tmp := []byte(cmd + "\n")
|
tmp := []byte(cmd + "\n")
|
||||||
for i, v := range tmp {
|
for i, v := range tmp {
|
||||||
p[i] = v
|
p[i] = v
|
||||||
}
|
}
|
||||||
fmt.Println("leave Read.")
|
|
||||||
return len(tmp), err
|
return len(tmp), err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,9 +48,7 @@ func (r *MyReader) ListenStdin() {
|
|||||||
arg = " " + arg
|
arg = " " + arg
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println("yes:::::", str+arg)
|
|
||||||
if atomic.LoadInt32(&r.isClose) == 1 {
|
if atomic.LoadInt32(&r.isClose) == 1 {
|
||||||
fmt.Println("outtttttt")
|
|
||||||
break
|
break
|
||||||
} else {
|
} else {
|
||||||
r.channel <- str + arg
|
r.channel <- str + arg
|
||||||
|
@@ -37,6 +37,9 @@ func (w *MyWriter) Run() {
|
|||||||
go func() {
|
go func() {
|
||||||
for res := range w.channel {
|
for res := range w.channel {
|
||||||
fmt.Print(res)
|
fmt.Print(res)
|
||||||
|
// 以下去掉命令行显示
|
||||||
|
// index := strings.Index(res, "\n")
|
||||||
|
// fmt.Print(res[index+1:])
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user