diff --git a/core/installer/bootstrapper.go b/core/installer/bootstrapper.go
index 957f1ab..7e3cb8a 100644
--- a/core/installer/bootstrapper.go
+++ b/core/installer/bootstrapper.go
@@ -32,8 +32,7 @@
 }
 
 func (b Bootstrapper) Run(env EnvConfig) error {
-	bootstrapJobKeys, err := NewSSHKeyPair()
-	if err != nil {
+	if err := b.ns.Create(env.Name); err != nil {
 		return err
 	}
 	if err := b.installMetallb(env); err != nil {
@@ -43,13 +42,17 @@
 		return err
 	}
 	time.Sleep(1 * time.Minute) // TODO(giolekva): implement proper wait
-	if err := b.installSoftServe(bootstrapJobKeys.Public, env.Name, env.ServiceIPs.ConfigRepo); err != nil {
+	bootstrapJobKeys, err := NewSSHKeyPair("bootstrapper")
+	if err != nil {
+		return err
+	}
+	if err := b.installSoftServe(bootstrapJobKeys.AuthorizedKey(), env.Name, env.ServiceIPs.ConfigRepo); err != nil {
 		return err
 	}
 	var ss *soft.Client
 	err = backoff.Retry(func() error {
 		var err error
-		ss, err = soft.NewClient(netip.AddrPortFrom(env.ServiceIPs.ConfigRepo, 22), []byte(bootstrapJobKeys.Private), log.Default())
+		ss, err = soft.NewClient(netip.AddrPortFrom(env.ServiceIPs.ConfigRepo, 22), bootstrapJobKeys.RawPrivateKey(), log.Default())
 		return err
 	}, backoff.NewConstantBackOff(5*time.Second))
 	if err != nil {
@@ -76,7 +79,7 @@
 	if err := b.installEnvManager(ss, repoIO, nsGen, b.ns, env); err != nil {
 		return err
 	}
-	if ss.RemovePublicKey("admin", bootstrapJobKeys.Public); err != nil {
+	if ss.RemovePublicKey("admin", bootstrapJobKeys.AuthorizedKey()); err != nil {
 		return err
 	}
 	return nil
@@ -242,7 +245,7 @@
 
 func (b Bootstrapper) installSoftServe(adminPublicKey string, envName string, repoIP netip.Addr) error {
 	fmt.Println("Installing SoftServe")
-	keys, err := NewSSHKeyPair()
+	keys, err := NewSSHKeyPair("soft-serve")
 	if err != nil {
 		return err
 	}
@@ -260,8 +263,8 @@
 			"tag":        "v0.5.4",
 			"pullPolicy": "IfNotPresent",
 		},
-		"privateKey": keys.Private,
-		"publicKey":  keys.Public,
+		"privateKey": string(keys.RawPrivateKey()),
+		"publicKey":  string(keys.RawAuthorizedKey()),
 		"adminKey":   adminPublicKey,
 		"reservedIP": repoIP.String(),
 	}
@@ -279,11 +282,11 @@
 }
 
 func (b Bootstrapper) installFluxcd(ss *soft.Client, envName string) error {
-	keys, err := NewSSHKeyPair()
+	keys, err := NewSSHKeyPair("fluxcd")
 	if err != nil {
 		return err
 	}
-	if err := ss.AddUser("flux", keys.Public); err != nil {
+	if err := ss.AddUser("flux", keys.AuthorizedKey()); err != nil {
 		return err
 	}
 	if err := ss.MakeUserAdmin("flux"); err != nil {
@@ -302,7 +305,7 @@
 		ss.GetRepoAddress(envName),
 		ss.Addr.Addr().String(),
 		string(ssPublic),
-		keys.Private,
+		string(keys.RawPrivateKey()),
 		envName,
 	); err != nil {
 		return err
@@ -443,12 +446,12 @@
 }
 
 func (b Bootstrapper) installEnvManager(ss *soft.Client, repo RepoIO, nsGen NamespaceGenerator, nsCreator NamespaceCreator, env EnvConfig) error {
-	keys, err := NewSSHKeyPair()
+	keys, err := NewSSHKeyPair("env-manager")
 	if err != nil {
 		return err
 	}
 	user := fmt.Sprintf("%s-env-manager", env.Name)
-	if err := ss.AddUser(user, keys.Public); err != nil {
+	if err := ss.AddUser(user, keys.AuthorizedKey()); err != nil {
 		return err
 	}
 	if err := ss.MakeUserAdmin(user); err != nil {
@@ -479,7 +482,7 @@
 			"RepoIP":        env.ServiceIPs.ConfigRepo,
 			"RepoPort":      22,
 			"RepoName":      env.Name,
-			"SSHPrivateKey": keys.Private,
+			"SSHPrivateKey": string(keys.RawPrivateKey()),
 		},
 	}
 	if len(namespaces) > 0 {
