// RunConfigureScript connects to the specified host over // SSH, and executes the provided script which is expected // to have been returned by ConfigureScript. func RunConfigureScript(script string, params ConfigureParams) error { logger.Debugf("Running script on %s: %s", params.Host, script) client := params.Client if client == nil { client = ssh.DefaultClient } cmd := ssh.Command(params.Host, []string{"sudo", "/bin/bash"}, nil) cmd.Stdin = strings.NewReader(script) cmd.Stderr = params.ProgressWriter return cmd.Run() }
// login uid/gid. This is done so that we don't require sudo, and by // consequence, don't require a pty, so we can interact with a script // via stdin. type SSHStorage struct { host string remotepath string tmpdir string cmd *ssh.Cmd stdin io.WriteCloser stdout io.ReadCloser scanner *bufio.Scanner } var sshCommand = func(host string, command ...string) *ssh.Cmd { return ssh.Command(host, command, nil) } type flockmode string const ( flockShared flockmode = "-s" flockExclusive flockmode = "-x" ) type NewSSHStorageParams struct { // Host is the host to connect to, in the format [user@]hostname. Host string // StorageDir is the root of the remote storage directory. StorageDir string