ssh: Implement authentication for new ssh server
This commit is contained in:
parent
66b397e9da
commit
45f63935cd
10 changed files with 259 additions and 1 deletions
|
|
@ -1,6 +1,8 @@
|
|||
package barrel
|
||||
|
||||
import (
|
||||
"path/filepath"
|
||||
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/locker"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/mstore"
|
||||
|
|
@ -13,3 +15,11 @@ type Barrel struct {
|
|||
Locker *locker.Locker
|
||||
MStore *mstore.MStore
|
||||
}
|
||||
|
||||
func (barrel *Barrel) DataPath() string {
|
||||
return filepath.Join(barrel.FilesystemBase, "data")
|
||||
}
|
||||
|
||||
func (barrel *Barrel) AuthorizedKeysPath() string {
|
||||
return filepath.Join(barrel.DataPath(), "authorized_keys")
|
||||
}
|
||||
|
|
|
|||
32
internal/wisski/ingredient/barrel/ssh/ssh.go
Normal file
32
internal/wisski/ingredient/barrel/ssh/ssh.go
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
package ssh
|
||||
|
||||
import (
|
||||
"io"
|
||||
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/barrel"
|
||||
"github.com/FAU-CDI/wisski-distillery/pkg/environment"
|
||||
"github.com/FAU-CDI/wisski-distillery/pkg/sshx"
|
||||
"github.com/gliderlabs/ssh"
|
||||
)
|
||||
|
||||
type SSH struct {
|
||||
ingredient.Base
|
||||
Barrel *barrel.Barrel
|
||||
}
|
||||
|
||||
func (ssh *SSH) Keys() ([]ssh.PublicKey, error) {
|
||||
file, err := ssh.Environment.Open(ssh.Barrel.AuthorizedKeysPath())
|
||||
if environment.IsNotExist(err) {
|
||||
return nil, nil
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
bytes, err := io.ReadAll(file)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return sshx.ParseAllKeys(bytes), nil
|
||||
}
|
||||
|
|
@ -8,6 +8,7 @@ import (
|
|||
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/barrel"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/barrel/drush"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/barrel/provisioner"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/barrel/ssh"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/bookkeeping"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/info"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/wisski/ingredient/locker"
|
||||
|
|
@ -76,6 +77,10 @@ func (wisski *WissKI) Info() *info.Info {
|
|||
return export[*info.Info](wisski)
|
||||
}
|
||||
|
||||
func (wisski *WissKI) SSH() *ssh.SSH {
|
||||
return export[*ssh.SSH](wisski)
|
||||
}
|
||||
|
||||
//
|
||||
// All components
|
||||
// THESE SHOULD NEVER BE CALLED DIRECTLY
|
||||
|
|
@ -112,5 +117,7 @@ func (wisski *WissKI) allIngredients() []initFunc {
|
|||
auto[*drush.Drush],
|
||||
|
||||
auto[*reserve.Reserve],
|
||||
|
||||
auto[*ssh.SSH],
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue