在远程服务器中执行xp_cmdshell

时间:2021-11-02 21:36:19
RECONFIGURE
EXEC sp_configure 'xp_cmdshell',1  

declare @cmdstring varchar(1000)

set @cmdstring = 'copy D:\\Mine\\Mine\\Icons\\1355312509_gadu.ico D:\\Mine\\Mine\\1355312509_gadu.ico'
exec master..xp_cmdshell @cmdstring 

RECONFIGURE
EXEC sp_configure 'xp_cmdshell',0

I am trying to execute this on remote server, I am logged in as sysadmin though I am not able to execute, this is the error I get, I have been through earlier post but couldn't find the proper solution

我试图在远程服务器上执行此操作,我以sysadmin身份登录,虽然我无法执行,这是我得到的错误,我已经通过较早的帖子但是找不到合适的解决方案

output
The device is not ready.
NULL

Any help would be apreciated

任何帮助都会被贬低

Won't this code

不会这个代码

RECONFIGURE
    EXEC sp_configure 'xp_cmdshell',0 

at the end of code eliminate those security threats??

在代码结束时消除那些安全威胁?

This is what I have done and its okay

这就是我所做的,没关系

CREATE TABLE #temp
(
    id               INT IDENTITY(1, 1),
    name_file        VARCHAR(500),
    depth_tree       VARCHAR(10),
    is_folder_files  VARCHAR(10)
)

/* xp_dirtree selects file from specific location
*  depth_tree       :   depth of the search i.e. subfolders
*  is_folder_files  :   selects folders only or files too
*/

INSERT INTO #temp(name_file, depth_tree, is_folder_files) EXEC xp_dirtree @source_path, 0, 1

-- Must concatenate to have permission for xp_cmdshell
SET @concatenate_string = 'RECONFIGURE EXEC sp_configure ''xp_cmdshell'',1 EXEC MASTER..xp_cmdshell '


-- Generating copy string in bulk
SELECT @cmd_string =    
    ISNULL(@cmd_string, '') + 
    CASE WHEN (LEN(REPLACE(t.name_file, @seperate_value, 1)) <> LEN(t.name_file)) -- if @seperate_value is not in image
        THEN
        (
            SELECT CASE 
                WHEN REPLACE(t.name_file, 'Approach', 1) <> t.name_file OR REPLACE(t.name_file, 'CloseUp', 1) <> t.name_file -- if word Approach or CloseUp is not there in image 
                THEN
                    (
                    SELECT CASE
                    WHEN ((SELECT f.FaceID FROM Face f WHERE CAST(f.Notes AS VARCHAR) = SUBSTRING(t.name_file, 0, CHARINDEX(@seperate_value, t.name_file)-1)) IS NOT NULL) -- when extracted ID from image <> NotesID
                    THEN
                    (
                    @concatenate_string + '''copy ' + @source_path + t.name_file + ' ' 
                    + @destination_path 
                    + (SELECT f.FaceID FROM Face f WHERE CAST(f.Notes AS VARCHAR) = SUBSTRING(t.name_file, 0, CHARINDEX(@seperate_value, t.name_file)-1)) -- Compares and gives the faceID
                    + (SELECT   CASE 
                                    WHEN REPLACE(t.name_file, 'Approach', 1) <> t.name_file THEN '-AS.jpg'' '
                                    WHEN REPLACE(t.name_file, 'CloseUp', 1) <> t.name_file THEN '-BS.jpg'' '
                                    ELSE
                                        'Undefined'
                                END
                       )
                    )
                    ELSE
                        ' '
                    END
                )
                ELSE
                    ' '
                END
        )    
        ELSE
            ' '
    END

FROM #temp t

SELECT @cmd_string + 'RECONFIGURE EXEC sp_configure ''xp_cmdshell'',0'

EXEC (@cmd_string)

2 个解决方案

#1


2  

I have had this one some time too. I ran the script from server a, where things were on server b. I checked and the only thing (besides credentials, which looks it isn't an issue) was that the filestructure didn't exists on the remote server..

我也有一段时间了。我从服务器a运行脚本,其中的东西在服务器b上。我检查过,唯一的事情(除了凭证,看起来不是问题)是文件结构在远程服务器上不存在。

#2


1  

It's most likely an issue with the credentials the SQL Server Service is running under. The account might not have sufficient access to the folders you are trying to copy from or to.

这很可能是运行SQL Server服务的凭据的问题。该帐户可能无法充分访问您尝试从中复制的文件夹。

One solution could be attempting to run the task from SQL Server Agent, see also this discussion on the MSDN forums.

一种解决方案可能是尝试从SQL Server代理运行任务,另请参阅MSDN论坛上的此讨论。

#1


2  

I have had this one some time too. I ran the script from server a, where things were on server b. I checked and the only thing (besides credentials, which looks it isn't an issue) was that the filestructure didn't exists on the remote server..

我也有一段时间了。我从服务器a运行脚本,其中的东西在服务器b上。我检查过,唯一的事情(除了凭证,看起来不是问题)是文件结构在远程服务器上不存在。

#2


1  

It's most likely an issue with the credentials the SQL Server Service is running under. The account might not have sufficient access to the folders you are trying to copy from or to.

这很可能是运行SQL Server服务的凭据的问题。该帐户可能无法充分访问您尝试从中复制的文件夹。

One solution could be attempting to run the task from SQL Server Agent, see also this discussion on the MSDN forums.

一种解决方案可能是尝试从SQL Server代理运行任务,另请参阅MSDN论坛上的此讨论。