diff --git a/pkg/machine/e2e/proxy_test.go b/pkg/machine/e2e/proxy_test.go
index d539e95fb9..951d8b0059 100644
--- a/pkg/machine/e2e/proxy_test.go
+++ b/pkg/machine/e2e/proxy_test.go
@@ -76,10 +76,12 @@ var _ = Describe("podman machine proxy settings propagation", func() {
 		Expect(stopSession).To(Exit(0))
 
 		// Now update proxy env, lets use some special vars to make sure our scripts can handle it
-		proxy1 := "http:// some special @;\" here"
-		proxy2 := "https://abc :£$%6 : |\"\""
+		proxy1 := "http://foo:b%%40r@example.com:8080"
+		proxy2 := "https://foo:bar%%3F@example.com:8080"
+		noproxy := "noproxy1.example.com,noproxy2.example.com"
 		os.Setenv("HTTP_PROXY", proxy1)
 		os.Setenv("HTTPS_PROXY", proxy2)
+		os.Setenv("NO_PROXY", noproxy)
 
 		// changing SSL_CERT vars should not have an effect
 		os.Setenv("SSL_CERT_FILE", "/tmp/1")
@@ -90,10 +92,10 @@ var _ = Describe("podman machine proxy settings propagation", func() {
 		Expect(err).ToNot(HaveOccurred())
 		Expect(startSession).To(Exit(0))
 
-		sshSession, err = mb.setName(name).setCmd(sshProxy.withSSHCommand([]string{"printenv", "HTTP_PROXY", "HTTPS_PROXY"})).run()
+		sshSession, err = mb.setName(name).setCmd(sshProxy.withSSHCommand([]string{"printenv", "HTTP_PROXY", "HTTPS_PROXY", "NO_PROXY"})).run()
 		Expect(err).ToNot(HaveOccurred())
 		Expect(sshSession).To(Exit(0))
-		Expect(string(sshSession.Out.Contents())).To(Equal(proxy1 + "\n" + proxy2 + "\n"))
+		Expect(string(sshSession.Out.Contents())).To(Equal(proxy1 + "\n" + proxy2 + "\n" + noproxy + "\n"))
 
 		// SSL_CERT not implemented for WSL
 		if !isVmtype(define.WSLVirt) {
diff --git a/pkg/machine/proxyenv/env.go b/pkg/machine/proxyenv/env.go
index 1b358ad72a..8fd68ea872 100644
--- a/pkg/machine/proxyenv/env.go
+++ b/pkg/machine/proxyenv/env.go
@@ -24,7 +24,7 @@ rm -f $SYSTEMD_CONF $ENVD_CONF $PROFILE_CONF
 
 echo "[Manager]" >> $SYSTEMD_CONF
 for proxy in %s; do
-	printf "DefaultEnvironment=%%q\n" "$proxy"  >> $SYSTEMD_CONF
+	printf "DefaultEnvironment=\"%%s\"\n" "$proxy"  >> $SYSTEMD_CONF
 	printf "%%q\n" "$proxy"  >> $ENVD_CONF
 	printf "export %%q\n" "$proxy" >> $PROFILE_CONF
 done
diff --git a/pkg/machine/proxyenv/env_test.go b/pkg/machine/proxyenv/env_test.go
new file mode 100644
index 0000000000..f859fa537b
--- /dev/null
+++ b/pkg/machine/proxyenv/env_test.go
@@ -0,0 +1,76 @@
+package proxyenv
+
+import (
+	"bytes"
+	"testing"
+
+	"github.com/stretchr/testify/assert"
+)
+
+func Test_getProxyScript(t *testing.T) {
+	type env struct {
+		name  string
+		value string
+	}
+	type args struct {
+		isWSL bool
+		envs  []env
+	}
+	tests := []struct {
+		name string
+		args args
+		want string
+	}{
+		{
+			name: "all vars set",
+			args: args{
+				isWSL: false,
+				envs: []env{
+					{
+						name:  "http_proxy",
+						value: "proxy1",
+					},
+					{
+						name:  "https_proxy",
+						value: "sproxy1",
+					},
+					{
+						name:  "no_proxy",
+						value: "no1,no2",
+					},
+				},
+			},
+			want: `#!/bin/bash
+
+SYSTEMD_CONF=/etc/systemd/system.conf.d/default-env.conf
+ENVD_CONF=/etc/environment.d/default-env.conf
+PROFILE_CONF=/etc/profile.d/default-env.sh
+
+mkdir -p /etc/profile.d /etc/environment.d /etc/systemd/system.conf.d/
+rm -f $SYSTEMD_CONF $ENVD_CONF $PROFILE_CONF
+
+echo "[Manager]" >> $SYSTEMD_CONF
+for proxy in "http_proxy=proxy1" "https_proxy=sproxy1" "no_proxy=no1,no2"; do
+	printf "DefaultEnvironment=\"%s\"\n" "$proxy"  >> $SYSTEMD_CONF
+	printf "%q\n" "$proxy"  >> $ENVD_CONF
+	printf "export %q\n" "$proxy" >> $PROFILE_CONF
+done
+
+systemctl daemon-reload
+`,
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			for _, e := range tt.args.envs {
+				t.Setenv(e.name, e.value)
+			}
+			got := getProxyScript(tt.args.isWSL)
+			buf := new(bytes.Buffer)
+			_, err := buf.ReadFrom(got)
+			assert.NoError(t, err)
+			str := buf.String()
+			assert.Equal(t, tt.want, str)
+		})
+	}
+}