mirror of
https://github.com/kubenetworks/kubevpn.git
synced 2025-10-08 00:30:29 +08:00
fix: fix ssh bug (#99)
This commit is contained in:
67
.github/release-note.sh
vendored
67
.github/release-note.sh
vendored
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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) {
|
||||
|
Reference in New Issue
Block a user