本文整理汇总了Golang中golang.org/x/crypto/ssh.Request类的典型用法代码示例。如果您正苦于以下问题:Golang Request类的具体用法?Golang Request怎么用?Golang Request使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Request类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: handleExecRequest
func (sess *session) handleExecRequest(request *ssh.Request) {
logger := sess.logger.Session("handle-exec-request")
type execMsg struct {
Command string
}
var execMessage execMsg
err := ssh.Unmarshal(request.Payload, &execMessage)
if err != nil {
logger.Error("unmarshal-failed", err)
if request.WantReply {
request.Reply(false, nil)
}
return
}
if scpRegex.MatchString(execMessage.Command) {
logger.Info("handling-scp-command", lager.Data{"Command": execMessage.Command})
sess.executeSCP(execMessage.Command, request)
} else {
logger.Info("executeShell", lager.Data{"request": request, "command": execMessage.Command})
sess.executeShell(request, "-c", execMessage.Command)
}
}
开发者ID:cloudfoundry-incubator,项目名称:diego-ssh-windows,代码行数:25,代码来源:session_channel_handler.go
示例2: runReceive
func (s *server) runReceive(
req *ssh.Request,
sshConn *ssh.ServerConn,
channel ssh.Channel,
repoName string,
parts []string,
connData string,
) func() error {
return func() error {
req.Reply(true, nil) // We processed. Yay.
if !strings.Contains(sshConn.Permissions.Extensions["apps"], repoName) {
return errBuildAppPerm
}
repo := repoName + ".git"
recvErr := git.Receive(
repo,
parts[0],
s.gitHome,
channel,
sshConn.Permissions.Extensions["fingerprint"],
sshConn.Permissions.Extensions["user"],
connData,
s.receivetype,
)
if recvErr != nil {
return recvErr
}
return nil
}
}
开发者ID:aledbf,项目名称:builder,代码行数:30,代码来源:server.go
示例3: handleEnv
func (h *sshHandler) handleEnv(req *ssh.Request) {
var pair EnvVar
ssh.Unmarshal(req.Payload, &pair)
envvar := fmt.Sprintf("%s=%s", pair.Name, pair.Value)
h.Env = append(h.Env, envvar)
req.Reply(true, nil)
}
开发者ID:simudream,项目名称:sshfront,代码行数:7,代码来源:handlers.go
示例4: handleSignalRequest
func (sess *session) handleSignalRequest(request *ssh.Request) {
logger := sess.logger.Session("handle-signal-request")
type signalMsg struct {
Signal string
}
var signalMessage signalMsg
err := ssh.Unmarshal(request.Payload, &signalMessage)
if err != nil {
logger.Error("unmarshal-failed", err)
if request.WantReply {
request.Reply(false, nil)
}
return
}
sess.Lock()
defer sess.Unlock()
cmd := sess.command
if cmd != nil {
signal := signals.SyscallSignals[ssh.Signal(signalMessage.Signal)]
err := sess.runner.Signal(cmd, signal)
if err != nil {
logger.Error("process-signal-failed", err)
}
}
if request.WantReply {
request.Reply(true, nil)
}
}
开发者ID:benjaminharnett,项目名称:diego-ssh,代码行数:34,代码来源:session_channel_handler.go
示例5: handlePtyRequest
func (sess *session) handlePtyRequest(request *ssh.Request) {
logger := sess.logger.Session("handle-pty-request")
var ptyRequestMessage ptyRequestMsg
err := ssh.Unmarshal(request.Payload, &ptyRequestMessage)
if err != nil {
logger.Error("unmarshal-failed", err)
if request.WantReply {
request.Reply(false, nil)
}
return
}
sess.Lock()
defer sess.Unlock()
sess.allocPty = true
sess.ptyRequest = ptyRequestMessage
sess.env["TERM"] = ptyRequestMessage.Term
if request.WantReply {
request.Reply(true, nil)
}
}
开发者ID:benjaminharnett,项目名称:diego-ssh,代码行数:25,代码来源:session_channel_handler.go
示例6: rejectRequest
func rejectRequest(req *ssh.Request) error {
fmt.Fprintf(sshServerDebugStream, "ssh rejecting request, type: %s\n", req.Type)
err := req.Reply(false, []byte{})
if err != nil {
fmt.Fprintf(sshServerDebugStream, "ssh request reply had error: %v\n", err)
}
return err
}
开发者ID:tomzhang,项目名称:sftp,代码行数:8,代码来源:server_integration_test.go
示例7: Ping
// Ping handles a simple test SSH exec.
//
// Returns the string PONG and exit status 0.
//
// Params:
// - channel (ssh.Channel): The channel to respond on.
// - request (*ssh.Request): The request.
//
func Ping(channel ssh.Channel, req *ssh.Request) error {
log.Info("PING")
if _, err := channel.Write([]byte("pong")); err != nil {
log.Err("Failed to write to channel: %s", err)
}
sendExitStatus(0, channel)
req.Reply(true, nil)
return nil
}
开发者ID:aledbf,项目名称:builder,代码行数:17,代码来源:server.go
示例8: handleSubsystem
func (chsvr *sshSessionChannelServer) handleSubsystem(req *ssh.Request) error {
defer func() {
err1 := chsvr.ch.CloseWrite()
err2 := chsvr.ch.Close()
fmt.Fprintf(sshServerDebugStream, "ssh server subsystem request complete, err: %v %v\n", err1, err2)
}()
subsystemReq := &sshSubsystemRequest{}
if err := ssh.Unmarshal(req.Payload, subsystemReq); err != nil {
return rejectRequestUnmarshalError(req, subsystemReq, err)
}
// reply to the ssh client
// no idea if this is actually correct spec-wise.
// just enough for an sftp server to start.
if subsystemReq.Name != "sftp" {
return req.Reply(false, nil)
}
req.Reply(true, nil)
if !chsvr.svr.useSubsystem {
// use the openssh sftp server backend; this is to test the ssh code, not the sftp code,
// or is used for comparison between our sftp subsystem and the openssh sftp subsystem
cmd := exec.Command(*testSftp, "-e", "-l", "DEBUG") // log to stderr
cmd.Stdin = chsvr.ch
cmd.Stdout = chsvr.ch
cmd.Stderr = sftpServerDebugStream
if err := cmd.Start(); err != nil {
return err
}
return cmd.Wait()
}
sftpServer, err := NewServer(
chsvr.ch,
chsvr.ch,
WithDebug(sftpServerDebugStream),
)
if err != nil {
return err
}
// wait for the session to close
runErr := sftpServer.Serve()
exitStatus := uint32(1)
if runErr == nil {
exitStatus = uint32(0)
}
_, exitStatusErr := chsvr.ch.SendRequest("exit-status", false, ssh.Marshal(sshSubsystemExitStatus{exitStatus}))
return exitStatusErr
}
开发者ID:a-palchikov,项目名称:sftp,代码行数:54,代码来源:server_integration_test.go
示例9: Request
func (h *sshHandler) Request(req *ssh.Request) {
switch req.Type {
case "exec":
h.handleExec(req)
case "pty-req":
h.handlePty(req)
case "window-change":
h.handleWinch(req)
default:
if req.WantReply {
req.Reply(true, nil)
}
}
}
开发者ID:technosophos,项目名称:execd,代码行数:14,代码来源:handlers.go
示例10: executeSCP
func (sess *session) executeSCP(command string, request *ssh.Request) {
logger := sess.logger.Session("execute-scp")
if request.WantReply {
request.Reply(true, nil)
}
copier, err := scp.NewFromCommand(command, sess.channel, sess.channel, sess.channel.Stderr(), logger)
if err == nil {
err = copier.Copy()
}
sess.sendSCPExitMessage(err)
sess.destroy()
}
开发者ID:benjaminharnett,项目名称:diego-ssh,代码行数:15,代码来源:session_channel_handler.go
示例11: HandleRequest
func (c *Channel) HandleRequest(request *ssh.Request) {
glog.V(9).Infof("request received: type = %s, want_reply = %v, payload = %v", request.Type, request.WantReply, request.Payload)
// check parameters
ok := false
switch request.Type {
case "env":
// just ignore the env settings from client
ok = true
case "shell":
// let client open shell without any command
if len(request.Payload) > 0 {
break
}
ok = true
}
// reply to client
if request.WantReply {
if err := request.Reply(ok, nil); err != nil {
glog.Warningf("failed to reply to request: %s", err)
}
}
// do actual work here
switch request.Type {
case "shell":
defer c.Close()
status := c.Session().Gateway().Status()
encoded, err := json.MarshalIndent(status, "", " ")
if err != nil {
glog.Warningf("failed to marshal status: %s", err)
break
}
if _, err := c.Write(encoded); err != nil {
glog.Warningf("failed to send status: %s", err)
break
}
if _, err := c.Write([]byte("\n")); err != nil {
glog.Warningf("failed to send status: %s", err)
break
}
}
}
开发者ID:ziyan,项目名称:gatewaysshd,代码行数:47,代码来源:channel.go
示例12: HandleRequest
func (s *Session) HandleRequest(request *ssh.Request) {
glog.V(9).Infof("request received: type = %s, want_reply = %v, payload = %v", request.Type, request.WantReply, request.Payload)
ok := false
switch request.Type {
case "tcpip-forward":
request, err := UnmarshalForwardRequest(request.Payload)
if err != nil {
glog.Errorf("failed to decode request: %s", err)
break
}
if request.Port == 0 {
glog.Errorf("requested forwarding port is not allowed: %d", request.Port)
break
}
if err := s.RegisterService(request.Host, uint16(request.Port)); err != nil {
glog.Errorf("failed to register service in session: %s", err)
break
}
ok = true
case "cancel-tcpip-forward":
request, err := UnmarshalForwardRequest(request.Payload)
if err != nil {
glog.Errorf("failed to decode request: %s", err)
break
}
if err := s.DeregisterService(request.Host, uint16(request.Port)); err != nil {
glog.Errorf("failed to register service in session: %s", err)
break
}
ok = true
}
if request.WantReply {
if err := request.Reply(ok, nil); err != nil {
glog.Warningf("failed to reply to request: %s", err)
}
}
}
开发者ID:ziyan,项目名称:gatewaysshd,代码行数:46,代码来源:session.go
示例13: Reply
//Reply handles the operation between a req and channel
func Reply(req *ssh.Request, dest ssh.Channel, c *ConnInsight) {
dx, err := dest.SendRequest(req.Type, req.WantReply, req.Payload)
checkError(err, fmt.Sprintf("Request %s processed", req.Type))
if req.WantReply {
req.Reply(dx, nil)
}
meta := map[string]interface{}{
"type": "reply",
"name": req.Type,
"payload": req.Payload,
}
c.Aux().Emit(meta)
}
开发者ID:influx6,项目名称:proxies,代码行数:19,代码来源:ssh.go
示例14: handleRequest
/* handleRequest handles proxying a request r via sr, which should be a closure
which sends the request passed to it on a channel or SSH connection. If the
request can't be proxied, cl will be called to close whatever sr sends r on.
info is used for logging. */
func handleRequest(
r *ssh.Request,
sr func(
name string,
wantReply bool,
payload []byte,
) (bool, []byte, error),
cl func() error,
info string) {
/* If this is the wrong sort of request, respond no */
if s, ok := delayedReqs[r.Type]; ok {
log.Printf(
"%v Type:%v Delay:%v",
info,
r.Type,
s,
)
time.Sleep(s)
}
logRequest(r, info)
/* Ask the other side */
ok, data, err := sr(r.Type, r.WantReply, r.Payload)
if nil != err {
log.Printf(
"%v Unable to receive reply for %v request: %v",
info,
r.Type,
err,
)
cl()
return
}
logRequestResponse(r, ok, data, info)
/* Proxy back */
if err := r.Reply(ok, nil); nil != err {
log.Printf(
"%v Unable to reply to %v request: %v",
info,
r.Type,
err,
)
cl()
}
}
开发者ID:magisterquis,项目名称:sshhipot,代码行数:48,代码来源:request.go
示例15: forwardRequest
func forwardRequest(req *ssh.Request, channel ssh.Channel) error {
if string(req.Type) != "subsystem" && string(req.Type) != "exit-status" {
req.Reply(false, nil)
if req.Type == "env" {
return nil
}
return fmt.Errorf("Ignoring unsupported request type: %s", string(req.Type))
}
reply, err := channel.SendRequest(req.Type, req.WantReply, req.Payload)
if err != nil {
return err
}
if req.WantReply {
req.Reply(reply, nil)
}
return nil
}
开发者ID:Freeaqingme,项目名称:SshReverseProxy,代码行数:20,代码来源:daemon.go
示例16: handleEnv
func (chsvr *sshSessionChannelServer) handleEnv(req *ssh.Request) error {
envReq := &sshEnvRequest{}
if err := ssh.Unmarshal(req.Payload, envReq); err != nil {
return rejectRequestUnmarshalError(req, envReq, err)
}
req.Reply(true, nil)
found := false
for i, envstr := range chsvr.env {
if strings.HasPrefix(envstr, envReq.Envvar+"=") {
found = true
chsvr.env[i] = envReq.Envvar + "=" + envReq.Value
}
}
if !found {
chsvr.env = append(chsvr.env, envReq.Envvar+"="+envReq.Value)
}
return nil
}
开发者ID:tomzhang,项目名称:sftp,代码行数:20,代码来源:server_integration_test.go
示例17: handleExec
func (h *sshHandler) handleExec(req *ssh.Request) {
h.Lock()
defer h.Unlock()
var payload = struct{ Value string }{}
ssh.Unmarshal(req.Payload, &payload)
cmdline := payload.Value
// Initialize Cmd
var cmd *exec.Cmd
if *shell {
shellcmd := flag.Arg(1) + " " + cmdline
cmd = exec.Command(os.Getenv("SHELL"), "-c", shellcmd)
} else {
cmdargs, err := shlex.Split(cmdline)
if h.assert("exec shlex.Split", err) {
h.channel.Close()
return
}
cmd = exec.Command(h.ExecHandler[0], append(h.ExecHandler[1:], cmdargs...)...)
}
cmd.Env = append(h.Env, "SSH_ORIGINAL_COMMAND="+cmdline)
cmd.Stdout = h.stdout
cmd.Stderr = h.stderr
// cmd.Wait closes the stdin when it's done, so we need to proxy it through a pipe
stdinPipe, err := cmd.StdinPipe()
if h.assert("exec cmd.StdinPipe", err) {
h.channel.Close()
return
}
go io.Copy(stdinPipe, h.channel)
if req.WantReply {
req.Reply(true, nil)
}
// We run inline to prevent concurrent exec requests for the channel as the lock is held.
h.Exit(cmd.Run())
}
开发者ID:technosophos,项目名称:execd,代码行数:41,代码来源:handlers.go
示例18: handleExec
// Payload: int: command size, string: command
func handleExec(ch ssh.Channel, req *ssh.Request) {
command := string(req.Payload[4:])
gitCmds := []string{"git-receive-pack", "git-upload-pack"}
valid := false
for _, cmd := range gitCmds {
if strings.HasPrefix(command, cmd) {
valid = true
}
}
req.Reply(true, []byte("0\r\n"))
if !valid {
ch.Write([]byte("command is not a GIT command\r\n"))
ch.Close()
return
}
ch.Write([]byte("well done!\r\n"))
ch.Close()
}
开发者ID:slawosz,项目名称:ssh-commander,代码行数:22,代码来源:server2.go
示例19: handleSubsystemRequest
func (sess *session) handleSubsystemRequest(request *ssh.Request) {
logger := sess.logger.Session("handle-subsystem-request")
logger.Info("starting")
defer logger.Info("finished")
type subsysMsg struct {
Subsystem string
}
var subsystemMessage subsysMsg
err := ssh.Unmarshal(request.Payload, &subsystemMessage)
if err != nil {
logger.Error("unmarshal-failed", err)
if request.WantReply {
request.Reply(false, nil)
}
return
}
if subsystemMessage.Subsystem != "sftp" {
logger.Info("unsupported-subsystem", lager.Data{"subsystem": subsystemMessage.Subsystem})
if request.WantReply {
request.Reply(false, nil)
}
return
}
lagerWriter := helpers.NewLagerWriter(logger.Session("sftp-server"))
sftpServer, err := sftp.NewServer(sess.channel, sess.channel, sftp.WithDebug(lagerWriter))
if err != nil {
logger.Error("sftp-new-server-failed", err)
if request.WantReply {
request.Reply(false, nil)
}
return
}
if request.WantReply {
request.Reply(true, nil)
}
logger.Info("starting-server")
go func() {
defer sess.destroy()
err = sftpServer.Serve()
if err != nil {
logger.Error("sftp-serve-error", err)
}
}()
}
开发者ID:swisscom,项目名称:diego-ssh,代码行数:50,代码来源:session_channel_handler.go
示例20: handlePty
func (h *sshHandler) handlePty(req *ssh.Request) {
h.Lock()
defer h.Unlock()
if h.ptyShell != nil {
// Only allow one pty per channel
req.Reply(false, nil)
return
}
width, height, okSize := parsePtyRequest(req.Payload)
// Initialize Cmd
var cmd *exec.Cmd
if *shell {
cmd = exec.Command(os.Getenv("SHELL"))
} else {
cmd = exec.Command(h.ExecHandler[0], h.ExecHandler[1:]...)
}
cmd.Env = h.Env
// attachShell does cmd.Start() so we need to do cmd.Wait() later
ptyShell, _, err := attachShell(cmd, h.stdout, h.channel)
if h.assert("pty attachShell", err) {
h.channel.Close()
return
}
h.ptyShell = ptyShell
if okSize {
setWinsize(ptyShell.Fd(), width, height)
}
// Ready to receive input
req.Reply(true, nil)
// We run this concurrently so that the lock is released for window-change events.
go h.Exit(cmd.Wait())
}
开发者ID:technosophos,项目名称:execd,代码行数:39,代码来源:handlers.go
注:本文中的golang.org/x/crypto/ssh.Request类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论