fix mysql drvier and add test case

This commit is contained in:
Boshi Lian 2019-01-15 15:19:04 +00:00
parent 32efae24d6
commit 7a3512f282
6 changed files with 66 additions and 16 deletions

View file

@ -68,7 +68,7 @@ steps:
- task: DockerCompose@0
inputs:
dockerComposeFile: '$(modulePath)/sshpiperd/e2e/docker-compose.yml'
dockerComposeCommand: 'up --build --abort-on-container-exit --exit-code-from client'
dockerComposeCommand: 'up --build --abort-on-container-exit'
currentWorkingDirectory: '$(modulePath)'
displayName: E2E

View file

@ -11,9 +11,22 @@ services:
- ./test.sh:/test.sh
links:
- "piper:piper"
- "piper_mysql:piper_mysql"
command:
- "/bin/bash"
- "/test.sh"
depends_on:
- piper
- piper_mysql
host1:
image: rastasheep/ubuntu-sshd
volumes:
- host1ssh:/root/.ssh
- names:/names
host2:
image: rastasheep/ubuntu-sshd
volumes:
- names:/names
piper:
environment:
- "SSHPIPERD_UPSTREAM_WORKINGDIR_NOCHECKPERM=true"
@ -29,15 +42,38 @@ services:
command:
- "/bin/sh"
- "/piper.sh"
host1:
image: rastasheep/ubuntu-sshd
depends_on:
- host1
- host2
piper_mysql:
environment:
- "SSHPIPERD_UPSTREAM_DRIVER=mysql"
- "SSHPIPERD_UPSTREAM_MYSQL_HOST=mysql"
- "SSHPIPERD_AUDITOR=typescript-logger"
- "SSHPIPERD_BANNERTEXT=hellopiper"
build: ../..
links:
- "host1:host1"
- "host2:host2"
- "mysql:mysql"
volumes:
- host1ssh:/root/.ssh
- names:/names
host2:
image: rastasheep/ubuntu-sshd
volumes:
- names:/names
- ./piper.sh:/piper.sh
- workingdir:/var/sshpiper
command:
- "/bin/sh"
- "/piper.sh"
depends_on:
- mysql
- host1
- host2
mysql:
image: mysql
environment:
- "MYSQL_ALLOW_EMPTY_PASSWORD=true"
- "MYSQL_DATABASE=sshpiper"
tmpfs:
- /var/lib/mysql
volumes:
workingdir:

View file

@ -1,5 +1,9 @@
#!/bin/sh
echo 1
sleep 10 # TODO remove ulgy workaround
echo 2
/sshpiperd pipe add -n host1 -u host1 --upstream-username root
/sshpiperd pipe add -n host2 -u host2 --upstream-username root
/sshpiperd pipe list

View file

@ -2,6 +2,8 @@
# TODO to python
sleep 12 # TODO remove ulgy workaround
mkdir -p /local
mkdir -p /workingdir/host{1,2}
@ -48,3 +50,5 @@ runtest(){
runtest "host1 with public key:" "host1" "ssh host1@piper -p 2222 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i /local/id_rsa cat /names/host1"
runtest "host2 with password:" "host2" "sshpass -p root ssh host2@piper -p 2222 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null cat /names/host2"
runtest "mysql host2 with password:" "host2" "sshpass -p root ssh host2@piper_mysql -p 2222 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null cat /names/host2"

View file

@ -18,8 +18,13 @@ func (p *plugin) findUpstream(conn ssh.ConnMetadata, challengeContext ssh.Additi
}
addr := d.Upstream.Server.Address
upuser := d.Upstream.Username
logger.Printf("mapping user [%v] to [%v@%v]", user, d.Username, addr)
if upuser == "" {
upuser = d.Username
}
logger.Printf("mapping user [%v] to [%v@%v]", user, upuser, addr)
c, err := dial(addr)
@ -40,7 +45,7 @@ func (p *plugin) findUpstream(conn ssh.ConnMetadata, challengeContext ssh.Additi
}
pipe := ssh.AuthPipe{
User: d.Upstream.Username,
User: upuser,
PublicKeyCallback: func(conn ssh.ConnMetadata, key ssh.PublicKey) (ssh.AuthPipeType, ssh.AuthMethod, error) {

View file

@ -25,11 +25,12 @@ type mysqlplugin struct {
func (p *mysqlplugin) create() (*gorm.DB, error) {
config := mysqldriver.Config{
User: p.Config.User,
Passwd: p.Config.Password,
Net: "tcp",
Addr: fmt.Sprintf("%v:%v", p.Config.Host, p.Config.Port),
DBName: p.Config.Dbname,
User: p.Config.User,
Passwd: p.Config.Password,
Net: "tcp",
Addr: fmt.Sprintf("%v:%v", p.Config.Host, p.Config.Port),
DBName: p.Config.Dbname,
ParseTime: true,
}
db, err := gorm.Open("mysql", config.FormatDSN())