SSH服务.docx
《SSH服务.docx》由会员分享,可在线阅读,更多相关《SSH服务.docx(16页珍藏版)》请在冰点文库上搜索。
SSH服务
7.2任务一:
建立SSH服务(田钧)
7.2.1SSH协议简介
SSH的英文全称为SecureShell,是IETF(InternetEngineeringTaskForce)的NetworkWorkingGroup所制定的一族协议,其目的是要在非安全网络上提供安全的远程登录和其他安全网络服务。
可以简单理解为:
Rlogin和Telnet等的替代方案。
SSH协议在预设状态中提供两个服务器功能:
●类似telnet的远程联机使用shell的服务器,即ssh;
●类似FTP服务的sftp-server,提供更安全的FTP服务。
1.SSH基本框架
SSH协议框架中最主要的部分是三个协议:
传输层协议、用户认证协议和连接协议。
同时SSH协议框架中还为许多高层的网络安全应用协议提供扩展的支持。
它们之间的层次关系可以用如下图7-1来表示:
图7-1SSH协议的层次结构示意图
在SSH的协议框架中,传输层协议(TheTransportLayerProtocol)提供服务器认证,数据机密性,信息完整性等的支持;用户认证协议(TheUserAuthenticationProtocol)则为服务器提供客户端的身份鉴别;连接协议(TheConnectionProtocol)将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用;各种高层应用协议可以相对地独立于SSH基本体系之外,并依靠这个基本框架,通过连接协议使用SSH的安全机制。
SSH的安全验证是如何工作的
从客户端来看,SSH提供两种级别的安全验证。
第一种级别(基于口令的安全验证)
只要你知道自己帐号和口令,就可以登录到远程主机。
所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。
可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。
第二种级别(基于密匙的安全验证)
需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。
如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。
服务器收到请求之后,先在你在该服务器的家目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。
如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。
客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。
用这种方式,你必须知道自己密匙的口令。
但是,与第一种级别相比,第二种级别不需要在网络上传送口令。
第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。
但是整个登录的过程需要的时间稍微较长。
2SSH数据加密方式
网络封包的加密技术通常由“一对公钥与私钥”(即“PublicandPrivatekeys”)进行加密与解密的操作。
主机端要传给客户端(client)的数据先由公钥加密,然后才在网络上传输。
到达客户端后,再由私钥将加密的资料解密。
经过公钥(publickkey)加密的数据在传输过程中,由于数据本身经过加密,即使这些数据在途中被截取,要破解这些加密的数据,需要花费好长一段时间。
3.SSH版本
SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:
1.x和2.x。
用SSH2.x的客户程序是不能连接到SSH1.x的服务程序上去的。
OpenSSH2.x同时支持SSH1.x和2.x。
SSHprotocolversion1
每一部SSH服务器主机都可以用RSA加密方式产生一个1024-bit的RSAKey,这个RSA的加密方式主要用来产生公钥与私钥的演算方法。
version1的整个联机加密步骤:
当每次SSHdaemon(sshd)启动时,产生768-bit的公钥(或称为serverkey)存放在Server中;若有客户端的ssh联机需求传送来时,Server将这公钥传给客户端。
此时,客户端比对该公钥的正确性。
比对的方法是利用/etc/ssh/ssh_known_hosts或~/.ssh/known_hosts档案内容。
在客户端接受该768-bit的serverkey后,客户端随机产生256-bit的私钥(hostkey),并且以加密方式将serverkey与hostkey整合成完整的Key,并将该Key传送给server;
Server与客户端在本次联机中以该1024-bit的Key进行数据的传递。
由于客户端每次256-bit的Key是随机取的,因而本次联机与下次联机的Key可能不一样。
SSHprotocolversion2
SSHversion1的联机中,Server单纯的接受来自客户端的privatekey,如果在联机过程中privatekey被取得后,cracker就可能在既有的联机当中插入一些攻击码,使得联机发生问题。
为了改进这个缺点,在SSHversion2中,SSHserver不再重复产生serverkey,而是在与客户端建立privatekey时,利用Diffie-Hellman的演算方式,共同确认来建立privatekey,然后将该privatekey与publickey组成一组加解密的金钥。
同样,这组金钥也仅是在本次的联机中有效。
透过这个机制可见,由于server/client两者之间共同建立了privatekey,若privatekey落入别人手中,由于server端还会确认联机的一致性,使cracker没有机会插入有问题的攻击码。
即sshversion2是比较安全的。
7.2.2SSH常用操作
1.启动SSH服务
Linux系统中,预设含有SSH的所有需要的套件,包含可以产生密码等协议的OpenSSL套件与OpenSSH套件,直接启动即可使用。
以SSHdaemon(简称sshd)手动启动的步骤如下:
[root@localhost~]#/etc/init.d/sshdrestart
[root@localhost~]#netstat-tlp
ActiveInternetconnections(onlyservers)
ProtoRecv-QSend-QLocalAddressForeignAddressStatePID/Programname
tcp00*:
ssh*:
*LISTEN24
启动后,利用netstat查阅sshd程序是否正确的在LISTEN即可。
这时,SSH服务器设定值均是系统默认值,能否仅用较安全的version2,需要进一步的设定。
如果想在开机即启动SSH,用chkconfig设定开机启动即可。
[root@localhost~]#chkconfigsshdon
2.ssh客户端联机
⑴LinuxClient:
ssh
SSH在客户端使用ssh指令,该指令可以指定联机的版本(version1或version2),还可以指定非正规的sshport(正规sshport为22)。
一般的用法:
①直接登入到对方主机:
[root@localhost~]#sshaccount@hostname
#范例:
#连接到我们自己本机上面的ssh服务
[root@localhost~]#sshdmtsai@localhost
Theauthenticityofhost'localhost(127.0.0.1)'can'tbeestablished.
RSAkeyfingerprintisf8:
ae:
67:
0e:
f0:
e0:
3e:
bb:
d9:
88:
1e:
c9:
2e:
62:
22:
72.
Areyousureyouwanttocontinueconnecting(yes/no)?
yes
#务必填入完整的"yes"而不是Y或y而已。
Warning:
Permanentlyadded'localhost'(RSA)tothelistofknownhosts.
dmtsai@localhost'spassword:
Lastlogin:
FriJul114:
23:
272005fromlocalhost.localdomain
[dmtsai@linux~]$
[dmtsai@linux~]$exit<==输入exit就能够离开对方主机
②不登入对方主机,直接在对方主机执行指令:
[root@localhost~]#sshdmtsai@localhostdate
dmtsai@localhost'spassword:
TueNov2211:
57:
27CST2005
[root@localhost~]#
[root@localhost~]#vi~/.ssh/known_hosts
localhostssh-rsaAAAAB3NzaC1yc2Euowireffodjoiwjefmoeiwhoqhwupoi
t[egmlomowimvoiweo6VpTHTw2/tENp4U7Wn8J6nxYWP36YziFgxtWu4MPSKaRmr
E4eUpR1G/zV3TkChRZY5hGUybAreupTVdxCZvJlYvNiejfijoejwiojfijeoiwx5
eRkzvSj7a19vELZ5f8XhzH62E=
7.2.3SSH项目配置
任务1.配置SSH服务,提供本地用户远程SSH口令登录。
[系统及软件环境]
1.操作系统:
RedHatAS5.0
2.本机服务IP地址:
10.1.6.250/24
3.服务器软件包:
1)openssh-4.3p2-16.el5
2)openssh-askpass-4.3p2-16.el5
3)openssh-clients-4.3p2-16.el5
4)openssh-server-4.3p2-16.el5
[实验配置文件及命令]
1./etc/ssh/sshd_config
[操作步骤]
1.·查看ssh服务器包是否安装。
[root@localhostssh]#rpm-qa|grepssh
openssh-4.3p2-16.el5
openssh-askpass-4.3p2-16.el5
openssh-clients-4.3p2-16.el5
openssh-server-4.3p2-16.el5
2.安装ssh服务器软件包。
(首先需要进入到所在软件包目录)
[root@localhostRPMS]#rpm-ivhopenssh-*--aid--force
warning:
openssh-3.9p1-8.RHEL4.1.i386.rpm:
V3DSAsignature:
NOKEY,keyIDdb42a60e
Preparing...############################################[100%]
1:
openssh#############################################[20%]
2:
openssh-askpass#############################################[40%]
3:
openssh-askpass-gnome#########################################[60%]
4:
openssh-clients##############################################[80%]
5:
openssh-server##############################################[100%]
3.修改/etc/ssh/sshd_config。
(1)默认设置的/etc/ssh/sshd_config文件(其中#号注释掉的内容未显示)
[root@localhostssh]#grep-v"#"/etc/ssh/sshd_config
SyslogFacilityAUTHPRIV
PasswordAuthenticationyes
ChallengeResponseAuthenticationno
GSSAPIAuthenticationyes
GSSAPICleanupCredentialsyes
UsePAMyes
X11Forwardingyes
Subsystemsftp/usr/libexec/openssh/sftp-server
(2)按要求修改后的/etc/ssh/sshd_config文件(修改处用黑体标明)。
Port22//默认为22(如果需要,可以进行修改服务端口号,比如:
4444)
Protocol2//只允许ssh2协议工作,提高安全性
SyslogFacilityAUTHPRIV
PermitRootLoginyes//如果不允许root用户远端登录,则改为no
PasswordAuthenticationyes
ChallengeResponseAuthenticationno
GSSAPIAuthenticationyes
GSSAPICleanupCredentialsyes
UsePAMyes
X11Forwardingyes
MaxStartups10#将准备连接的最大允许数设为10,防止拒绝服务攻击
Subsystemsftp/usr/libexec/openssh/sftp-server
4.重启ssh服务,并测试是否启动成功。
root@localhost~]#servicesshdrestart//或者用/etc/rc.d/init.d/sshdrestart
启动sshd[确定]
停止sshd[确定]
[root@localhost~]#sshsupsun@10.1.6.250//如果需要指定端口号4444,则加–p4444
Theauthenticityofhost'10.1.6.250(10.1.6.250)'can'tbeestablished.
RSAkeyfingerprintisef:
e0:
6a:
28:
7c:
f6:
14:
b6:
fa:
56:
66:
1f:
7f:
91:
42:
1c.
Areyousureyouwanttocontinueconnecting(yes/no)?
yes
Warning:
Permanentlyadded'10.1.6.250'(RSA)tothelistofknownhosts.
supsun@10.1.6.250'spassword:
Lastlogin:
SunAug109:
07:
052010from10.1.6.238
[supsun@localhost~]$
任务2.配置SSH服务,提供基于密匙的登录,要求RSA加密算法进行加密,不需要输入密匙即可实现远程登录。
[操作步骤]
//说明:
本任务是在(任务1)的基础上进行配置。
1.生成需要登录的用户
[root@localhost~]#useraddtestuser
[root@localhost~]#passwdtestuser
Changingpasswordforusertestuser.
NewUNIXpassword:
//输入密码123456
BADPASSWORD:
itistoosimplistic/systematic
RetypenewUNIXpassword:
//输入密码123456
passwd:
allauthenticationtokensupdatedsuccessfully.
[root@localhost~]#
2.生成用户密匙对
[root@localhost~]#ssh-keygen-trsa
Generatingpublic/privatersakeypair.
Enterfileinwhichtosavethekey(/root/.ssh/id_rsa):
//此处直接回车
Enterpassphrase(emptyfornopassphrase):
Entersamepassphraseagain:
//此处直接回车
Youridentificationhasbeensavedin/root/.ssh/id_rsa.
Yourpublickeyhasbeensavedin/root/.ssh/id_rsa.pub.
Thekeyfingerprintis:
4a:
10:
42:
21:
79:
3e:
2c:
73:
23:
6e:
e9:
fe:
a0:
a0:
a0:
c4root@localhost.localdomain
[root@localhost~]#
3.拷贝密匙
[root@localhost~]#mkdir/home/testuser/.ssh///创建登录用户环境
[root@localhost~]#cd~/.ssh/
[root@localhost.ssh]#ls
id_rsaid_rsa.pub
[root@localhost.ssh]#scpid_rsa.pubtestuser@10.1.6.250:
/home/testuser
Theauthenticityofhost'10.1.6.250(10.1.6.250)'can'tbeestablished.
RSAkeyfingerprintisef:
e0:
6a:
28:
7c:
f6:
14:
b6:
fa:
56:
66:
1f:
7f:
91:
42:
1c.
Areyousureyouwanttocontinueconnecting(yes/no)?
yes
Warning:
Permanentlyadded'10.1.6.250'(RSA)tothelistofknownhosts.
testuser@10.1.6.250'spassword:
//此处要输入testuser用户密码123456
id_rsa.pub100%4080.4KB/s00:
00
[root@localhost.ssh]#cd/home/testuser/
[root@localhosttestuser]#cpid_rsa.pub.ssh/authorized_keys
4.完成登录测试
[root@localhost~]#sshtestuser@10.1.6.250//此处不需要输入密码,直接登录,表示成功
[testuser@localhost~]$w//查看登录情况
10:
22:
12up1:
53,4users,loadaverage:
0.00,0.01,0.05
USERTTYFROMLOGIN@IDLEJCPUPCPUWHAT
roottty1-08:
401:
32m0.05s0.05s-bash
rootpts/0:
0.008:
541:
15m0.05s0.05sbash
supsunpts/110.1.6.23809:
070.00s0.53s0.15ssshd:
supsun[p
Testuserpts/210.1.6.25010:
220.00s0.05s0.02sw
[testuser@localhost~]$
任务3.利用第三方软件PUTTY,在WINDOWS下实现LINUX系统的远程登录。
[软件环境]
1、PUTTY.EXE
[操作步骤]
1、启动windows客户端软件putty,输入目标主机IP地址,如图7-2。
图7-2启动putty
2、修改登录字体。
选择Windows选项的Appearance选项,选择Fontsetting的Chang…按钮,修改字形和大。
如图7-3、图7-4。
图7-3putty字体设置
图7-4putty字体设置
3、修改登录支持中文设置。
选择Windows选项的Translation选项,选择Usefontencoding的下拉列表,选择UTF-8,如图7-5。
图7-5设置接受中文字体
4、修改等率颜色配比设置,如图7-6。
图7-6颜色配比设置
5、完成用户登录,如图7-7。
图7-7用户登录
7.2.4SSH服务配置常见故障与常规配置参数解析
1、下面的表格中列出了在实验过程中可能出现的故障及其解决方法。
序号
实验故障
分析与解决
1
无法登录
可能是ssh服务未启动
2
root用户无法登录
可能是PermitRootLogin参数设为了no
3
远程ssh服务器已经启动成功,但无法连接到远程的ssh服务器
远程ssh服务器对应主机的防火墙没有关闭。
可采用serviceiptablesstop命令关闭
2、ssh服务的主配文件/etc/ssh/sshd_confg常规参数说明
VersionAddendumTecZm-20050505#在telnetip22时只能看出openssh的版本,看不出OS
Protocol2#使用协议版本2
Port22#sshd监听22端口
ListenAddress192.168.7.1#sshd只监听目标ip为192.168.7.1的请求
AllowGroupswheelmyguest#允许wheel组和myguest组的用户登录
AllowUsersteczmauthen@192.168.8.5#允许来自以上组的teczm用户和authen用户登录,
#且authen用户只能从主机192.168.8.5登录
#DenyGroups#拒绝登录的组,参数设置和AllowGroups一样
#DenyUsers#拒绝登录的用户,参数设置和AllowUsers一样
#AllowTcpForwardingyes#是否转发的TCP包都被允许。
默认是``yes''。
LoginGraceTime60#60秒内客户端不能登录即登录超时,sshd切断连接。
KeyRegenerationInterval1800#1800秒(30分钟)后自动重新生成服务器的密匙。
MaxStartups3#设置同时发生的未验证的并发量,即同时可以有几个
UseDNSno#不使用DNS查询客户端。
PermitRootLoginno#不允许root登录,root可由wheel组用户登录后su。
X11Forwardingno#禁止用户运行远程主机上的X程序。
Use