Bagaimana cara menggunakan PSCP untuk menyalin file dari mesin Unix ke mesin Windows di mana jalur target memiliki spasi?

14

Saya mengalami masalah menggunakan PSCP dalam program C # untuk menyalin file dari mesin Unix ke mesin Windows. Masalahnya hanya terjadi ketika folder target pada mesin Windows memiliki ruang di dalamnya. Misalnya, berikut ini berfungsi dengan baik: (CATATAN: alamat IP dan kata sandi telah diubah untuk contoh ini)

pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt C:\download

Tetapi ketika saya mengubahnya ke ini:

pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt C:\download files

Saya mendapatkan kesalahan berikut: Lebih dari satu sumber jarak jauh tidak didukung.

Saya menyadari itu karena PSCP memperkenalkan ruang sebagai target lain. Tetapi bagaimana saya bisa melakukannya? Saya telah mencoba segala macam hal seperti memasukkannya ke dalam tanda kutip dan keluar dari ruang. Saya telah mencoba semua yang berikut dan tidak ada yang berhasil:

pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt "C:\download files"
pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt C:\"download files"
pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt C:\download\\ files

Ada ide?

Corey Burnett
sumber

Jawaban:

18

Meskipun jawaban yang tepat mungkin menggunakan WinSCP dan pustaka C # mereka, saya memang menemukan cara agar PSCP berfungsi ketika folder target memiliki ruang di dalamnya.

Jawaban yang benar adalah dengan melakukan ini:

pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt "C:\download files"

Ternyata saya mengalami masalah lain yang membuat saya berpikir hal di atas tidak berhasil. Awalnya saya menggunakan path lengkap ke executable PSCP.EXE. Path lengkap termasuk spasi. Jadi saya mencoba melakukan hal berikut:

"C:\My PSCP Folder\pscp.exe" -pw MyPassword [email protected]:/etc/myfolder/myfile.opt "C:\download files"

Dan saya mencoba memanggilnya dari C # menggunakan Process.Start () dan gagal. Sepertinya itu bisa mengatasinya jika ada ruang di jalur PSCP atau jalur target, tetapi tidak keduanya. Saya memperbaikinya dengan memasukkan jalur ke PSCP yang dapat dieksekusi dalam variabel Lingkungan Windows saya. Sekarang saya dapat memanggil PSCP.EXE dan berfungsi dengan tanda kutip di sekitar folder target.

Corey Burnett
sumber
10

Jangan gunakan pscp.

The WinSCP klien (yang dibangun di atas Putty) menyediakan perakitan NET . Ini sebuah contoh .

pengguna1686
sumber
Yah saya melihat itu dan saya berlari ke masalah yang berbeda. Rupanya WinSCP membutuhkan Kunci Host SSH (yang tidak saya miliki). Ketika saya menggunakan PSCP ada cara untuk mengotomatiskan penerimaan Kunci Host. Tapi dari apa yang saya tahu ketika membaca dokumentasi WinSCP C # sepertinya tidak ada cara untuk secara otomatis menerima Kunci Host. Ada ide?
Corey Burnett
1
@CoreyBurnett: Apakah Anda selalu terhubung ke server yang sama?
user1686
Saya sedang membangun aplikasi yang akan diinstal pada mesin Windows dan berpotensi akan terhubung ke sejumlah server Linux yang berbeda. Ketika saya menggunakan PSCP saya menemukan cara untuk memberitahu baris perintah untuk secara otomatis menerima Kunci Host. Dengan begitu saya tidak perlu tahu apa Host Key sebelumnya. Namun saya tidak bisa menemukan opsi itu menggunakan C # dan WinSCP.
Corey Burnett
Secara pribadi, saya akan menganggapnya sebagai masalah keamanan serius jika klien SSH menerima kunci host tanpa verifikasi atau konfirmasi pengguna.
user1686
Saya setuju. Namun ini adalah situasi yang sangat spesifik di mana kami sedang membangun sebuah aplikasi yang akan diinstal pada laptop dan kemudian laptop itu akan terhubung ke kotak Unix di lingkungan yang terkendali. Pengaturan ini akan dijual kepada pelanggan. Bahkan tidak terhubung ke Internet. Saya hanya mencoba membuatnya mudah untuk diinstal dan digunakan sehingga operator aplikasi tidak perlu tahu atau khawatir tentang hal-hal Host Key. Seharusnya berfungsi.
Corey Burnett
1

Tambahkan periode ke folder tujuan. Berikut ini harus bekerja dengan yang ditambahkan . pada contoh Anda:

"C:\My PSCP Folder\pscp.exe" -pw MyPassword [email protected]:/etc/myfolder/myfile.opt "C:\download files\."
Mat
sumber
0
pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt "C:\download files"

baik pertama, seperti yang telah Anda sebutkan, Anda memiliki ruang di jalur Anda. Jadi akan lebih bijaksana untuk menggunakan tanda kutip "C: \ unduh file". Kedua seperti yang telah Anda tunjukkan, Anda perlu menambahkan aplikasi Anda ke PATH Anda untuk memanggil pscp tanpa jalur aneh. dan ketiga. Gunakan konvensi penamaan yang mencegah kekacauan ini karena mengutip semuanya.

camelCaseNaming
underscore_naming

Keduanya memecahkan masalah, dan Anda terlihat 100.500 kali lebih keren.

Anton Stafeyev
sumber