123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
-
- using IMCS.CCS.body;
- using Renci.SshNet;
- using System;
- using System.IO;
- namespace IMCS.CCS.DeviceProtocol
- {
- public class DeviceSFTP
- {
- #region 声明一个ScpClient类型的变量
- private ScpClient ssh;
- private SftpClient sftp;
- private SshClient sshClient;
-
-
- /// <summary>
- /// SCP连接状态
- /// </summary>
- public bool Connected { get { return ssh.IsConnected; } }
- #endregion
- #region
- /// <summary>
- /// 构造方法
- /// </summary>
- /// <param name="ip">IP</param>
- /// <param name="port">端口</param>
- /// <param name="user">用户名</param>
- /// <param name="pwd">密码</param>
- public DeviceSFTP(string ip, string port, string user, string pwd)
- {
- ssh = new ScpClient(ip, Int32.Parse(port), user, pwd);
- }
- public DeviceSFTP(SFTPDeviceBody body)
- {
- ssh = new ScpClient(body.Ip, Int32.Parse(body.Port), body.UserName, body.Password);
- }
- #endregion
- #region
- /// <summary>
- /// 连接SCP
- /// </summary>
- /// <returns>true成功</returns>
- public bool Connect()
- {
- try
- {
- if (!Connected)
- {
- ssh.Connect();
- }
- return true;
- }
- catch (Exception ex)
- {
- throw new Exception(string.Format("连接SFTP失败,原因:{0}", ex.Message));
- }
- }
- #endregion
- #region 断开SCP
- /// <summary>
- /// 断开SCP
- /// </summary>
- public bool Disconnect()
- {
- try
- {
- if (ssh != null && Connected)
- {
- ssh.Disconnect();
- }
- return true;
- }
- catch (Exception ex)
- {
- throw new Exception(string.Format("断开SFTP失败,原因:{0}", ex.Message));
- }
- }
- #endregion
- #region SFTP上传文件
- /// <summary>
- /// SCP上传文件
- /// </summary>
- /// <param name="localPath">本地路径</param>
- /// <param name="remotePath">远程路径</param>
- public int Put(string localPath, string remotePath)
- {
- try
- {
- FileInfo file = new FileInfo(localPath);
- FileStream fs = new FileStream(localPath, FileMode.Open);
- Connect();
- ssh.Upload(fs, remotePath);
- // ssh.Upload(file, remotePath);
- Disconnect();
- return 1;
- }
- catch (Exception ex)
- {
- throw new Exception(string.Format("SFTP文件上传失败,原因:{0}", ex.Message));
- }
- }
- #endregion
- #region SFTP获取文件
- /// <summary>
- /// SCP获取文件
- /// </summary>
- /// <param name="remotePath">远程路径</param>
- /// <param name="localPath">本地路径</param>
- public void Get(string remotePath, DirectoryInfo localPath)
- {
- try
- {
- Connect();
- ssh.Download(remotePath, localPath);
- Disconnect();
- }
- catch (Exception ex)
- {
- throw new Exception(string.Format("SFTP文件获取失败,原因:{0}", ex.Message));
- }
- }
- #endregion
- public void DeleteFile(SFTPDeviceBody body, string filename)
- {
- using (SshClient sshClient = new SshClient(body.Ip, Int32.Parse(body.Port), body.UserName, body.Password))
- {
- //连接
- sshClient.Connect();
- //执行命令
- //rm -rf /var/log/httpd/access
- var cmd = sshClient.RunCommand($"rm -f /card/user/sinumerik/data/prog/webApiMESFILE/{filename}");
- //ExitStatus == 0 执行成功
- //
- if (cmd.ExitStatus == 0)
- {
- Console.WriteLine(cmd.Result);//执行结果
- }
- else
- {
- Console.WriteLine(cmd.Error);//错误信息
- }
- //断开连接
- sshClient.Disconnect();
- }
- }
- #region SFTP删除文件
- /// <summary>
- /// SCP获取文件
- /// </summary>
- public void test()
- {
- using (SshClient sshClient = new SshClient("192.168.170.205", Int32.Parse("22"), "manufact", "SUNRISE"))
- {
- //连接
- sshClient.Connect();
- //执行命令
- var cmd = sshClient.RunCommand("cd /card/user/sinumerik/data/prog/webApiMESFILE && ls");
- //ExitStatus == 0 执行成功
- //
- if (cmd.ExitStatus == 0)
- {
- Console.WriteLine(cmd.Result);//执行结果
- }
- else
- {
- Console.WriteLine(cmd.Error);//错误信息
- }
- //断开连接
- sshClient.Disconnect();
- }
- }
- #endregion
- }
-
-
- }
|