【问题标题】:How to use SFTP with .pem file in C#.net?如何在 C#.net 中使用带有 .pem 文件的 SFTP?
【发布时间】:2019-11-18 13:33:30
【问题描述】:

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

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);

上传.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 用户/cronjob 执行 exe 时文件未上传。使用像 pi 这样的非 root 用户执行会上传文件。 所有人的权限都是 777。

错误

permission denied

如何解决这个权限问题?

【问题讨论】:

  • 为什么你不能运行命令什么是错误和输出是什么
  • 有没有可能是upload.sh文件不在你应用的工作目录下?
  • @Longoon12000 不,它位于工作目录中。它在我手动运行时运行。但不是 cronjob
  • @BugFinder 没有错误。只是文件不会上传
  • @SayanSen 如果你从 cronjob 运行一些东西,它并不假设工作目录是你的应用程序所在的位置,你必须自己设置工作目录(工作目录 != 目录程序所在的位置)。您能否发布您应该运行该应用程序的 cronjob 行?

标签: c# shell unix sftp permission-denied


【解决方案1】:

我找到了答案:

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);

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多