本文整理汇总了Golang中golang.org/x/crypto/ssh.Request类的典型用法代码示例。如果您正苦于以下问题:Golang Request类的具体用法?Golang Request怎么用?Golang Request使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Request类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的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)
}
}
示例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
}
}
示例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)
}
示例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)
}
}
示例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)
}
}
示例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
}
示例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
}
示例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
}
示例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)
}
}
}
示例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()
}
示例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
}
}
}
示例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)
}
}
}
示例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)
}
示例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()
}
}
示例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
}