c#窗体程序实现远程连接阿里云服务器上部署的Windows操作系统

一、阿里云ECS上部署Windows系统

1、在创建好的ECS实例中添加一个Windows操作系统的镜像,设置好用户名和密码以及公网IP,后续连接需要用到。

2、配置实例的安全组规则,添加ssh通讯的默认端口22

3、安装和启用 SSH 服务

Windows设置-应用-应用和功能-可选功能(查看是否有OpenSSH客户端、OpenSSH服务器)服务器端打开 Windows 服务管理器,在服务管理器中,滚动或使用搜索功能找到名为“OpenSSH SSH Server”或类似的服务条目,如果 SSH 服务未运行,则右键单击该服务,并选择“启动”以启动服务(因为Windows操作系统是默认关闭SSH服务的所以很多都是因为服务器端未启用SSH服务导致的无法连接)

4、检查目标计算机上的防火墙设置,并确保允许来自您的计算机的连接

二、代码实现

1、添加SSH.NET程序包,引用ssh通讯协议用来来操作SSH和SFTP连接。

 

using Renci.SshNet;
using Renci.SshNet.Sftp;

2、具体的实现代码

public partial class Form1 : Form
    {
        private SftpClient sftpClient;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // 初始化SFTP客户端
            sftpClient = new SftpClient("公网IP", "用户名", "密码");
            sftpClient.Connect();
            RefreshTreeView();
        }
        private void RefreshTreeView()
        {
            treeView1.Nodes.Clear();

            var files = sftpClient.ListDirectory("获取远程服务器的文件和目录列表");
            foreach (var file in files) 
            {
                var newNode = new TreeNode(file.Name);
                newNode.Tag = file;

                var fileAttributes = sftpClient.GetAttributes(file.FullName);
                var fileSize = fileAttributes.Size;
                newNode.Text += $"  {fileSize} bytes";

                var fileCreationTime = fileAttributes.LastWriteTime;
                newNode.Text += $"  {fileCreationTime}";
                treeView1.Nodes.Add(newNode);
            }
            treeView1.NodeMouseClick += TreeView1_NodeMouseClick;
        }
        private void TreeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            var selectedNode = e.Node;
            var selectedFile = (SftpFile)selectedNode.Tag;

            // 检查选中的节点是否为目录
            if (selectedFile.IsDirectory)
            {
                selectedNode.Nodes.Clear();

                var subDirectories = sftpClient.ListDirectory(selectedFile.FullName);
                foreach (var subDirectory in subDirectories)
                {
                    var newNode = new TreeNode(subDirectory.Name);
                    newNode.Tag = subDirectory;
                    selectedNode.Nodes.Add(newNode);
                }
            }
            else
            {
                // 在这里执行你想要的操作,比如下载文件等
            }
        }
        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {

        }

        private void btnUpload_Click(object sender, EventArgs e)
        {
            var selectedNode = treeView1.SelectedNode;
            if (selectedNode == null || selectedNode.Tag == null)
            {
                MessageBox.Show("请选择一个目录进行上传。");
                return;
            }
            var openFileDialog = new OpenFileDialog();
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                var localFilePath = openFileDialog.FileName;
                var fileName = Path.GetFileName(localFilePath);
                var remoteDirectory = "/Users/Administrator/Desktop";
                // 上传文件至远程服务器
                using (var fileStream = File.OpenRead(localFilePath))
                {

                    string remoteFilePath = Path.Combine(remoteDirectory, fileName);
                    sftpClient.UploadFile(fileStream, remoteFilePath);
                    MessageBox.Show("上传成功!");
                }

                RefreshTreeView();
            }
        }

        private void btnDownload_Click(object sender, EventArgs e)
        {
            var selectedNode = treeView1.SelectedNode;
            if (selectedNode == null || selectedNode.Tag == null)
            {
                MessageBox.Show("请选择一个文件进行下载。");
                return;
            }
            var selectedFile = (SftpFile)selectedNode.Tag;
            var localDirectory = "下载到本地的目录"; 
            var localFilePath = Path.Combine(localDirectory, selectedFile.Name); /


            // 从远程服务器下载文件
            using (var fileStream = File.Create(localFilePath))
            {
                sftpClient.DownloadFile(selectedFile.FullName, fileStream);
                MessageBox.Show("下载成功!");
            }
        }
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            // 关闭SFTP连接
            sftpClient.Disconnect();
            sftpClient.Dispose();
        }
    }

小结:本代码仅实现了远程连接服务器进行文件的上传下载操作,界面需要进一步优化。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值