PSCP를 사용하여 대상 경로에 공백이있는 Unix 컴퓨터에서 Windows 컴퓨터로 파일을 복사하는 방법은 무엇입니까?


14

C # 프로그램에서 PSCP를 사용하여 Unix 컴퓨터에서 Windows 컴퓨터로 파일을 복사하는 데 문제가 있습니다. Windows 시스템의 대상 폴더에 공간이있는 경우에만 문제가 발생합니다. 예를 들어, 다음은 제대로 작동합니다. (참고 :이 예에서는 IP 주소와 암호가 변경되었습니다.)

pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt C:\download

그러나 이것을 이것을 바꿀 때 :

pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt C:\download files

다음과 같은 오류가 발생합니다. 하나 이상의 원격 소스가 지원되지 않습니다.

PSCP가 공간을 다른 대상으로 해석하기 때문입니다. 하지만 어떻게 할 수 있습니까? 나는 인용 부호를 넣고 공간을 탈출하는 것과 같은 모든 종류의 것을 시도했습니다. 나는 다음을 모두 시도했지만 아무것도 작동하지 않습니다.

pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt "C:\download files"
pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt C:\"download files"
pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt C:\download\\ files

어떤 아이디어?

답변:


18

정답은 아마도 WinSCP와 C # 라이브러리를 사용하는 것이지만 대상 폴더에 공간이있을 때 PSCP를 작동시키는 방법을 찾았습니다.

정답은 다음과 같습니다.

pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt "C:\download files"

위의 내용이 작동하지 않는다고 생각하게 만드는 또 다른 문제가 발생했습니다. 원래 PSCP.EXE 실행 파일의 전체 경로를 사용하고있었습니다. 전체 경로에는 공백이 포함되었습니다. 그래서 나는 다음을하려고했습니다.

"C:\My PSCP Folder\pscp.exe" -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt "C:\download files"

그리고 Process.Start ()를 사용하여 C #에서 호출하려고했지만 실패했습니다. PSCP 경로 또는 대상 경로에 공간이 있지만 둘 다가 아닌 경우 처리 할 수있는 것처럼 보였습니다. Windows 환경 변수에 PSCP 실행 파일 경로를 포함 시켜서 고쳤습니다. 이제 PSCP.EXE를 호출 할 수 있으며 대상 폴더 주위의 따옴표와 함께 작동합니다.


10

를 사용하지 마십시오 pscp.

WinSCP에의 (퍼티의 상단에 내장되어 있습니다) 클라이언트가 제공하는 .NET 어셈블리를 . 다음은 입니다.


글쎄, 나는 그것을보고 다른 문제에 부딪쳤다. 분명히 WinSCP에는 SSH 호스트 키가 필요합니다. PSCP를 사용할 때 호스트 키 수락을 자동화하는 방법이있었습니다. 그러나 WinSCP C # 설명서를 읽을 때 알 수 있듯이 호스트 키를 자동으로 수락하는 방법은 없습니다. 어떤 아이디어?
Corey Burnett

1
@CoreyBurnett : 항상 같은 서버에 연결하고 있습니까?
user1686

Windows 컴퓨터에 설치되어 여러 다른 Linux 서버에 연결될 수있는 응용 프로그램을 만들고 있습니다. PSCP를 사용할 때 호스트 키를 자동으로 수락하도록 명령 줄에 지시하는 방법을 찾았습니다. 그렇게하면 호스트 키가 무엇인지 미리 알 필요가 없었습니다. 그러나 C # 및 WinSCP를 사용하여 해당 옵션을 찾지 못하는 것 같습니다.
코리 버넷

개인적으로 SSH 클라이언트가 확인이나 사용자 확인없이 호스트 키를 수락하면 심각한 보안 문제로 간주됩니다.
user1686

동의한다. 그러나 이것은 랩톱에 설치 될 응용 프로그램을 구축하고 제어 된 환경에서 랩톱이 Unix 박스에 연결되는 매우 구체적인 상황입니다. 이 설정은 고객에게 판매됩니다. 심지어 인터넷에 연결되어 있지 않습니다. 응용 프로그램의 운영자가 Host Key에 대해 알거나 걱정할 필요가 없도록 설치 및 사용을 간단하게하려고합니다. 그냥 작동해야합니다.
Corey Burnett

1

대상 폴더에 기간을 추가하십시오. 다음은 첨부 된 파일과 함께 작동해야합니다 . 귀하의 예에서 :

"C:\My PSCP Folder\pscp.exe" -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt "C:\download files\."

0
pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt "C:\download files"

먼저, 이미 언급했듯이 경로에 공백이 있습니다. 따옴표 "C : \ download files"를 사용하는 것이 좋습니다. 두 번째로 이미 지적했듯이 이상한 경로없이 pscp를 호출하려면 응용 프로그램을 PATH에 추가해야합니다. 셋째. 모든 것을 인용하여이 혼란을 방지하는 명명 규칙을 사용하십시오.

camelCaseNaming
underscore_naming

둘 다 문제를 해결하고 100500 배 더 시원하게 보입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.