Skip to content

Commit 7159f96

Browse files
authored
Merge pull request #11 from isometry/feature/default-user-to-role
feat: default Vault role to ssh username
2 parents b95b9e8 + 50be6c0 commit 7159f96

File tree

2 files changed

+21
-8
lines changed

2 files changed

+21
-8
lines changed

main.go

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,15 +70,20 @@ func processCommand() int {
7070
log.Fatal(err)
7171
}
7272

73-
userOverridden := overrideUser(&vaultClient, &sshClient)
74-
if userOverridden {
75-
log.Info("remote user overridden by vault role")
76-
}
77-
7873
if err := sshClient.ParseConfig(); err != nil {
7974
log.Fatal("failed to parse ssh configuration: ", err)
8075
}
8176

77+
roleDefaulted := defaultRoleToUser(&vaultClient, &sshClient)
78+
if roleDefaulted {
79+
log.Infof("defaulted vault role to ssh username: %s", sshClient.User)
80+
}
81+
82+
userOverridden := overrideUser(&vaultClient, &sshClient)
83+
if userOverridden {
84+
log.Infof("ssh username overridden by vault role: %s", sshClient.User)
85+
}
86+
8287
// if we have already have a Control Connection, use it
8388
controlConnection := sshClient.ControlConnection()
8489

@@ -136,14 +141,22 @@ func setupExitHandler(fn string) {
136141
}()
137142
}
138143

144+
func defaultRoleToUser(vaultClient *signer.Client, sshClient *openssh.Client) bool {
145+
// if role hasn't been set already, default to resolved SSH username
146+
if vaultClient.Options.Role == "" {
147+
vaultClient.Options.Role = sshClient.User
148+
return true
149+
}
150+
return false
151+
}
152+
139153
func overrideUser(vaultClient *signer.Client, sshClient *openssh.Client) bool {
140154
// if the role only allows a single, fixed user, use it
141-
if user := vaultClient.GetAllowedUser(); user != "" {
155+
if user := vaultClient.GetAllowedUser(); user != "" && sshClient.User != user {
142156
sshClient.User = user
143157
sshClient.PrependArgs([]string{"-l", user})
144158
return true
145159
}
146-
147160
return false
148161
}
149162

signer/vault.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ type Client struct {
2525
// Options define signer-specific flags
2626
type Options struct {
2727
Path string `long:"path" default:"ssh" env:"VAULT_SSH_PATH" description:"Vault SSH Path"`
28-
Role string `long:"role" default:"default" env:"VAULT_SSH_ROLE" description:"Vault SSH Role"`
28+
Role string `long:"role" env:"VAULT_SSH_ROLE" description:"Vault SSH Role (default: <ssh-username>)"`
2929
TTL uint `long:"ttl" default:"300" env:"VAULT_SSH_TTL" description:"Vault SSH Certificate TTL"`
3030
PublicKey string `short:"P" long:"public-key" default:"~/.ssh/id_rsa.pub" env:"VAULT_SSH_PUBLIC_KEY" description:"OpenSSH Public RSA Key to sign"`
3131
Extensions Extensions `group:"Certificate Extensions"`

0 commit comments

Comments
 (0)