diff --git a/pkg/handler/sftp.go b/pkg/handler/sftp.go
index 7b693bffe4582d6b843679f9eed8ac82c36872cf..ba8f714386cdd4cfc3eaa3f18ba6bb4d3ceb807e 100644
--- a/pkg/handler/sftp.go
+++ b/pkg/handler/sftp.go
@@ -120,15 +120,17 @@ func (fs *userSftpRequests) Filelist(r *sftp.Request) (sftp.ListerAt, error) {
 		}
 	}
 
-	fileInfos, err = sysUserDir.client.ReadDir(realPath)
-
 	switch r.Method {
 	case "List":
+		fileInfos, err = sysUserDir.client.ReadDir(realPath)
 		return fileInfos, err
 	case "Stat":
-		return fileInfos, err
+		fsInfo, err := sysUserDir.client.Stat(realPath)
+		return listerat([]os.FileInfo{fsInfo}), err
 	case "Readlink":
-		return fileInfos, err
+		filename, err := sysUserDir.client.ReadLink(realPath)
+		fsInfo := &FakeFile{name: filename, modtime: time.Now().UTC()}
+		return listerat([]os.FileInfo{fsInfo}), err
 	}
 	return fileInfos, err
 }
@@ -214,7 +216,6 @@ func (fs *userSftpRequests) Fileread(r *sftp.Request) (io.ReaderAt, error) {
 func (fs *userSftpRequests) GetSftpClient(asset *model.Asset, sysUser *model.SystemUser) (*sftp.Client, error) {
 	logger.Debug("Get Sftp Client")
 	info := service.GetSystemUserAssetAuthInfo(sysUser.Id, asset.Id)
-
 	return CreateSFTPConn(sysUser.Username, info.Password, info.PrivateKey, asset.Ip, strconv.Itoa(asset.Port))
 }
 
@@ -275,6 +276,28 @@ func (su *SysUserDir) ParsePath(path string) string {
 
 }
 
+type FakeFile struct {
+	name    string
+	modtime time.Time
+	symlink string
+}
+
+func (f *FakeFile) Name() string { return f.name }
+func (f *FakeFile) Size() int64  { return int64(0) }
+func (f *FakeFile) Mode() os.FileMode {
+	ret := os.FileMode(0644)
+	if f.symlink != "" {
+		ret = os.FileMode(0777) | os.ModeSymlink
+	}
+	return ret
+}
+func (f *FakeFile) ModTime() time.Time { return f.modtime }
+func (f *FakeFile) IsDir() bool        { return false }
+func (f *FakeFile) Sys() interface{} {
+	fakeInfo, _ := os.Stat(".")
+	return fakeInfo.Sys()
+}
+
 type listerat []os.FileInfo
 
 func (f listerat) ListAt(ls []os.FileInfo, offset int64) (int, error) {