Log to custom file and listen custom port
This commit is contained in:
parent
fd6c0022d0
commit
2a46230b38
2
go.mod
2
go.mod
|
@ -4,4 +4,4 @@ go 1.21.5
|
||||||
|
|
||||||
require golang.org/x/crypto v0.17.0
|
require golang.org/x/crypto v0.17.0
|
||||||
|
|
||||||
require golang.org/x/sys v0.15.0
|
require golang.org/x/sys v0.15.0 // indirect
|
||||||
|
|
28
main.go
28
main.go
|
@ -8,15 +8,29 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"net"
|
"net"
|
||||||
"strconv"
|
"os"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"golang.org/x/crypto/ssh"
|
"golang.org/x/crypto/ssh"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
path := os.Getenv("PATH")
|
||||||
|
if path == "" {
|
||||||
|
path = "./ssh-honeypot.log"
|
||||||
|
}
|
||||||
|
|
||||||
port := 22
|
logFile, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Unable to open log file: %v", err)
|
||||||
|
}
|
||||||
|
defer logFile.Close()
|
||||||
|
log.SetOutput(logFile)
|
||||||
|
|
||||||
|
port := os.Getenv("PORT")
|
||||||
|
if port == "" {
|
||||||
|
port = "22"
|
||||||
|
}
|
||||||
|
|
||||||
key, err := generateKeyPair()
|
key, err := generateKeyPair()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -36,12 +50,11 @@ func main() {
|
||||||
|
|
||||||
config.AddHostKey(key)
|
config.AddHostKey(key)
|
||||||
|
|
||||||
// Listen on port 22
|
listener, err := net.Listen("tcp", "0.0.0.0:"+port)
|
||||||
listener, err := net.Listen("tcp", "0.0.0.0:"+strconv.Itoa(port))
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Failed to listen on port %d: %v", port, err)
|
log.Fatalf("Failed to listen on port %s: %v", port, err)
|
||||||
}
|
}
|
||||||
log.Printf("Listening on port %d...", port)
|
log.Printf("Listening on port %s...", port)
|
||||||
|
|
||||||
for {
|
for {
|
||||||
conn, err := listener.Accept()
|
conn, err := listener.Accept()
|
||||||
|
@ -55,19 +68,16 @@ func main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateKeyPair() (ssh.Signer, error) {
|
func generateKeyPair() (ssh.Signer, error) {
|
||||||
// Generate a new RSA private key
|
|
||||||
privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
|
privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Encode the private key to PEM format
|
|
||||||
privateKeyPEM := pem.EncodeToMemory(&pem.Block{
|
privateKeyPEM := pem.EncodeToMemory(&pem.Block{
|
||||||
Type: "RSA PRIVATE KEY",
|
Type: "RSA PRIVATE KEY",
|
||||||
Bytes: x509.MarshalPKCS1PrivateKey(privateKey),
|
Bytes: x509.MarshalPKCS1PrivateKey(privateKey),
|
||||||
})
|
})
|
||||||
|
|
||||||
// Parse the PEM encoded private key to get an ssh.Signer
|
|
||||||
signer, err := ssh.ParsePrivateKey(privateKeyPEM)
|
signer, err := ssh.ParsePrivateKey(privateKeyPEM)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
Loading…
Reference in New Issue