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}")
|
CHANGELOG=$(git log --no-merges --date=short --pretty=format:'- %h %an %ad %s' "${PREVIOUS_RELEASE}".."${RELEASE}")
|
||||||
|
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
## ${RELEASE}
|
# KubeVPN release ${RELEASE}
|
||||||
|
|
||||||
KubeVPN ${RELEASE} is available now ! 🎉
|
KubeVPN ${RELEASE} is available now ! 🎉
|
||||||
- fix known bugs 🛠
|
|
||||||
## Installation and Upgrading
|
## Download KubeVPN for your platform
|
||||||
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"
|
|
||||||
|
**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
|
||||||
|
|
||||||
${CHANGELOG}
|
${CHANGELOG}
|
||||||
EOF
|
EOF
|
||||||
|
@@ -1,11 +1,13 @@
|
|||||||
package cmds
|
package cmds
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
"golang.org/x/crypto/ssh/terminal"
|
||||||
"golang.org/x/net/websocket"
|
"golang.org/x/net/websocket"
|
||||||
cmdutil "k8s.io/kubectl/pkg/cmd/util"
|
cmdutil "k8s.io/kubectl/pkg/cmd/util"
|
||||||
"k8s.io/kubectl/pkg/util/i18n"
|
"k8s.io/kubectl/pkg/util/i18n"
|
||||||
@@ -62,6 +64,15 @@ func CmdSSH(_ cmdutil.Factory) *cobra.Command {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
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)
|
go io.Copy(conn, os.Stdin)
|
||||||
_, err = io.Copy(os.Stdout, conn)
|
_, err = io.Copy(os.Stdout, conn)
|
||||||
return err
|
return err
|
||||||
|
@@ -196,19 +196,11 @@ func (w *wsHandler) terminal(conf *util.SshConfig, conn *websocket.Conn) error {
|
|||||||
session.Stdin = conn
|
session.Stdin = conn
|
||||||
|
|
||||||
fd := int(os.Stdin.Fd())
|
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)
|
width, height, err := terminal.GetSize(fd)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
w.Log("Terminal get size: %s", err)
|
w.Log("Terminal get size: %s", err)
|
||||||
return fmt.Errorf("terminal get size: %s", err)
|
width = 80
|
||||||
|
height = 40
|
||||||
}
|
}
|
||||||
modes := ssh.TerminalModes{
|
modes := ssh.TerminalModes{
|
||||||
ssh.ECHO: 1,
|
ssh.ECHO: 1,
|
||||||
@@ -302,7 +294,7 @@ func (w *wsHandler) Log(format string, a ...any) {
|
|||||||
if len(a) != 0 {
|
if len(a) != 0 {
|
||||||
str = fmt.Sprintf(format, a...)
|
str = fmt.Sprintf(format, a...)
|
||||||
}
|
}
|
||||||
w.conn.Write([]byte(str + "\n"))
|
w.conn.Write([]byte(str + "\r\n"))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *wsHandler) PrintLine(msg string) {
|
func (w *wsHandler) PrintLine(msg string) {
|
||||||
|
Reference in New Issue
Block a user