目录
在内网中,几乎所有的Linux/UNIX服务器和网络设备都支持SSH协议。在一般情况下,SSH协议是被允许通过防火墙和边界设备的,所以经常被攻击者利用,同时,SSH协议的传输过程是加密的,所以我们很难区分合法的 SSH会话和攻击者利用其他网络建立的隧道,攻击者使用SSH端口隧道突破防火墙的限制后,能够建立一些之前无法建立的TCP连接。
一个普通的SSH命令如下
ssh root@192.168.1.1
创建SSH隧道的常用参数说明如下:
-C:压缩传输,提高传输速度
-f:将SSH传输转入后台执行,不占用当前的 Shell
-N:建立静默连接(建立了连接,但是看不到具体会话)
-g:允许远程主机连接本地用于转发的端口
-L:本地端口转发
-R:远程端口转发
-D:动态转发(SOCKS 代理)
-P:指定 SSH端口
如图所示,测试环境为攻击者VPS(Kali Linux);有是一个小型内网,包含三台服务器;外部VPS可访问内网web服务器但不能访数据服务器;内网Web服务和数据库服务器可以互相访问,测试目标为:以Web服务器为跳板,访问数据库服务器的3389端口

以Web 服务器192.168.1.1为跳板将内网数据库服务器1.1.1.200的3389端口映射到机器192.168.1.4的1153 端口,再访问VPS 的 1153端口,就可以访问1.1.1.200的3389端口了
在VPS上执行如下命令,会要求输人Wcb服务器(跳板机)的密码
ssh -CfNg -L 1153(VPS端口):1.1.1.200(日标主机):3389(目标端口) root@192.168.1.1(跳板机)
执行如下命令,查看本地1153 端口是否已经连接
netstat -tulnp | grep "1153"
执行如下命令,在本地系统中访问VPS的1153端口,即访问数据库服务器1.1.1.200的3389端口
rdesktop 127.0.0.1:1153
SSH进程的本地端口映射可以将本地(客户机)的某个端口转发到远端指定机器的指定端口;本地端口转发则是在本地(客户机)监听一个端口,所有访问这个端口的数据都会通过SSH隧道传输到远端的对应端口。
测试环境与前面相同

以Web服务器为跳板,将 VPS 的3307端口的流量转发到1.1.1.200的3389 端口,然后访问VPS的3307端口,就可以访问1.1.1.200的3389端口了。
在Web服务器1.1.1.116上执行如下命令
ssh -CfNg -R 3307(VPS端口):1.1.1.200(目标主机):3389(日标端口) root@192.168.1.4
执行如下命令,在本地系统中访问VPS的3307端口,即访问数据库服务器1.1.1.200的3389端口
rdesktop 127.0.0.1:3307
本地转发是将远程主机(服务器)某个端口的数据转发到本地机器的指定端口;远程端口转发则是在远程主机上监听一个端口,所有访问远程服务器指定端口的数据都会通过SSH隧道传输到本地的对应端口
测试环境拓扑图

在VPS上执行如下命令,建立一个动态的 SOCKS 4/5代理通道,需要输人 Web服务器的密码
ssh -CfNg -D 7000 root@192.168.1.1
接下来,在本地打开浏览器,设置网络代理,127.0.0.1:7000,通过浏览器访回内网域控制器1.1.1.2,可以查看本地7000端口是否已经连接,同时可以看到,在使用动态映射时,本地主机的SSH进程正在监听7000端口
动态端口映射就是建立一个SSH加密的SOCKS4/5代理通道,任何支持SOCKS 4/5协议的程序都可以使用这个加密通道进行代理访问。
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我尝试使用不同的ssh_options在同一阶段运行capistranov.3任务。我的production.rb说:set:stage,:productionset:user,'deploy'set:ssh_options,{user:'deploy'}通过此配置,capistrano与用户deploy连接,这对于其余的任务是正确的。但是我需要将它连接到服务器中配置良好的an_other_user以完成一项特定任务。然后我的食谱说:...taskswithoriginaluser...task:my_task_with_an_other_userdoset:user,'an_othe
在previousquestion中我想出了如何在多个服务器上启动经过密码验证的sshsession来运行单个命令。现在我需要能够执行“sudo”命令。问题是,net-ssh-multi没有分配sudo需要运行的伪终端(pty),导致以下错误:[127.0.0.1:stderr]sudo:sorry,youmusthaveattytorunsudo根据documentation,可以通过调用channel对象的方法来分配伪终端,但是,以下代码不起作用:它会生成上面的“notty”错误:require'net/ssh'require'net/ssh/multi'Net::SSH::Mul
电脑上可以截取图片吗?如果可以,该如何操作呢?相信很多小伙伴都只知道一两种截图的方式,知道的并不全面。其实,电脑上有多种方式截图的,而且非常方便。电脑怎么截图?今天我们就来教大家如何使用电脑截取图片的8种常用方式!操作环境:演示机型:Delloptiplex7050系统版本:Windows10方法一:系统自带截图具体操作:同时按下电脑的自带截图键【Windows+shift+S】,可以选择其中一种方式来截取图片:截屏有矩形截屏、任意形状截屏、窗口截屏和全屏截图。 方法二:QQ截图具体操作:在电脑登录QQ,然后同时按下【Ctrl+Alt+A】,可以任意截图你需要的界面,可以把截图的页面直接下载,
Linux操作系统——网络配置与SSH远程安装完VMware与系统后,需要进行网络配置。第一个目标为进行SSH连接,可以从本机到VMware进行文件传送,首先需要进行网络配置。1.下载远程软件首先需要先下载安装一款远程软件:FinalShell或者xhell7FinalShellxhell7FinalShell下载:Windows下载http://www.hostbuf.com/downloads/finalshell_install.exemacOS下载http://www.hostbuf.com/downloads/finalshell_install.pkg2.配置CentOS网络安装好
我一直在尝试使用Thor编写一个小型库,以帮助我快速创建新项目和站点。我写了这个小方法:defssh(cmd)Net::SSH.start(server_ip,user,:port=>port)do|session|session.execcmdendend只是协助我在需要时在远程服务器上运行快速命令。问题是当我需要在远程端的sudo下运行命令时,脚本似乎卡在我身上。例如当执行这个...ssh("sudocp#{file_from_path}#{file_to_path}")脚本会提示我输入密码[sudo]passwordforuser:但是在输入之后整个事情就挂起。有人会碰巧知道它为
我正在尝试弄清楚如何在Ruby中的sudosu-#{su_user}之后发送多个net-ssh命令链。我当前的代码在下面,并且挂起sudosu命令,即使在send_data"#{password}\n"之后也是如此。同时,在系统上,手动执行sudosu-admin2不需要输入密码。如有任何帮助,我们将不胜感激!require'rubygems'require'net/ssh'host='hostA'user='admin'password='hostA_pwd'su_user='Admin2'Net::SSH.start(host,user,:password=>password)do
1.Scenes游戏场景文件夹用于放置unity的场景文件 2.Plugins插件文件夹用于放置unity的依赖文件,例如dll 3.Scripts脚本文件夹用于放置unity的c#脚本文件 4.Resources游戏资源文件夹用于放置unity的各种游戏资源,比如images,prefabs,同时只有放到Resources文件夹的游戏资源才能使用Resource.load(资源路径不加后缀)加载到游戏内存中进行使用 5.EditorUnity编辑器扩展脚本文件夹usingUnityEditor;这个名称空间就是Unity编辑器的名称空间这个名称空间提供了扩展Unity编辑器的各种类 【你所有
有什么方法可以使用net-ssh在ruby中获取登录shell?这可能吗?我所说的登录shell是指源/etc/profile.. 最佳答案 Net-SSH级别太低,无法简单地预先提供(无论如何,现在是这样)。您可以查看基于Net-SSH构建的Net-SSH-Shell以添加登录shell功能:https://github.com/mitchellh/net-ssh-shell该实现可靠且有效,但我发现它不太有用,因为您无法专门提取诸如stderr或退出状态之类的内容,因为这些命令在子shell中运行,因此您只能获取stdout
我已经阅读了net-ssh文档,但我仍然感到困惑。我可以手动进行身份验证(使用ssh-i...),也可以将key放在文件中并使用:keys参数。但是,我不想使用:keys参数,我想使用:key_data参数。任何人都可以举一个工作的例子吗?出于某种原因,直接将字符串输入:key_data是行不通的,它给出了错误:“既不是PUBkey也不是PRIVkey::嵌套的asn1错误”。当然,我用谷歌搜索了一下,它基本上告诉我要确保key是PEM格式。而且,当然是。有任何想法吗?如果需要,我可以提供更详细的信息... 最佳答案 我看到这个问题