diff --git a/Program.fs b/Program.fs
index d39ac49d0948f9121f6a6f87fd2a5945aac97017..c0f56ad369bd1dcd67151e94cd7407a85b1f3f8a 100644
--- a/Program.fs
+++ b/Program.fs
@@ -173,6 +173,7 @@ exception PrivateKeyNotFoundException of string
 let addOptionsForRemoteBackup (results: ParseResults<CLIArguments>) (logger: Logger) (rsyncCmd: string list) =
     let sshExeFile = mbackupProgramDir + "rsync-w64/usr/bin/ssh.exe"
     let sshConfigFile = userHome + ".ssh/config"
+    let sshKnownHostsFile = userHome + ".ssh/known_hosts"
     let sshPrivateKeyFile = results.GetResult(Ssh_Key, defaultValue = userHome + ".ssh/id_rsa") |> toMingwPath
     let sshPrivateKeyFileWin = toWinPath sshPrivateKeyFile
     if not (File.Exists(sshPrivateKeyFileWin)) then
@@ -184,8 +185,8 @@ let addOptionsForRemoteBackup (results: ParseResults<CLIArguments>) (logger: Log
 
         let rsyncCmd =
             List.append rsyncCmd
-                [ sprintf "-e \"'%s'%s -i %s -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null\"" sshExeFile
-                      sshConfigFileOption sshPrivateKeyFile ]
+                [ sprintf "-e \"'%s'%s -i %s -o StrictHostKeyChecking=ask -o UserKnownHostsFile=%s\""
+                          sshExeFile sshConfigFileOption sshPrivateKeyFile sshKnownHostsFile]
 
         let nodeName = results.GetResult(Node_Name, defaultValue = Net.Dns.GetHostName())
         let remoteLogFile = sprintf "/var/log/mbackup/%s.log" nodeName
diff --git a/mbackup.fsproj b/mbackup.fsproj
index fd3fc6f3788bcf702a2b578b99b836bc8ff8abc7..aa04cec69ad1ddb7b93946b2d260ff43e6627584 100644
--- a/mbackup.fsproj
+++ b/mbackup.fsproj
@@ -6,7 +6,7 @@
     <RuntimeIdentifiers>win10-x64</RuntimeIdentifiers>
     <RootNamespace>Mbackup</RootNamespace>
     <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
-    <Version>0.2.3.0</Version>
+    <Version>0.2.4.0</Version>
   </PropertyGroup>
 
   <ItemGroup>
diff --git a/operational b/operational
index 702cfdc75c6330e64f7d6d326e2346d44561eb9c..b1ca44bb447d039e32502df38e2ed8fd03fa6fcc 100644
--- a/operational
+++ b/operational
@@ -143,6 +143,22 @@ C:\ProgramData\mbackup\mbackup.txt
 ** 2019-11-14 vscode f# doesn't support open a module
 it can only support open a namespace.
 using the vscode Ionide-fsharp extension.
+** 2019-11-16 ssh.exe Could not create directory '/home/IEUser/.ssh' error.
+when rsync.exe or ssh.exe is run from cmd.exe, it will always show this error.
+HOME env var is defined properly.
+
+- create /etc/nsswitch.conf with the following content didn't fix it.
+  db_home: windows
+
+- openssh get user's home dir from getpwuid call.
+  Check how ssh get home dir. maybe from /etc/passwd and similar syscall.
+  check ssh-keygen source code.
+  https://github.com/openssh/openssh-portable/blob/master/ssh-keygen.c
+  pw = getpwuid(getuid());
+  https://manpages.ubuntu.com/manpages/bionic/en/man3/getpwuid.3.html
+  indeed it read config for passwd entry.
+  how to bundle passwd file in mingw application?
+
 * current                                                             :entry:
 ** 
 ** 2019-11-15 f# indent is difficult in vscode.
@@ -178,6 +194,9 @@ yes. I should support this.
 
 Both local.list and local.exclude.
 
+** 2019-11-16 support reading remote-user=xxx option from config file.
+cli arg > env var > config file.
+same with target option.
 ** 2019-11-14 learn how to create an msi installer.
 - WiX Toolset
   https://wixtoolset.org/
@@ -223,7 +242,7 @@ Both local.list and local.exclude.
     maybe show a installer window and let user click Next and Finish.
   - TODO how to add some dir to PATH?
     I only have one exe. Maybe just create a start menu or desktop shortcut?
-    create desktop shortcut to mbackup.exe
+    DONE create desktop shortcut to mbackup.exe
     installer - Create shortcut to desktop using WiX - Stack Overflow
     https://stackoverflow.com/questions/11868499/create-shortcut-to-desktop-using-wix
     it works.
@@ -321,7 +340,74 @@ Both local.list and local.exclude.
         // set HOME dir on system level works on B75I3. maybe when rsync invoke ssh, env variable is lost.
         // if system level env variable is required, set HOME when msi is installed if HOME is not set.
 
-        *now*
+        in admin powershell,
+        setx HOME ^%USERPROFILE^%
+        // try mbackup to remote node, nope.
+        setx HOME $env:userprofile
+        // try mbackup to remote node, nope.
+
+        how to make HOME work in the Win 10 GUEST?
+        TODO Maybe I need to create the rsync zip file using a Dockerfile. LATER.
+        And include bash or getenv tool for debugging. Does my rsync tool include bash? yes.
+
+        on B75I3,
+        .\bash.exe
+        echo $HOME
+        /cygdrive/c/Users/sylecn
+
+        on Win10 Guest,
+        .\bash.exe
+        bash.exe: warning: could not find /tmp, please create!
+        echo $HOME
+        /cygdrive/c/Users/IEUser
+        // looks HOME var is alright. ssh is not using HOME env variable.
+        ssh-keygen works fine in bash shell. so bash setup some variable for use with ssh tools.
+        after reboot, run ssh-keygen directly in cmd.exe also works.
+        When run ssh.exe from cmd.exe, it still complains about HOME dir.
+        Could not create directory '/home/IEUser/.ssh'.
+
+        I think I know the problem. When start bash.exe, it will convert all path in PATH, HOME to cygdrive style.
+        When start ssh.exe directly, HOME dir is still in windows style.
+
+        Try set HOME to cygdrive style and run ssh.exe.
+        how to set env var for current shell only in windows?
+        set HOME=/cygdrive/c/Users/IEUser
+        ssh.exe ...
+        Could not create directory '/home/IEUser/.ssh'.
+
+        search: mingw HOME
+        HOWTO Set the HOME variable for cmd exe | MinGW
+        http://www.mingw.org/wiki/HOWTO_Set_the_HOME_variable_for_cmd_exe
+        Ubuntu Manpage: ssh — OpenSSH SSH client (remote login program)
+        https://manpages.ubuntu.com/manpages/bionic/en/man1/ssh.1.html
+        ssh will set HOME env var, not read it.
+        Check how ssh get home dir. maybe from /etc/passwd and similar syscall.
+        check ssh-keygen source code.
+        https://github.com/openssh/openssh-portable/blob/master/ssh-keygen.c
+        pw = getpwuid(getuid());
+        https://manpages.ubuntu.com/manpages/bionic/en/man3/getpwuid.3.html
+        indeed it read config for passwd entry.
+        how to bundle passwd file in mingw application?
+
+        Configure sshd on MSYS2 and run it as a Windows service · GitHub
+        https://gist.github.com/samhocevar/00eec26d9e9988d080ac
+        /etc/nsswitch.conf
+        db_home: windows
+        // what does this do? I think it only change HOME, doesn't work for getpwuid call.
+        http://manpages.ubuntu.com/manpages/precise/man5/nsswitch.conf.5.html
+        nsswitch can manage how system read passwd db. cool.
+
+        after updating /etc/nsswitch.conf, all MSYS applications and terminals must be
+        closed, as the configuration is only read once at MSYS DLL load time.
+        try db_home: windows again. reboot and test.
+        it doesn't work.
+        why it works on B75I3? what's different?
+
+        this is all about UserKnownHostsFile? just specify a path for this option.
+        after adding UserKnownHostsFile to point to existing file, ssh still wants to create /home/<user>/.ssh dir.
+
+        I will leave this problem. It's harmless for my use case.
+
       - System.ArgumentException: Value does not fall within the expected range.
         this happens when I run dotnet run on B75I3 dev node.
         what is this error?