如何在 C#.net 中将 SFTP 与 .pem 文件一起使用?

How to use SFTP with .pem file in C#.net?

问题:我正在使用 C# .net 平台通过 SFTP 将文件通过密钥文件/.pem 文件发送到远程主机,并且没有密码。

C#.net源代码:

ProcessStartInfo p = new ProcessStartInfo
{
    FileName = "sh",
    Arguments = "upload.sh " + file
};
p.RedirectStandardOutput = true;
p.UseShellExecute = false;
p.CreateNoWindow = true;
Process proc1 = new Process();
proc1.StartInfo = p;
proc1.Start();
string result = proc1.StandardOutput.ReadToEnd();
log.InfoFormat(result);

upload.sh:

sftp -i testsftp-key testsftp@sftp.xxx-xxx.com
put  filename

此处

  1. testsftp-key :.pem 文件名(密钥文件),
  2. testsftp:用户名,
  3. sftp.xxx-xxx.com :主机地址.
  4. 文件名:要上传的文件

rrot user/cronjob 执行 exe 时文件未上传。使用像 pi 这样的非 root 用户执行上传文件。 权限都是777.

错误:

permission denied

如何解决这个权限问题?

我找到了这个问题的答案:

ProcessStartInfo p = new ProcessStartInfo
{
    FileName = "sh",
    Arguments = "/home/pi/../upload.sh " + file
};
p.RedirectStandardOutput = true;
p.RedirectStandardError = true;
p.UseShellExecute = false;
p.CreateNoWindow = false;
Process proc1 = new Process();
proc1.StartInfo = p;
proc1.Start();
string result = "";
using (System.IO.StreamReader output = proc1.StandardOutput) 
{
    result = output.ReadToEnd();
}
string error = "";
using (System.IO.StreamReader output = proc1.StandardError)
{
    error = output.ReadToEnd();
}
log.InfoFormat("SFTP result: {0}", result);
log.InfoFormat("{0}", error);

我正在使用 streamreader 捕获重定向的 stdout 和 stderr。现在我可以看到脚本 upload.sh 成功 运行 并将文件上传到远程服务器。 我从这里得到帮助: How to capture Shell command output in C#?