@@ -14,6 +14,7 @@ import (
1414 "syscall"
1515
1616 "github.com/NHAS/reverse_ssh/internal/client"
17+ "github.com/NHAS/reverse_ssh/internal/client/keys"
1718 "github.com/NHAS/reverse_ssh/internal/terminal"
1819 "github.com/NHAS/reverse_ssh/pkg/logger"
1920)
@@ -64,6 +65,8 @@ func printHelp() {
6465 fmt .Println ("\t \t --sni\t When using TLS set the clients requested SNI to this value" )
6566 fmt .Println ("\t \t --log-level\t Change logging output levels, [INFO,WARNING,ERROR,FATAL,DISABLED]" )
6667 fmt .Println ("\t \t --version-string\t SSH version string to use, i.e SSH-VERSION, defaults to internal.Version-runtime.GOOS_runtime.GOARCH" )
68+ fmt .Println ("\t \t --private-key-path\t Optional path to unencrypted SSH key to use for connecting" )
69+
6770 if runtime .GOOS == "windows" {
6871 fmt .Println ("\t \t --host-kerberos\t Use kerberos authentication on proxy server (if proxy server specified)" )
6972 }
@@ -146,6 +149,25 @@ func main() {
146149 }
147150 }
148151
152+ privateKeyPath , err := line .GetArgString ("private-key-path" )
153+ if err == nil {
154+ keyBytes , err := os .ReadFile (privateKeyPath )
155+ if err != nil {
156+ log .Fatalf ("private key path was specified %q, but could not read: %s" , privateKeyPath , err )
157+ }
158+
159+ if err = keys .SetPrivateKey (string (keyBytes )); err != nil {
160+ log .Fatalf ("invalid private key %q: %s" , privateKeyPath , err )
161+ }
162+
163+ authKeyLine , err := keys .AuthorisedKeysLine ()
164+ if err != nil {
165+ log .Fatalf ("failed to generate authorised key line from private key %q, %s" , privateKeyPath , err )
166+ }
167+
168+ log .Printf ("authorized_controllee_key line: %q" , strings .TrimSpace (authKeyLine ))
169+ }
170+
149171 userSpecifiedSNI , err := line .GetArgString ("sni" )
150172 if err == nil {
151173 settings .SNI = userSpecifiedSNI
0 commit comments