如何在C#.net中使用.pem文件的SFTP?

问题描述 投票:-2回答:1

问题:我正在使用C#.net平台将一个文件用一个密钥文件.pem文件和无密码的SFTP方式传送到远程主机。我正在使用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 [email protected]
put  filename

这里

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

用rrot usercronjob执行exe时,文件没有被上传。使用非root用户(如pi)执行时,上传了文件,所有用户的权限为777。

:

permission denied

如何解决这个权限问题?

c# shell unix sftp permission-denied
1个回答
0
投票

我找到了一个答案。

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被成功运行,并将文件上传到远程服务器。如何在C#中捕获Shell命令输出?

© www.soinside.com 2019 - 2024. All rights reserved.