fix: fix ssh bug (#99)

This commit is contained in:
naison
2023-11-28 20:21:11 +08:00
committed by GitHub
parent 5cc64d17c2
commit abf36b87a6
3 changed files with 77 additions and 15 deletions

View File

@@ -7,11 +7,70 @@ PREVIOUS_RELEASE=${PREVIOUS_RELEASE:-$1}
CHANGELOG=$(git log --no-merges --date=short --pretty=format:'- %h %an %ad %s' "${PREVIOUS_RELEASE}".."${RELEASE}")
cat <<EOF
## ${RELEASE}
# KubeVPN release ${RELEASE}
KubeVPN ${RELEASE} is available now ! 🎉
- fix known bugs 🛠
## Installation and Upgrading
wget -LO "https://github.com/KubeNetworks/kubevpn/releases/download/$(curl -L -s https://raw.githubusercontent.com/KubeNetworks/kubevpn/master/plugins/stable.txt)/kubevpn_$(curl -L -s https://raw.githubusercontent.com/KubeNetworks/kubevpn/master/plugins/stable.txt)_darwin_amd64.zip"
## Download KubeVPN for your platform
**Mac** (x86-64/Intel)
\`\`\`
curl -Lo kubevpn.zip https://github.com/KubeNetworks/kubevpn/releases/download/${RELEASE}/kubevpn_${RELEASE}_darwin_amd64.zip && unzip -d kubevpn kubevpn.zip
\`\`\`
**Mac** (AArch64/Apple M1 silicon)
\`\`\`
curl -Lo kubevpn.zip https://github.com/KubeNetworks/kubevpn/releases/download/${RELEASE}/kubevpn_${RELEASE}_darwin_arm64.zip && unzip -d kubevpn kubevpn.zip
\`\`\`
**Linux** (x86-64)
\`\`\`
curl -Lo kubevpn.zip https://github.com/KubeNetworks/kubevpn/releases/download/${RELEASE}/kubevpn_${RELEASE}_linux_amd64.zip && unzip -d kubevpn kubevpn.zip
\`\`\`
**Linux** (AArch64)
\`\`\`
curl -Lo kubevpn.zip https://github.com/KubeNetworks/kubevpn/releases/download/${RELEASE}/kubevpn_${RELEASE}_linux_arm64.zip && unzip -d kubevpn kubevpn.zip
\`\`\`
**Linux** (i386)
\`\`\`
curl -Lo kubevpn.zip https://github.com/KubeNetworks/kubevpn/releases/download/${RELEASE}/kubevpn_${RELEASE}_linux_386.zip && unzip -d kubevpn kubevpn.zip
\`\`\`
**Windows** (x86-64)
\`\`\`
curl -LO https://github.com/KubeNetworks/kubevpn/releases/download/${RELEASE}/kubevpn_${RELEASE}_windows_amd64.zip
\`\`\`
**Windows** (AArch64)
\`\`\`
curl -LO https://github.com/KubeNetworks/kubevpn/releases/download/${RELEASE}/kubevpn_${RELEASE}_windows_arm64.zip
\`\`\`
**Windows** (i386)
\`\`\`
curl -LO https://github.com/KubeNetworks/kubevpn/releases/download/${RELEASE}/kubevpn_${RELEASE}_windows_386.zip
\`\`\`
## Checksums
SHA256 checksums available for compiled binaries.
Run \`shasum -a 256 -c checksums.txt\` to verify.
## Upgrading
Run \`kubevpn upgrade\` to upgrade from a previous version.
## Changelog
${CHANGELOG}
EOF

View File

@@ -1,11 +1,13 @@
package cmds
import (
"fmt"
"io"
"os"
"strings"
"github.com/spf13/cobra"
"golang.org/x/crypto/ssh/terminal"
"golang.org/x/net/websocket"
cmdutil "k8s.io/kubectl/pkg/cmd/util"
"k8s.io/kubectl/pkg/util/i18n"
@@ -62,6 +64,15 @@ func CmdSSH(_ cmdutil.Factory) *cobra.Command {
if err != nil {
return err
}
fd := int(os.Stdin.Fd())
if !terminal.IsTerminal(fd) {
return fmt.Errorf("stdin is not a terminal")
}
state, err := terminal.MakeRaw(fd)
if err != nil {
return fmt.Errorf("terminal make raw: %s", err)
}
defer terminal.Restore(fd, state)
go io.Copy(conn, os.Stdin)
_, err = io.Copy(os.Stdout, conn)
return err

View File

@@ -196,19 +196,11 @@ func (w *wsHandler) terminal(conf *util.SshConfig, conn *websocket.Conn) error {
session.Stdin = conn
fd := int(os.Stdin.Fd())
if !terminal.IsTerminal(fd) {
state, err := terminal.MakeRaw(fd)
if err != nil {
w.Log("Terminal make raw: %s", err)
return fmt.Errorf("terminal make raw: %s", err)
}
defer terminal.Restore(fd, state)
}
width, height, err := terminal.GetSize(fd)
if err != nil {
w.Log("Terminal get size: %s", err)
return fmt.Errorf("terminal get size: %s", err)
width = 80
height = 40
}
modes := ssh.TerminalModes{
ssh.ECHO: 1,
@@ -302,7 +294,7 @@ func (w *wsHandler) Log(format string, a ...any) {
if len(a) != 0 {
str = fmt.Sprintf(format, a...)
}
w.conn.Write([]byte(str + "\n"))
w.conn.Write([]byte(str + "\r\n"))
}
func (w *wsHandler) PrintLine(msg string) {