我尝试使用WinSCP程序集上传到我们的FTP服务器。我们有一个公共私钥存储在我们的数据库中,我们检索并用于身份验证(这目前适用于我们的Java上传用户JSch
)。但是,WinSCP需要文件路径名。
我试图将我们的私钥写入WinSCP文件以进行身份验证,但我收到以下错误:
" C:\ [.. path ..]。\ key.txt(不是公认的密钥文件格式)"
上传代码:
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);
}
答案 0 :(得分:1)
有点晚了,但是您的winscp代码有效。我只需要将我的私钥转换为PuTTY标准即可。为此,只需使用
即可转换您的密钥winscp.exe / keygen oldformat.key /output=newformat.key
您可以使用PuTTY,但是我发现winscp更加简单,因为您已经拥有它。
答案 1 :(得分:0)
如果我假设正确,您需要从此
调整代码String keyFile = AppDomain.CurrentDomain.BaseDirectory+@".\key.txt";
到这个
var keyFilePath = $"{AppDomain.CurrentDomain.BaseDirectory} \\key.txt";
var keyText = File.ReadAllText(keyFilePath);
我已将它分成两个变量,以便您清楚地了解,但您可以在一行中完成所有操作。