前言

批量登录SSH执行命令 ,把应急响应中的日志文件下载回来。

代码实现

Renci.SshNet编译出DLL,引用。

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using Renci.SshNet; namespace ConsoleApp1
{
class Program
{ static void Main(string[] args)
{
string host = "192.168.221.133";
string userName = "root";
string psw = "toor";
string finalCommand = @"mkdir /tmp/mytestwell/ && (ls -rtalc /etc > /tmp/mytestwell/etc_time.txt & ls -rtalc /etc/init.d > /tmp/mytestwell/init.d.txt & cp /etc/rc.7 /tmp/mytestwell/rc.7 & cp /etc/rc.8 /tmp/mytestwell/rc.8 & strings /usr/sbin/sshd | grep 'var' > /tmp/mytestwell/sshd_string.txt & cp /usr/sbin/sshd /tmp/mytestwell/sshd & cat /var/ilog > /tmp/mytestwell/ilog.txt & cat /var/Olog > /tmp/mytestwell/Olog.txt & ls -rtalc /var/cache/man/local/cat1/ > /tmp/mytestwell/cat1_bakdoor.txt & ls -rtalc /car/cache/man/local/cat9/ > /tmp/mytestwell/cat9_bakdoor.txt & stat /usr/sbin/sshd > /tmp/mytestwell/sshd_time.txt & ls -rtalc /bin > /tmp/mytestwell/bin_time_change.txt & ls -rtalc /usr/bin > /tmp/mytestwell/usr_bin_time_change.txt & ls -rtalc /usr/sbin > /tmp/mytestwell/usr_sbin_time_change.txt & ls -rtalc /etc/udev/udevd > /tmp/mytestwell/udevd_time.txt & ls -rtalc /bin/udevd > /tmp/mytestwell/bin_udevd_time.txt & ls -rtalc /tmp/linux64 > /tmp/mytestwell/tmp_linux64_time.txt & ls -rtalc /etc/init.d/network > /tmp/mytestwell/etc_init_d_network_time.txt & netstat -antlop > /tmp/mytestwell/netstat.txt & ls -rtalc /usr/bin/ > /tmp/mytestwell/usr_bin_time.txt & cat /etc/passwd | grep :0 > /tmp/mytestwell/etc_passwd_time.txt) && sleep 2 && tar -cvf /tmp/qax_check.tar /tmp/mytestwell/*";
ConnectionInfo conInfo = new ConnectionInfo(host, 22, userName, new AuthenticationMethod[]{
new PasswordAuthenticationMethod(userName,psw)
});
SshClient client = new SshClient(conInfo); try
{
client.Connect();
var outptu = client.RunCommand(finalCommand);
if (outptu != null)
{
Console.WriteLine(outptu.Result);
}
else
{
Console.WriteLine("not a string");
} }
catch (Exception ex)
{
Console.WriteLine(ex);
throw;
}
client.Disconnect();
client.Dispose(); /// SFTP获取文件部分 string localFileName = "D:\\q.tar"; //文件下载位置
string remoteFileName = $"/tmp/qax_check.tar";
string ftpServerIP = "192.168.221.133";
string ftpPort = "22";
string ftpUserID = "root";
string ftpPassword = "toor"; try
{
using (var sftp = new SftpClient(ftpServerIP, Convert.ToInt32(ftpPort), ftpUserID, ftpPassword))
{
sftp.Connect(); using (var file = File.OpenWrite(localFileName))
{
sftp.DownloadFile(remoteFileName, file);
} sftp.Disconnect(); Console.WriteLine($"下载文件成功,文件路径:{localFileName}"); }
}
catch (Exception e)
{
Console.WriteLine($"下载失败,原因:{e}"); }
}
}
}

参考

C#调用DLL库的方法

https://blog.csdn.net/guangod/article/details/85774225

https://github.com/sshnet/SSH.NET/

C#登录SSH执行命令,下载文件的更多相关文章

  1. [转]python3之paramiko模块(基于ssh连接进行远程登录服务器执行命令和上传下载文件的功能)

    转自:https://www.cnblogs.com/zhangxinqi/p/8372774.html 阅读目录 1.paramiko模块介绍 2.paramiko的使用方法 回到顶部 1.para ...

  2. ssh批量登录并执行命令(python实现)

    局域网内有一百多台电脑,全部都是linux操作系统,所有电脑配置相同,系统完全相同(包括用户名和密码),ip地址是自动分配的.现在有个任务是在这些电脑上执行某些命令,者说进行某些操作,比如安装某些软件 ...

  3. Python实现ssh批量登录并执行命令

    局域网内有一百多台电脑,全部都是linux操作系统,所有电脑配置相同,系统完全相同(包括用户名和密码),ip地址是自动分配的.现在有个任务是在这些电脑上执行某些命令,者说进行某些操作,比如安装某些软件 ...

  4. Linux远程ssh执行命令expect使用及几种方法

    expect命令实现脚本免交互 一.Linux下SSH无密码认证远程执行命令 在客户端使用ssh-keygen生成密钥对,然后把公钥复制到服务端(authorized_keys). 实现步骤: 1.客 ...

  5. ssh 执行命令并实时显示结果

    ssh 执行命令并实时显示结果 import paramiko def main(): sshClient = paramiko.SSHClient() sshClient.set_missing_h ...

  6. python批量操作Linux服务器脚本,ssh密码登录(执行命令、上传、下载)(一)

     -*-          paramiko.util.log_to_file(         ssh = paramiko.SSHClient()          ssh.set_missing ...

  7. Python3学习之路~9.1 paramiko模块:实现ssh执行命令以及传输文件

    我们一般使用linux的时候,都是在Windows上安装一个ssh客户端连接上去.那么从一台linux如何连接到另一条linux呢?使用ssh命令即可,因为每台linux机器自己都有一个ssh客户端. ...

  8. Windows VS2017 编译 libssh2 1.7.0(执行命令、文件上传、下载)

    下载安装 OpenSSL 要编译 libssh2,必须先编译好 OpenSSL 的静态库,直接从 http://slproweb.com/products/Win32OpenSSL.html 下载已经 ...

  9. python批量操作Linux服务器脚本,key登录(执行命令、上传、下载)(二)

       -*-   2 #批量操作linux服务器(执行命令,上传,下载)   3 #!/usr/bin/python   4 import paramiko   5 import datetime   ...

随机推荐

  1. Vue 之 slot(插槽)

    前言: vue中关于插槽的文档说明很短,语言又写的很凝练,再加上其和methods,data,computed等常用选项在使用频率.使用先后上的差别,这就有可能造成初次接触插槽的开发者容易产生“算了吧 ...

  2. 01_Request和Response

    参考文档 http://www.iamnancy.top/djangorestframework/Responses/ https://q1mi.github.io/Django-REST-frame ...

  3. javascript权威指南第21章 Ajax和Comet

    function createXHR(){ if(typeof XMLHttpRequest !='undefined'){ return new XMLHttpRequest(); }else if ...

  4. SD六校联考二轮

    数据差评 D1T1 string 直接模拟 每次 string_u = const_string + string_v 理论得分 30 实际可得 100 D2T1 n^2 理论得分 30 实际可得 1 ...

  5. Unity与Android之间的交互之AndroidManifest

    https://blog.csdn.net/qq_15003505/article/details/70231975 AndroidManifest,中文名一般称之为清单文件.它描述了应用程序的组件的 ...

  6. 洛谷P2305 [NOI2014]购票 [DP,树状数组]

    传送门 思路 显然是树形DP,显然是斜率优化,唯一的问题就是该怎么维护凸包. 套路1:树上斜率优化,在没有这题的路程的限制的情况下,可以维护一个单调栈,每次加入点的时候二分它会加到哪里,然后替换并记录 ...

  7. Shiro + Redis集成思路

    首先,确保Spring配置完毕了. 集成Shiro 1.在pom.xml中追加依赖 <dependency> <groupId>org.apache.shiro</gro ...

  8. 配置Spring Data Redis

    事前准备 1.下载redis https://github.com/MicrosoftArchive/redis/releases/tag/win-3.2.100 2.下载redis可视化工具 htt ...

  9. Selenium操作Chrome模拟手机浏览器

    目录 使用指定设备 使用自定义设备 在使用Chrome浏览网页时,我们可以使用Chrome开发者工具模拟手机浏览器,在使用Selenium操作Chrome时同样也可以模拟手机浏览器.主要有以下两种用途 ...

  10. ansible 错误记录(1)

    基本环境:docker基于centos7 在docker里面安装ansible 不管是在root还是普通用户下执行 ansible all -m ping  都报如下错误: 172.20.1.1 | ...