Innitial Commit

+added Base Project Version 0.0.1
This commit is contained in:
2026-05-03 01:13:59 +02:00
commit 321f4a5bad
8 changed files with 745 additions and 0 deletions

20
internal/config/config.go Normal file
View File

@@ -0,0 +1,20 @@
package config
import (
"os"
"pdev-ssh/internal/models"
"gopkg.in/yaml.v3"
)
func LoadConfig(path string) (models.AppConfig, error) {
var cfg models.AppConfig
data, err := os.ReadFile(path)
if err != nil {
return cfg, err
}
err = yaml.Unmarshal(data, &cfg)
return cfg, err
}

28
internal/models/server.go Normal file
View File

@@ -0,0 +1,28 @@
package models
type TerminalSettings struct {
Term string `yaml:"term"`
EnableKittyFix bool `yaml:"enable_kitty_fix"`
}
type Settings struct {
Theme string `yaml:"theme"`
Terminal TerminalSettings `yaml:"terminal"`
}
type Server struct {
Name string `yaml:"name"`
Host string `yaml:"host"`
User string `yaml:"user"`
Port int `yaml:"port"`
Group string `yaml:"group"`
Auth string `yaml:"auth"`
Key string `yaml:"key"`
PasswordID string `yaml:"password_id"`
KittyFix bool `yaml:"kitty_fix"`
}
type AppConfig struct {
Settings Settings `yaml:"settings"`
Servers []Server `yaml:"servers"`
}

View File

@@ -0,0 +1,45 @@
package secret
import (
"fmt"
"github.com/99designs/keyring"
)
const serviceName = "pdev-ssh"
func OpenKeyring() (keyring.Keyring, error) {
return keyring.Open(keyring.Config{
ServiceName: serviceName,
})
}
func GetPassword(id string) (string, error) {
kr, err := OpenKeyring()
if err != nil {
return "", err
}
item, err := kr.Get(id)
if err != nil {
return "", err
}
return string(item.Data), nil
}
func SavePassword(id string, password string) error {
if id == "" {
return fmt.Errorf("password_id fehlt")
}
kr, err := OpenKeyring()
if err != nil {
return err
}
return kr.Set(keyring.Item{
Key: id,
Data: []byte(password),
})
}

54
internal/sshclient/ssh.go Normal file
View File

@@ -0,0 +1,54 @@
package sshclient
import (
"fmt"
"os"
"pdev-ssh/internal/models"
"golang.org/x/crypto/ssh"
)
func ConnectWithPassword(server models.Server, password string) error {
config := &ssh.ClientConfig{
User: server.User,
Auth: []ssh.AuthMethod{
ssh.Password(password),
},
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
}
addr := fmt.Sprintf("%s:%d", server.Host, server.Port)
client, err := ssh.Dial("tcp", addr, config)
if err != nil {
return err
}
defer client.Close()
session, err := client.NewSession()
if err != nil {
return err
}
defer session.Close()
session.Stdout = os.Stdout
session.Stderr = os.Stderr
session.Stdin = os.Stdin
modes := ssh.TerminalModes{
ssh.ECHO: 1,
ssh.TTY_OP_ISPEED: 14400,
ssh.TTY_OP_OSPEED: 14400,
}
if err := session.RequestPty("xterm-256color", 40, 120, modes); err != nil {
return err
}
if err := session.Shell(); err != nil {
return err
}
return session.Wait()
}