请教如何用ssh连接远程服务器
目前,远程连接服务器的类型有以下几种:
① 文字接口的明文传输:Telnet、RSH为主,很少用到。
② 文字接口的加密传输:以SSH为主,已经取代了上面的明文传输方式。
③ 图形接口:XDMCP、VNC、XRDP等较为常见。
这篇文章只为实战,不为普及概念性知识。所以我只讲解在工作中最常用到的技术SSH。关于SFTP技术和VNC技术,请查阅我的其他博客。
好,先来看一下SSH的相关技术:
SSH,英文全程是Secure Shell Protocol(安全的壳程序协议)。SSH是现在公司基本上都在使用的一种文字接口的加密传输技术,采用的是非对称秘钥系统。
对于SSH的原理,你们可以参考我的另外一篇博客,我把链接贴在这里:
SSH原理
⑴来吧,我们先来查看一下sshd这个服务(这就是SSH的远程连接必须开启的服务,属于系统自带),注意,一般这个sshd服务是默认自动开启的。
如果想要重启怎么办呢?
好吧,请看:
上面两种重启动的方法都是可以滴!
⑵直接远程登录主机的命令:
ssh -f -o 参数 -p 非标准端口 账号@IP 命令
其中:
-f : 需要配合后面的命令,不登录远程主机直接发送一个命令过去
-o 参数 : 主要的参数有:
ConnectTimeout=秒数 : 连接等待的秒数,减少等待的时间。
StrictHostKeyChecking=yes|no|ask:默认是ask,若要让public key主动加入到known_hosts, 则可以设置为no即可。
-p : 如果sshd服务启动在非标准端口下,需使用此参数。
举例说明吧:
① 直接登录到对方主机:
如果是以root用户登录到对方主机,有如下两种登录方式:
注意:如果是普通用户登录,必须使用第二种加@的方式。
② 实现登录对方主机,执行命令后就离开的方式。例如:从远程主机上执行cat /etc/passwd命令把文件显示在本地主机上。
③ 不登录对方主机,让对方主机自己运行该命令,你立刻回到本地机器继续工作:
④ 删除known_hosts后,重新使用root连接到本机,会自动加上公钥记录
你一定会说,大骗子玩漏了吧?怎么没有自动加上公钥记录呢?怎么记录信息提示手机选择yes/no了呢?别着急,我们的“-o”参数要横空出世了!有了-o,再也不用选择yes|no了,而是自动被选择了yes而加入到~/ssh/known_hosts中。
看到了,这次没有提示让选择yes|no吧!
⑤ SSHD服务器详细配置
Centos默认的SSHD服务其实已经算是很安全了,这里注意Centos 5X之后默认SSH协议版本都是V2也就是上图的Protocol 2,默认端口是 22,注意这些还不够,如果是真正工作中的服务器,建议取消root的登录权限:
把红框中的yes改为no就可以取消root用户的登录权限了。
下面来介绍一个很有用的技术,制作不用密码可立即登录的SSH用户。有人会说制作这个是用来干嘛的?你想一想,如果想要利用crontab来定时执行备份或者拷贝的任务,因为每次SSH连接都要输入对方主机密码,这是在crontab中无法执行的,那么怎么办?只有不需要输入密码才可以操作。
方法如下:
① 客户端建立两把钥匙
我们在客户端创建一个用户user1操作,利用user1来远程服务器端的user2用户。下面我们以1921681118为客户端,以1921681121为服务端。
首先在客户端建立两把秘钥
命令如下:
需要注意:
⑴ ~/ssh目录的权限必须是700
⑵ id_rsa(私钥文件)的权限必须是-rw——-,且属主必须是当前登录用户,否则在未来秘钥比对的过程中,可能会被判断为危险而无法成功的以公私钥成对的机制来实现连接。
以上两点一般情况下默认都是正确的。
② 将公钥文件数据上传至服务器端
③ 将公钥文件放置到服务器端的正确目录中,并保证文件名正确
一定要把公钥文件内容附加到authorized_keys这个文件内,操作用户为服务器端用户
注意:切记authorized_keys这个文件的权限必须是644
1、运行环境
WINDOWS下安装SSH客户端,名字是SSHSecureShellClient-329exe,可以到http://wwwsshcom/下载,当然了,在SERVER端我们也可以安装Openssh,但此文章着重介绍的是ssh的技术,所以我们使用的是http://wwwsshcom/ for UNIX/LINUX 的SERVER 端,现在最新版本是ssh-329-1i386rpm(如果你是AIX或者SOLARIS,要下不同的版本,这里以RHCE3为例子)。确定把UNIX类主机的默认的Openssh全部卸载掉后安装ssh-329-1i386rpm。
2、为什么要公私钥认证方法(连接到主机不输入密码)
我们需要知道Publick Key是指公钥,而private key是指私钥。认证的过程是这样的:public key对数据进行加密而且只能用于加密,private key只能对所匹配的public key加密过的数据进行解密。我们把public key放在远程系统合适的位置,然后从本地开始进行ssh连接。此时,远程的sshd会产生一个随机数并用我们产生的public key进行加密后发给本地,本地会用private key进行解密并把这个随机数发回给远程系统。最后,远程系统的sshd会得出结论——我们拥有匹配的private key允许我们登录。就这么简单!
3、在本机生成密钥过程
WINDOWS下寻找ssh-keygen2exe文件,这是生成密钥的文件,我的在C:/Program Files/SSH Communications Security/SSH Secure Shell,在DOS下执行这个文件,方法是
C:/Program Files/SSH Communications Security/SSH Secure Shell ssh-keygen2 -t rsa
我用的是rsa的密钥,默认是2048位,足够我们用的了,还可以使用dsa方式的密钥。我就不在这里说明了
系统自动生成密钥对,默认放在C:/Documents and Settings/XXX/Application Data/SSH/UserKeys目录下,其中XXX是你执行程序时用的帐户,默认名称是id_rsa_2048_a和id_rsa_2048_apub,而后者就是我们要传到服务器上的公钥。(生成密钥对的同时让你输入一个密码,因为我们想不输入密码直接登陆服务器,所以就直接回车了,但如果你想更安全一些,还是建议你在这里也输入密码。)
4、用SSH客户端从本机登陆到远程UNIX类服务器上
我们还按以前的方法登陆到远程UNIX类服务器上,这样登陆后我们会在用户目录下,PWD一下,你可以看到你的用户目录路径,比如我的就是/home/test,那么好了,我们建立一个ssh2的文件夹,在里面建立一个文件,authorization,内容如下:
key id_rsa_2048_apub
然后把你WINDOWS客户端上的id_rsa_2048_apub上传到你在UNIX类服务器上刚建立好的ssh2文件夹下,关闭SSH客户端。
5、用SSH客户端公钥认证状态登陆
重新启动SSH客户端,在登陆认证状态栏选择Public Key方式,登陆到你刚才放id_rsa_2048_apub的那台服务器,你会发现你马上就登陆进来了,没有密码限制了。这个时候用公私钥认证和用密码认证同时存在,还没有达到我们的要求,那我们就在UNIX类服务器上修改/etc/ssh2/sshd2_config文件
把以下如下三行的password 删除,下面这三行是修改好的
AllowedAuthentications publickey
AllowedAuthentications hostbased,publickey
RequiredAuthentications publickey
这样当你再用密码登陆的时候就出现如下对话框了!!
第二章 SSH客户端之Putty的连接方法
1、运行环境
WINDOWS下安装的SSH客户端,名字是putty-056-installerexe,可以到如下地址下载:
http://wwwchiarkgreenendorguk/~sgtatham/putty/downloadhtml,这个安装包是所有工具的集合,其实如果只做为连接用,你可以只下putty056exe的。但我们这里因为要做密钥对,所以就下整个包安装吧。
2、在本机生成密钥过程
用putty套装的puttygen来产生密钥。密钥的类型选择SSH2 RSA。密钥的位数选择2048,然后点击"Generator",此时密钥生成当然也有几个选项出现。如果你有不止一个key,你可以在“Key comment”作注释用于区别其他的key。“Key passphrase“和“Confirm passphrase“用于对硬盘上的key进行加密,如过你自己一个人用机器觉得安全有保障的话可以让它们为空。然后保存两个key,用默认方式保存,那么公钥你可以指定文件名,私钥默认的文件扩展名是ppk。在这里我们命名它为testppk,而公钥我们保存为testpub,需要注意的是,如果用putty连接,私钥的扩展名必须是ppk,而且你还可以将这个ppk的私钥保存为SSH Secure Shell 格式和Openssh格式认知的私钥,这个对两个UNIX类主机之间相互通信提供了很大帮助。(我们以后会将两个UNIX类主机通过公私钥认证的方法给大家讲讲)
4、用Putty从本机登陆到远程UNIX类服务器上
我们还按先前的方法登陆到远程UNIX类服务器上,这样登陆后我们会在用户目录下,PWD一下,你可以看到你的用户目录路径,比如我的就是/home/test,那么好了,我们建立一个ssh2的文件夹,在里面建立一个文件,authorization,内容如下:
key testpub
然后把你WINDOWS客户端上的testpub上传到你在UNIX类服务器上刚建立好的ssh2文件夹下,关闭Putty。这个上传命令你可以用 put ,下载就用get。你的通道可以用PSFTP建立,这个也在PUTTY的组件中。
5、用SSH客户端公钥认证状态登陆
重新启动Putty,建立一个session命名为test,设定你要登陆的远程ip,协议设为ssh,Connection设定在ssh的auth选项中,将private key的文件选择为刚才我们由puttygen产生的密钥testppk。点Open,要求输入username,我们输入用户名后远程系统开始public key认证,如果密钥有passphrase 则需要输入,否则直接就登录了。这个时候用公私钥认证和用密码认证同时存在,还没有达到我们的要求,那我们就在UNIX类服务器上修改/etc/ssh2/sshd2_config文件
把以下如下三行的password 删除,下面这三行是修改好的
AllowedAuthentications publickey
AllowedAuthentications hostbased,publickey
RequiredAuthentications publickey
这样当你再用密码登陆的时候就出现如下对话框了!!
第三章
Ssh服务器端安装
1、环境:
因为我们选用的SSH服务器是http://wwwsshcom 的SSH Secure Shell for unix类产品,所以我们主要介绍一下此类的Ssh服务器的安装过程。(SSH有两个版本,我们现在介绍的是版本2;Openssh就不介绍了,大家有兴趣的话可以参考一下网上文章)
2、编译安装
我们前面介绍过,现在的Ssh server for unix 类的最新版本是ssh-329-1,我建议大家用官方提供的TAR包,当然,如果你不熟悉编译过程,用RPM等安装方式也是可以的。如果用RPM安装,请先下载ssh-329-1i386rpm , 大家可以到以下地址下载:
http://ftpsshcom/priv/secureshell/329wks+srv-lt49ldrk/linux/ssh-329-1i386rpm
安装时请用管理员权限
# rpm –ivh ssh-329-1i386rpm 如果是升级安装那参数就用 –Uvh
而329-1的TAR包大家可以到http://downloadsplanetmirrorcom/pub/ssh/ssh-3291targz下载。安装时也使用管理员权限:
# tar xzvf ssh-3291targz
# cd ssh-3291
# /configure (这里我们要说明一下,原来有些文档写如果你希望用tcp_wrappers来控制SSH,那么在configure时需要加上选项“--with-libwrap=/path/to/libwrap/”, 用来告诉SSH关于libwrapa 和tcpdh的位置,但320以上的SSH已经不需要这么麻烦了,它们已经内置了控制访问权限的功能。)
# make ; make install ; make clean
这样就结束了安装。
3、简单配置Ssh server
无论你是用RPM或TAR包安装的ssh server,它的配置文件都在/etc/ssh2/sshd2_config,安装完后一般不用配置它,但如果你的22端口在安装ssh server之前已经被其他程序占用,那么你需要简单的配置一下这个文件,执行 vi /etc/ssh2/sshd2_config,找到第27行,Port 22 ,把22改成其他的端口就可以了。
4、启动Ssh server
Ssh server 的默认启动文件是/usr/local/sbin/sshd2,而安装程序自动做了一个连接到这个文件的名字为sshd的文件,我们只要在/usr/local/sbin/目录中执行 /sshd 就可以简单的启用Ssh server,然后我们执行 # netstat –na 会看见22端口已经被监听了(你的可能是其他端口,具体看你在sshd2_config文件中的设置了。)但我们不想每次都要手动启动Ssh server,那么我们可以修改一下/etc/rcd/rclocal文件,在这个文件的最后加入以下内容:
#start ssh
/usr/local/sbin/sshd
其中第一行为注释内容,第二行为启动SSH服务器并作为后台守护进程运行。
这样就好了,系统重起时可以自动启动SSH服务,但是启动后你如果在服务器端插上显示器,会在最后该登陆的时候看到一行字,意思就是Ssh server 服务启动了,我比较挑剔,不想看到这个提示,而且我想把Ssh服务放到LINUX服务启动过程中,这样比较美观一点。那么我们就不能修改/etc/rcd/rclocal文件,我们要进入/etc/initd/中建立一个SHELL文件,名字就叫sshd 内容如下:
#!/bin/bash
cd /usr/local/sbin
/sshd
然后给这个文件加上可执行权限
# chmod +x sshd
然后进入/etc/rc3d,做一个软链接文件
# cd /etc/rc3d
# ln -s /initd/sshd S13sshd
这样就达到了我的要求,好了,Ssh server的安装就介绍到这里吧,安装是很简单的,希望大家编译安装成功。
方法有两种比如:
第一种:IIS中关闭目录浏览功能:在IIS的网站属性中,勾去“目录浏览”选项,重启IIS;
第二种:Apache中关闭目录浏览功能:
打开Apache配置文件httpdconf。查找 “Options Indexes FollowSymLinks”,修改为“ Options -Indexes”(减号表示取消),保存退出,重启Apache。
效果: pingsh代码: #ssh连接服务器 function getConnection() { ssh -o NumberOfPasswordPrompts=0 $1@$2 "pwd" &>/dev/null if [ $ != 0 ];then echo -e "
无法连接到$2" continue else echo -e "
成功连接$2" fi } #这里可以通过读取文linux服务器上通过脚本判断ssh服务是否正常
《metasploit渗透测试指南》
第1章 渗透测试技术基础 1
11 ptes标准中的渗透测试阶段 2
111 前期交互阶段 2
112 情报搜集阶段 2
113 威胁建模阶段 2
114 漏洞分析阶段 3
115 渗透攻击阶段 3
116 后渗透攻击阶段 3
117 报告阶段 4
12 渗透测试类型 4
121 白盒测试 5
122 黑盒测试 5
13 漏洞扫描器 5
14 小结 6
第2章 metasploit基础 7
21 专业术语 7
211 渗透攻击(exploit) 8
212 攻击载荷(payload) 8
213 shellcode 8
214 模块(module) 8
215 监听器(listener) 8
22 metasploit用户接口 8
221 msf终端 9
222 msf命令行 9
223 armitage 11
23 metasploit功能程序 12
231 msf攻击载荷生成器 12
232 msf编码器 13
233 nasm shell 13
24 metasploit express和metasploit pro 14
25 小结 14
第3章 情报搜集 15
31 被动信息搜集 16
311 whois查询 16
312 netcraft 17
313 nslookup 18
32 主动信息搜集 18
321 使用nmap进行端口扫描 18
322 在metasploit中使用数据库 20
323 使用metasploit进行端口扫描 25
33 针对性扫描 26
331 服务器消息块协议扫描 26
332 搜寻配置不当的microsoft sql server 27
333 ssh服务器扫描 28
334 ftp扫描 29
335 简单网管协议扫描 30
34 编写自己的扫描器 31
35 小结 33
第4章 漏洞扫描 35
41 基本的漏洞扫描 36
42 使用nexpose进行扫描 37
421 配置 37
422 将扫描报告导入到metasploit中 42
423 在msf控制台中运行nexpose 43
43 使用nessus进行扫描 44
431 配置nessus 44
432 创建nessus扫描策略 45
433 执行nessus扫描 47
434 nessus报告 47
435 将扫描结果导入metasploit框架中 48
436 在metasploit内部使用nessus进行扫描 49
44 专用漏洞扫描器 51
441 验证smb登录 51
442 扫描开放的vnc空口令 52
443 扫描开放的x11服务器 54
45 利用扫描结果进行自动化攻击 56
第5章 渗透攻击之旅 57
51 渗透攻击基础 58
511 msf] show exploits 58
512 msf] show auxiliary 58
513 msf] show options 58
514 msf] show payloads 60
515 msf] show targets 62
516 info 63
517 set和unset 63
518 setg和unsetg 64
519 save 64
52 你的第一次渗透攻击 64
53 攻击一台ubuntu主机 68
54 全端口攻击载荷:暴力猜解目标开放的端口 71
55 资源文件 72
56 小结 73
第6章 meterpreter 75
61 攻陷windows xp 虚拟机 76
611 使用nmap扫描端口 76
612 攻击ms sql 76
613 暴力破解ms sql服务器 78
614 xp_cmdshell 79
615 meterpreter基本命令 80
616 获取键盘记录 81
62 挖掘用户名和密码 82
621 提取密码哈希值 82
622 使用meterpreter命令获取密码哈希值 83
63 传递哈希值 84
64 权限提升 85
65 令牌假冒 87
66 使用ps 87
67 通过跳板攻击其他机器 89
68 使用meterpreter脚本 92
681 迁移进程 92
682 关闭杀毒软件 93
683 获取系统密码哈希值 93
684 查看目标机上的所有流量 93
685 攫取系统信息 93
686 控制持久化 94
69 向后渗透攻击模块转变 95
610 将命令行shell升级为meterpreter 95
611 通过附加的railgun组件操作windows api 97
612 小结 97
第7章 免杀技术 99
71 使用msf攻击载荷生成器创建可独立运行的二进制文件 100
72 躲避杀毒软件的检测 101
721 使用msf编码器 102
722 多重编码 103
73 自定义可执行文件模板 105
74 隐秘地启动一个攻击载荷 106
75 加壳软件 107
76 小结:关于免杀处理的最后忠告 108
第8章 客户端渗透攻击 109
81 基于浏览器的渗透攻击 110
811 基于浏览器的渗透攻击原理 111
812 空指令 112
82 使用immunity调试器来揭秘空指令机器码 112
83 对ie浏览器的极光漏洞进行渗透利用 116
84 文件格式漏洞渗透攻击 119
85 发送攻击负载 120
86 小结 121
第9章 metasploit辅助模块 123
91 使用辅助模块 126
92 辅助模块剖析 128
93 小结 133
第10章 社会工程学工具包 135
101 配置set工具包 136
102 针对性钓鱼攻击向量 137
103 web攻击向量 142
1031 java applet 142
1032 客户端web攻击 146
1033 用户名和密码获取 148
1034 标签页劫持攻击 150
1035 中间人攻击 150
1036 网页劫持 151
1037 综合多重攻击方法 153
104 传染性媒体生成器 157
105 teensy usb hid攻击向量 157
106 set的其他特性 160
107 小结 161
第11章 fast-track 163
111 microsoft sql注入 164
1111 sql注入——查询语句攻击 165
1112 sql注入——post参数攻击 166
1113 手工注入 167
1114 ms sql破解 168
1115 通过sql自动获得控制(sqlpwnage) 172
112 二进制到十六进制转换器 174
113 大规模客户端攻击 175
114 小结:对自动化渗透的一点看法 176
第12章 karmetasploit无线攻击套件 177
121 配置 178
122 开始攻击 179
123 获取凭证 181
124 得到shell 182
125 小结 184
第13章 编写你自己的模块 185
131 在ms sql上进行命令执行 186
132 探索一个已存在的metasploit模块 187
133 编写一个新的模块 189
1331 powershell 189
1332 运行shell渗透攻击 190
1333 编写powershell_upload_exec函数 192
1334 从十六进制转换回二进制程序 192
1335 计数器 194
1336 运行渗透攻击模块 195
134 小结:代码重用的能量 196
第14章 创建你自己的渗透攻击模块 197
141 fuzz测试的艺术 198
142 控制结构化异常处理链 201
143 绕过seh限制 204
144 获取返回地址 206
145 坏字符和远程代码执行 210
146 小结 213
第15章 将渗透代码移植到metasploit框架 215
151 汇编语言基础 216
1511 eip和esp寄存器 216
1512 jmp指令集 216
1513 空指令和空指令滑行区 216
152 移植一个缓冲区溢出攻击代码 216
1521 裁剪一个已有的渗透攻击代码 218
1522 构造渗透攻击过程 219
1523 测试我们的基础渗透代码 220
1524 实现框架中的特性 221
1525 增加随机化 222
1526 消除空指令滑行区 223
1527 去除伪造的shellcode 223
1528 我们完整的模块代码 224
153 seh覆盖渗透代码 226
154 小结 233
第16章 meterpreter脚本编程 235
161 meterpreter脚本编程基础 235
162 meterpreter api 241
1621 打印输出 241
1622 基本api调用 242
1623 meterpreter mixins 242
163 编写meterpreter脚本的规则 244
164 创建自己的meterpreter脚本 244
165 小结 250
第17章 一次模拟的渗透测试过程 251
171 前期交互 252
172 情报搜集 252
173 威胁建模 253
174 渗透攻击 255
175 msf终端中的渗透攻击过程 255
176 后渗透攻击 257
1761 扫描metasploitable靶机 258
1762 识别存有漏洞的服务 259
177 攻击apache tomcat 260
178 攻击一个偏门的服务 262
179 隐藏你的踪迹 264
1710 小结 266
附录a 配置目标机器 267
附录b 命令参考列表 275
0条评论