Bagaimana saya bisa membuat file kunci pribadi yang dapat diterima untuk perakitan WinSCP untuk diautentikasi?

Saya mencoba menggunakan perakitan WinSCP untuk mengunggah ke server FTP kami. Kami memiliki kunci pribadi umum yang disimpan di DB kami yang kami ambil dan gunakan untuk otentikasi (saat ini berfungsi untuk unggahan Java kami menggunakan JSch). Namun WinSCP memerlukan nama jalur file.

Saya mencoba menulis kunci pribadi kami ke file untuk diambil WinSCP untuk otentikasi tetapi saya mendapatkan kesalahan berikut:

"C:\[..path..].\key.txt (bukan format file kunci yang dikenali)"

Kode Unggah:

String host = token.hostName;
String user = token.userID;
String sshKey = token.sshKey;

//write key to temp file
String keyFile = AppDomain.CurrentDomain.BaseDirectory+@".\key.txt";
FileStream temp = new FileStream(keyFile, FileMode.Create);
temp.Write(Encoding.ASCII.GetBytes(sshKey), 0 , 0);
temp.Close();

try {
    // Setup session options
    SessionOptions sessionOptions = new SessionOptions {
        Protocol = Protocol.Sftp,
        HostName = host,
        UserName = user,
        SshPrivateKeyPath = keyFile,
        GiveUpSecurityAndAcceptAnySshHostKey = true
    };

    using (Session session = new Session()) {
        // Connect
        session.Open(sessionOptions);
        session.DisableVersionCheck = true;

        // Upload files
        TransferOptions transferOptions = new TransferOptions();
        transferOptions.TransferMode = TransferMode.Binary;

        TransferOperationResult transferResult;
        transferResult = session.PutFiles(@resultsFolder+"*", depthDir, false, transferOptions);

        // Throw on any error
        transferResult.Check();

        // Print results
        foreach (TransferEventArgs transfer in transferResult.Transfers) {
            Console.WriteLine("Upload of {0} succeeded", transfer.FileName);
        }
    }               
} catch (Exception e) {
    Console.WriteLine("Error: {0}", e);
} finally {
    // delete file with key
    File.Delete(keyFile);
}

person Fueled By Coffee    schedule 15.06.2018    source sumber
comment
Dapatkah saya berasumsi bahwa Anda ingin membaca konten file?   -  person Simon Price    schedule 15.06.2018
comment
Apa format key.txt Anda? Tunjukkan pada kami.   -  person Martin Prikryl    schedule 15.06.2018
comment
key.txt hanyalah serangkaian karakter yang panjang (kunci pribadi)   -  person Fueled By Coffee    schedule 15.06.2018
comment
Tunjukkan kepada kami bagaimana Anda menggunakan file kunci di JSch.   -  person Martin Prikryl    schedule 15.06.2018


Jawaban (2)


Agak terlambat tetapi kode wincp Anda berfungsi. Saya hanya perlu mengubah kunci pribadi saya ke standar PuTTY. Untuk melakukan itu cukup konversikan kunci Anda dengan menggunakan

wincp.exe /keygen oldformat.key /output=newformat.key

Anda dapat menggunakan PuTTY tetapi menurut saya wincp jauh lebih sederhana karena Anda sudah memilikinya.

person JerryTheGreek    schedule 18.09.2019

Jika asumsi saya benar, Anda perlu menyesuaikan kode Anda dari ini

String keyFile = AppDomain.CurrentDomain.BaseDirectory+@".\key.txt";

untuk ini

var keyFilePath = $"{AppDomain.CurrentDomain.BaseDirectory} \\key.txt";
var keyText = File.ReadAllText(keyFilePath);

Saya telah membaginya menjadi dua variabel di sini sehingga Anda memiliki pemahaman yang jelas, tetapi Anda dapat melakukan semuanya dalam satu baris.

person Simon Price    schedule 15.06.2018
comment
Saya rasa perubahan Anda tidak menghasilkan apa pun selain memerlukan versi baru C# -- Anda telah menghapus . yang asing (yang mungkin tidak berbahaya jika BaseDirectory diakhiri dengan garis miring) dan menyisipkan spasi asing (yang tidak berbahaya). - person Ben Voigt; 18.09.2019