Skip to content
This repository was archived by the owner on Jun 27, 2025. It is now read-only.

Commit 9e390f0

Browse files
authored
Merge pull request #29 from elguero/add-encrypted-private-key-support
Add support for encrypted private key
2 parents cd9ebd1 + ed68879 commit 9e390f0

File tree

4 files changed

+25
-2
lines changed

4 files changed

+25
-2
lines changed

cmd/srpmproc/main.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ var (
3535
sourceRpmGitName string
3636
sshKeyLocation string
3737
sshUser string
38+
sshAskKeyPassword bool
3839
upstreamPrefix string
3940
version int
4041
storageAddr string
@@ -80,6 +81,7 @@ func mn(_ *cobra.Command, _ []string) {
8081
RpmPrefix: rpmPrefix,
8182
SshKeyLocation: sshKeyLocation,
8283
SshUser: sshUser,
84+
SshKeyPassword: sshAskKeyPassword,
8385
ManualCommits: manualCommits,
8486
UpstreamPrefix: upstreamPrefix,
8587
GitCommitterName: gitCommitterName,
@@ -130,6 +132,7 @@ func main() {
130132
root.Flags().StringVar(&sourceRpmGitName, "source-rpm-git-name", "", "Actual git repo name of package if name is different from source-rpm value")
131133
root.Flags().StringVar(&sshKeyLocation, "ssh-key-location", "", "Location of the SSH key to use to authenticate against upstream")
132134
root.Flags().StringVar(&sshUser, "ssh-user", "git", "SSH User")
135+
root.Flags().BoolVar(&sshAskKeyPassword, "ssh-key-password", false, "If enabled, prompt for ssh key password")
133136
root.Flags().StringVar(&gitCommitterName, "git-committer-name", "rockyautomation", "Name of committer")
134137
root.Flags().StringVar(&gitCommitterEmail, "git-committer-email", "[email protected]", "Email of committer")
135138
root.Flags().StringVar(&modulePrefix, "module-prefix", "https://git.centos.org/modules", "Where to retrieve modules if exists. Only used when source-rpm is a git repo")

go.mod

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ require (
7272
golang.org/x/net v0.27.0 // indirect
7373
golang.org/x/oauth2 v0.21.0 // indirect
7474
golang.org/x/sync v0.7.0 // indirect
75-
golang.org/x/sys v0.22.0 // indirect
75+
golang.org/x/sys v0.27.0 // indirect
76+
golang.org/x/term v0.26.0
7677
golang.org/x/text v0.16.0 // indirect
7778
golang.org/x/time v0.5.0 // indirect
7879
golang.org/x/tools v0.23.0 // indirect

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -511,6 +511,8 @@ golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y=
511511
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
512512
golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI=
513513
golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
514+
golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s=
515+
golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
514516
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
515517
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
516518
golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
@@ -519,6 +521,8 @@ golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
519521
golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw=
520522
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
521523
golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk=
524+
golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU=
525+
golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E=
522526
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
523527
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
524528
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=

pkg/srpmproc/process.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"os/user"
3232
"path/filepath"
3333
"strings"
34+
"syscall"
3435
"time"
3536

3637
"github.com/go-git/go-billy/v5"
@@ -55,6 +56,7 @@ import (
5556
"github.com/go-git/go-git/v5/plumbing/object"
5657
"github.com/go-git/go-git/v5/storage/memory"
5758
"github.com/rocky-linux/srpmproc/pkg/data"
59+
"golang.org/x/term"
5860
)
5961

6062
const (
@@ -79,6 +81,7 @@ type ProcessDataRequest struct {
7981
RpmPrefix string
8082
SshKeyLocation string
8183
SshUser string
84+
SshKeyPassword bool
8285
HttpUsername string
8386
HttpPassword string
8487
ManualCommits string
@@ -267,8 +270,20 @@ func NewProcessData(req *ProcessDataRequest) (*data.ProcessData, error) {
267270
Password: req.HttpPassword,
268271
}
269272
} else {
273+
var sshPassword string = ""
274+
if req.SshKeyPassword {
275+
276+
fmt.Print("Enter SSH key password: ")
277+
sshBytePassword, err := term.ReadPassword(int(syscall.Stdin))
278+
if err != nil {
279+
return nil, fmt.Errorf("could not read password for ssh key: %v", err)
280+
}
281+
282+
sshPassword = string(sshBytePassword)
283+
}
284+
270285
// create ssh key authenticator
271-
authenticator, err = ssh.NewPublicKeysFromFile(req.SshUser, lastKeyLocation, "")
286+
authenticator, err = ssh.NewPublicKeysFromFile(req.SshUser, lastKeyLocation, sshPassword)
272287
}
273288
if err != nil {
274289
return nil, fmt.Errorf("could not get git authenticator: %v", err)

0 commit comments

Comments
 (0)