add missing docker e2e test
This commit is contained in:
parent
fdc6691d75
commit
56844d0295
4 changed files with 120 additions and 27 deletions
|
|
@ -86,6 +86,7 @@ Plugin list
|
|||
* [workingdir](plugin/workingdir/) 🔀: `/home`-like directory to managed upstreams routing by sshpiped.
|
||||
* [workingdirbykey](plugin/workingdirbykey/) 🔀: same as `workingdir` but uses public key to route.
|
||||
* [yaml](plugin/yaml/) 🔀: config routing with a single yaml file.
|
||||
* [docker](plugin/docker/) 🔀: pipe into docker containers.
|
||||
* [azdevicecode](plugin/azdevicecode/) 🔒: ask user to enter [azure device code](https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-device-code) before login
|
||||
* [fixed](plugin/fixed/) 🔀: fixed targetting the dummy sshd server
|
||||
* [simplemath](plugin/simplemath/) 🔒: ask for very simple math question before login, demo purpose
|
||||
|
|
|
|||
|
|
@ -19,6 +19,11 @@ services:
|
|||
image: lscr.io/linuxserver/openssh-server:latest
|
||||
environment:
|
||||
- USER_NAME=user
|
||||
labels:
|
||||
- sshpiper.container_username=user
|
||||
- sshpiper.port=2222
|
||||
- sshpiper.authorized_keys=c3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFCZ1FEWndMdmN5eXFoWFhWZkxRU1hEdkFOMVQwZWQyNEVSRGFVUGdWS2xZaE5sR1RPNTh1TW1tc1gvOUc0SlRzZGlWSHFvR29OSDZ1a0Y4ZFNNMG1nWmdNT0dNdTE2VHdld2xqd01GcksrS1NZYTVaYzQ2Vnk1N2F6MFpFbml2WlZwY1RhdXpndHZwUTRjOXNhd3dVY2M5M0Y1eHdlZnNuTEl5eTJVc0s0SXhOeGFSV1NPMFdvanJGL3A2di9SaE1aeXZkcXlYUk9aVVl3aFRiUE1OZE1ZblROanY3YmVHL3dlR1Y3Wkhpc25TTzhiUDNjYStMVllkeVJINXhlMmp6Vm5HMmNjOHl5MUZZbjJOaHRLaUo5c1k5VFlCbndlSi8xNXZjbE9UY2xRMVBBa3pGZGt4WDM4aWM0VlhKNDhFREYwenR2cVdQeVpNQ2ZCQ2N4TGpHZVBwUW0xR1hRWU9udmthTEJPU1NNcDltRW9SZmUyZENmNjE4b3B1TTFjcEhxT2s2Z2RwZ3BKNXh5dzdFcUxVNWRVNmVYS1RrcCtoYXM4S01yRjN5SWo5R0drbFo3clNteENEWWVLMnZmY0FvT0RuWENuMjBBT2ZjMUdQZW5nSmJhL1ZUN3JiTmRUek4vZTYrTG15WHhmQThmbEVBN3VaUHF5WWtKKzVpTEFUYUdnTE09IGJvbGlhbkB1YnVudHUK
|
||||
- sshpiper.private_key=LS0tLS1CRUdJTiBPUEVOU1NIIFBSSVZBVEUgS0VZLS0tLS0KYjNCbGJuTnphQzFyWlhrdGRqRUFBQUFBQkc1dmJtVUFBQUFFYm05dVpRQUFBQUFBQUFBQkFBQUJsd0FBQUFkemMyZ3RjbgpOaEFBQUFBd0VBQVFBQUFZRUExYzZJYW5VVTdrK3ZrcjJuSEVYUFhwb3I2ZStBc2xhenRXM29scXhqcnRJRnN1bktIQXBLCkhSVUYydEtvdWIzR0R1VTErTlBqNzRNREpUV0wwTUMyNTdiNTFNUnlOaCsxTXBnU2tDdG84dWhZN2ZvUVJMeFFVV3dvaTkKTnZXRVlpUk4zM3hqR05vTE9LNUwrWmMxNmpDWm9OaDZwOEFKN09hQ1ZsZFU2UlZkaFFhUERScndEbDNGR3R6YnBQNXdpcgpWYnE1MnFleHFHUTl2d2dJU2Nic1cxdnUyTm5CckxmT3hGK0JMSlBLZkVCZmdZdVVaUS9RTE5ybTVYT1d5REtWd09LNjBDCm5PWUVhdzdhaDZJMzFxclhhMEtrSllOYVFUaXg4bnU1VWtYSDhZUnU2bU84YzcySjVGc2R0eWp0clMyK1ZncnFSdmxlMEUKU1JhTEdNTHJRUUtxYVRLVFV1dEZuNVJQcHNwbEZYL3FiUzU5NkVReFJHcGFOWkNaTXBuZXJzcWZnVDJZS3hrazdmZzh4MAp5TUtDZlVhTU1BVlUxTnJDczlkMW9UL3VreW4vTmlJY296cktYaW8yem95MUNDUDdTK091Ty8rMS9WV2pyN3llVUxlYkR3CkhYTUpPNTBqMzVDUksvMVBRb1oxRFNoSitoOVhqWnR1bldhWk80WWxBQUFGaU9PZ2RDRGpvSFFnQUFBQUIzTnphQzF5YzIKRUFBQUdCQU5YT2lHcDFGTzVQcjVLOXB4eEZ6MTZhSytudmdMSldzN1Z0Nkphc1k2N1NCYkxweWh3S1NoMFZCZHJTcUxtOQp4ZzdsTmZqVDQrK0RBeVUxaTlEQXR1ZTIrZFRFY2pZZnRUS1lFcEFyYVBMb1dPMzZFRVM4VUZGc0tJdlRiMWhHSWtUZDk4Cll4amFDeml1Uy9tWE5lb3dtYURZZXFmQUNlem1nbFpYVk9rVlhZVUdqdzBhOEE1ZHhScmMyNlQrY0lxMVc2dWRxbnNhaGsKUGI4SUNFbkc3RnRiN3RqWndheTN6c1JmZ1N5VHlueEFYNEdMbEdVUDBDemE1dVZ6bHNneWxjRGl1dEFwem1CR3NPMm9laQpOOWFxMTJ0Q3BDV0RXa0U0c2ZKN3VWSkZ4L0dFYnVwanZITzlpZVJiSGJjbzdhMHR2bFlLNmtiNVh0QkVrV2l4akM2MEVDCnFta3lrMUxyUlorVVQ2YktaUlYvNm0wdWZlaEVNVVJxV2pXUW1US1ozcTdLbjRFOW1Dc1pKTzM0UE1kTWpDZ24xR2pEQUYKVk5UYXdyUFhkYUUvN3BNcC96WWlIS002eWw0cU5zNk10UWdqKzB2anJqdi90ZjFWbzYrOG5sQzNtdzhCMXpDVHVkSTkrUQprU3Y5VDBLR2RRMG9TZm9mVjQyYmJwMW1tVHVHSlFBQUFBTUJBQUVBQUFHQUZmK05DNThHUzBySm5zaUNwQ2NPb2dZczFJCkgrOU5wMDNRcjA3bVBJVWRsc0dxOXhTeGRIN3R3VjRTRGhtVkxNU1FZT1dvNjZtZzhaeUw5TXBtcmRwdE90dXRXSGhzZ1cKWmFFOTc3VjNzOTV5SC9JbHNGekx5c1RkR3gzakMrc1RaWkNOQ01oYWNSbG9CZ2NzcTdFbUJ6dmhmbjd0Q1VkTnAydUpsOQp0QW10dUowbkpNc0x2ZjZwNUF5clVMdVpLcnhrTlRFZ3RFL1RWcklQZWJtck9yNSs1NmtiYzk5UjVvV000V3hWWmpkQXRQCmlFMnJOQWEvZlkzOFNjbHR6eVZkRU5YZlhiYlBiR3hMenFWUjFoTWwyeDdkOXBGTE1IRDJxRmNhalpiOWx0SzJnOXkxTmcKRWdOU3F3cE5UK2VYWTIxRnBFc0tXbzVWM0xTeG1ENUdsQkdPc2hLZFVOdDRqRFdjR2xVekNJUWduaU5RME5JQ3pIZTBOWQpqWk1TK3lyb1VOV0tNYVJob1d5aVJVcWJENGpXUHVMbGdYbjhNVnJ6MXluK1Y3TkN2SVpYNG5KZWIreXhpUndFRVFTT1hBCmQzcE4yRk1yVEpVeXRVanQ1dU9lOUtEQlA5Q3Myc0ZJcG5tM2dmUFNVSlNEc2tWdHRXZ1ZHVFNPRFRsYVRqR241aEFBQUEKd0VwS3VFWE5aeDIyclkwWmJLZW5KQ3F0Z1dyYUtBUEVjVDA3azJKeXl4ck5zazhFSlJKNjBCL1pja2ZDTS95UTErcVVTSgpBbnhvS0NXWjdyaEdWcE1KbEVKN3ZGcWExbFBDb1Nld3VGM0FRRjgzVDQybVhQTC9nTlVqekxvVTdCR3ZMZ2VxNzU0azFGCnJwK28yb0tzd2N5ZHMwZnlyTFdCdFlsZmFyUVVINmYwTzBiUUZWUlFjMkRjTyt5Y243UFVVSDAzcHEwZ094cXpQKzZOVEQKTjliMWNIMUE3eFlPL0ZDRDZuNnhEQ0hjSmVNRnFDb1hsbTRFWUpDUnY5Z0ZLYW9BQUFBTUVBL0lqdmw0VlpjNnFvYzh2Qwp4NlA3WGVUbzFyKzZEa1B3cXFoY25PRnBIMDJZeGVtM1Z3RDdCM1BieXZybmhVTkFyQ0VyMXh5eU05SlFLY1ZESnB0NEpzCmlsZVp1N1BLb09JdWw4MytHeGxSQ2daSHJwbDdQYld0TURRVmh5M3FQQTRjTERONmo2TDRRcm0xVUxjUm1PSU8xRzdtSHMKdStySnFPNURoZmI5MS80SlRIQWxJdWI5a0ZGM0hQMnlHZUEyRDBSWjRtVUd2RlYySUVMUXhWMXRnZ2xiOHIyNWdFSUhycwpOQmlnMXR3anFIcmlqWmMrQlVvMUNvRVhpWFk0bE5BQUFBd1FEWXZZOFpsSUdPenRKcVo4MkQrckh1QWx1eEZiNFh1bUJCClVwUWVybktLNVplME9kcWhrQ1VEN2QzQWk4RkZ4MlZ4STVMWTRqcDZWb01KaUY1MlRrVFE4ZXVKM3prYW1qL3UreDNxbzgKYjB5d0VIZWc0akFsSUoxSXYwNFArT1pPc3o5Y20zS2gwMk9uQXg2b1FpT29TTXYwMXFtdDlPMm5xRVU1V2N2VkEvUUZjTApYblJNeVpFOEg2MzJqMjZPU2hRM09vUk55aFZqeEJ2SzRpVUJXK3R3ek82YnFuVXlEaEtxaDIyVHVrSDErUkMzZ2RZcnFHCnNKYTE3RkF2ay94RGtBQUFBTlltOXNhV0Z1UUhWaWRXNTBkUUVDQXdRRkJnPT0KLS0tLS1FTkQgT1BFTlNTSCBQUklWQVRFIEtFWS0tLS0tCg==
|
||||
volumes:
|
||||
- shared:/shared
|
||||
- sshconfig_publickey:/config
|
||||
|
|
|
|||
|
|
@ -2,6 +2,9 @@ package e2e_test
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
|
|
@ -25,33 +28,121 @@ func TestDocker(t *testing.T) {
|
|||
|
||||
waitForEndpointReady(piperaddr)
|
||||
|
||||
randtext := uuid.New().String()
|
||||
targetfie := uuid.New().String()
|
||||
t.Run("password", func(t *testing.T) {
|
||||
randtext := uuid.New().String()
|
||||
targetfie := uuid.New().String()
|
||||
|
||||
c, stdin, stdout, err := runCmd(
|
||||
"ssh",
|
||||
"-v",
|
||||
"-o",
|
||||
"StrictHostKeyChecking=no",
|
||||
"-o",
|
||||
"UserKnownHostsFile=/dev/null",
|
||||
"-p",
|
||||
piperport,
|
||||
"-l",
|
||||
"pass",
|
||||
"127.0.0.1",
|
||||
fmt.Sprintf(`sh -c "echo -n %v > /shared/%v"`, randtext, targetfie),
|
||||
)
|
||||
c, stdin, stdout, err := runCmd(
|
||||
"ssh",
|
||||
"-v",
|
||||
"-o",
|
||||
"StrictHostKeyChecking=no",
|
||||
"-o",
|
||||
"UserKnownHostsFile=/dev/null",
|
||||
"-p",
|
||||
piperport,
|
||||
"-l",
|
||||
"pass",
|
||||
"127.0.0.1",
|
||||
fmt.Sprintf(`sh -c "echo -n %v > /shared/%v"`, randtext, targetfie),
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
t.Errorf("failed to ssh to piper-fixed, %v", err)
|
||||
}
|
||||
if err != nil {
|
||||
t.Errorf("failed to ssh to piper-fixed, %v", err)
|
||||
}
|
||||
|
||||
defer killCmd(c)
|
||||
defer killCmd(c)
|
||||
|
||||
enterPassword(stdin, stdout, "pass")
|
||||
enterPassword(stdin, stdout, "pass")
|
||||
|
||||
time.Sleep(time.Second) // wait for file flush
|
||||
time.Sleep(time.Second) // wait for file flush
|
||||
|
||||
checkSharedFileContent(t, targetfie, randtext)
|
||||
checkSharedFileContent(t, targetfie, randtext)
|
||||
})
|
||||
|
||||
t.Run("key", func(t *testing.T) {
|
||||
|
||||
keyfiledir, err := os.MkdirTemp("", "")
|
||||
if err != nil {
|
||||
t.Errorf("failed to create temp key file: %v", err)
|
||||
}
|
||||
|
||||
keyfile := path.Join(keyfiledir, "key")
|
||||
|
||||
if err := ioutil.WriteFile(keyfile, []byte(`-----BEGIN OPENSSH PRIVATE KEY-----
|
||||
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
|
||||
-----END OPENSSH PRIVATE KEY-----
|
||||
`), 0400); err != nil {
|
||||
t.Errorf("failed to write to test key: %v", err)
|
||||
}
|
||||
|
||||
if err := ioutil.WriteFile("/sshconfig_publickey/.ssh/authorized_keys", []byte(`ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDVzohqdRTuT6+SvaccRc9emivp74CyVrO1beiWrGOu0gWy6cocCkodFQXa0qi5vcYO5TX40+PvgwMlNYvQwLbntvnUxHI2H7UymBKQK2jy6Fjt+hBEvFBRbCiL029YRiJE3ffGMY2gs4rkv5lzXqMJmg2HqnwAns5oJWV1TpFV2FBo8NGvAOXcUa3Nuk/nCKtVurnap7GoZD2/CAhJxuxbW+7Y2cGst87EX4Esk8p8QF+Bi5RlD9As2ublc5bIMpXA4rrQKc5gRrDtqHojfWqtdrQqQlg1pBOLHye7lSRcfxhG7qY7xzvYnkWx23KO2tLb5WCupG+V7QRJFosYwutBAqppMpNS60WflE+mymUVf+ptLn3oRDFEalo1kJkymd6uyp+BPZgrGSTt+DzHTIwoJ9RowwBVTU2sKz13WhP+6TKf82IhyjOspeKjbOjLUII/tL4647/7X9VaOvvJ5Qt5sPAdcwk7nSPfkJEr/U9ChnUNKEn6H1eNm26dZpk7hiU=`), 0400); err != nil {
|
||||
t.Errorf("failed to write to authorized_keys: %v", err)
|
||||
}
|
||||
|
||||
randtext := uuid.New().String()
|
||||
targetfie := uuid.New().String()
|
||||
|
||||
c, _, _, err := runCmd(
|
||||
"ssh",
|
||||
"-v",
|
||||
"-o",
|
||||
"StrictHostKeyChecking=no",
|
||||
"-o",
|
||||
"UserKnownHostsFile=/dev/null",
|
||||
"-p",
|
||||
piperport,
|
||||
"-l",
|
||||
"anyuser",
|
||||
"-i",
|
||||
keyfile,
|
||||
"127.0.0.1",
|
||||
fmt.Sprintf(`sh -c "echo -n %v > /shared/%v"`, randtext, targetfie),
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
t.Errorf("failed to ssh to piper-fixed, %v", err)
|
||||
}
|
||||
|
||||
defer killCmd(c)
|
||||
|
||||
time.Sleep(time.Second) // wait for file flush
|
||||
|
||||
checkSharedFileContent(t, targetfie, randtext)
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,11 +6,9 @@ import (
|
|||
"encoding/base64"
|
||||
"fmt"
|
||||
"net"
|
||||
"time"
|
||||
|
||||
"github.com/docker/docker/api/types"
|
||||
"github.com/docker/docker/client"
|
||||
"github.com/patrickmn/go-cache"
|
||||
log "github.com/sirupsen/logrus"
|
||||
"github.com/tg123/sshpiper/libplugin"
|
||||
"golang.org/x/crypto/ssh"
|
||||
|
|
@ -26,7 +24,6 @@ type pipe struct {
|
|||
|
||||
type plugin struct {
|
||||
dockerCli *client.Client
|
||||
cache *cache.Cache
|
||||
}
|
||||
|
||||
func newDockerPlugin() (*plugin, error) {
|
||||
|
|
@ -36,7 +33,6 @@ func newDockerPlugin() (*plugin, error) {
|
|||
}
|
||||
return &plugin{
|
||||
dockerCli: cli,
|
||||
cache: cache.New(1*time.Minute, 10*time.Minute),
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue