`
XinTeng2012
  • 浏览: 93655 次
社区版块
存档分类
最新评论

SSH服务

 
阅读更多

最近刚刚接手的项目上面使用的是SSH协议访问远程主机,所以要研究下SSH这个!

S<wbr>S<wbr>H<wbr>的<wbr>英<wbr>文<wbr>全<wbr>称<wbr>为<wbr>S<wbr>e<wbr>c<wbr>u<wbr>r<wbr>e<wbr><wbr>S<wbr>h<wbr>e<wbr>l<wbr>l<wbr>,<wbr>是<wbr>I<wbr>E<wbr>T<wbr>F<wbr>(<wbr>I<wbr>n<wbr>t<wbr>e<wbr>r<wbr>n<wbr>e<wbr>t<wbr><wbr>E<wbr>n<wbr>g<wbr>i<wbr>n<wbr>e<wbr>e<wbr>r<wbr>i<wbr>n<wbr>g<wbr><wbr>T<wbr>a<wbr>s<wbr>k<wbr><wbr>F<wbr>o<wbr>r<wbr>c<wbr>e<wbr>)<wbr>的<wbr>N<wbr>e<wbr>t<wbr>w<wbr>o<wbr>r<wbr>k<wbr><wbr>W<wbr>o<wbr>r<wbr>k<wbr>i<wbr>n<wbr>g<wbr><wbr>G<wbr>r<wbr>o<wbr>u<wbr>p<wbr>所<wbr>制<wbr>定<wbr>的<wbr>一<wbr>族<wbr>协<wbr>议<wbr>,<wbr>其<wbr>目<wbr>的<wbr>是<wbr>要<wbr>在<wbr>非<wbr>安<wbr>全<wbr>网<wbr>络<wbr>上<wbr>提<wbr>供<wbr>安<wbr>全<wbr>的<wbr>远<wbr>程<wbr>登<wbr>录<wbr>和<wbr>其<wbr>他<wbr>安<wbr>全<wbr>网<wbr>络<wbr>服<wbr>务<wbr>。<wbr>可<wbr>以<wbr>简<wbr>单<wbr>理<wbr>解<wbr>为<wbr>:<wbr>R<wbr>l<wbr>o<wbr>g<wbr>i<wbr>n<wbr>和<wbr>T<wbr>e<wbr>l<wbr>n<wbr>e<wbr>t<wbr>等<wbr>的<wbr>替<wbr>代<wbr>方<wbr>案<wbr>。</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

7.2.1 SSH协议简介

SSH的英文全称为SecureShell,是IETF(Internet Engineering Task Force)的Network Working Group所制定的一族协议,其目的是要在非安全网络上提供安全的远程登录和其他安全网络服务。可以简单理解为:Rlogin和Telnet等的替代方案。

SSH 协议在预设状态中提供两个服务器功能:

●类似telnet的远程联机使用 shell 的服务器,即ssh;

●类似FTP服务的sftp-server,提供更安全的 FTP 服务。

1. SSH基本框架

SSH协议框架中最主要的部分是三个协议:传输层协议、用户认证协议和连接协议。同时SSH协议框架中还为许多高层的网络安全应用协议提供扩展的支持。它们之间的层次关系可以用如下图7-1来表示:

图7-1 SSH协议的层次结构示意图

在SSH的协议框架中,传输层协议(The Transport Layer Protocol)提供服务器认证,数据机密性,信息完整性等的支持;用户认证协议(The User AuthenticationProtocol) 则为服务器提供客户端的身份鉴别;连接协议(The Connection Protocol)将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用;各种高层应用协议可以相对地独立于SSH基本体系之外,并依靠这个基本框架,通过连 接协议使用SSH的安全机制。

SSH的安全验证是如何工作的
  从客户端来看,SSH提供两种级别的安全验证。

第一种级别(基于口令的安全验证)

只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密, 但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器, 也就是受到“中间人”这种方式的攻击。

第二种级别(基于密匙的安全验证)

需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。 如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在你在该服务器的家目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。 客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。

用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。

第二种级别不仅加密所有传送的数据,而且“中间人”这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程需要的时间稍微较长。

2 SSH数据加密方式

网络封包的加密技术通常由“一对公钥与私钥”(即“Public and Private keys”)进行加密与解密的操作。主机端要传给客户端(client)的数据先由公钥加密,然后才在网络上传输。到达客户端后,再由私钥将加密的资料解密。经过公钥(publick key)加密的数据在传输过程中,由于数据本身经过加密,即使这些数据在途中被截取,要破解这些加密的数据,需要花费好长一段时间。

3. SSH版本

SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x。 用SSH 2.x的客户程序是不能连接到SSH 1.x的服务程序上去的。OpenSSH 2.x同时支持SSH 1.x和2.x。

SSH protocol version 1

每一部SSH服务器主机都可以用RSA加密方式产生一个1024-bit的RSA Key,这个RSA的加密方式主要用来产生公钥与私钥的演算方法。

version 1的整个联机加密步骤:

当每次SSH daemon(sshd)启动时,产生768-bit的公钥(或称为server key)存放在Server 中;若有客户端的ssh联机需求传送来时,Server将这公钥传给客户端。

此时,客户端比对该公钥的正确性。比对的方法是利用/etc/ssh/ssh_known_hosts或~/.ssh/known_hosts 档案内容。

在客户端接受该768-bit的server key后,客户端随机产生256-bit的私钥(host key),并且以加密方式将server key与host key整合成完整的Key,并将该Key传送给server;

Server与客户端在本次联机中以该1024-bit的Key进行数据的传递。由于客户端每次256-bit的Key是随机取的,因而本次联机与下次联机的Key可能不一样。

SSH protocol version 2

SSH version 1的联机中,Server单纯的接受来自客户端的privatekey,如果在联机过程中privatekey被取得后,cracker 就可能在既有的联机当中插入一些攻击码,使得联机发生问题。

为了改进这个缺点,在SSH version 2中,SSH server不再重复产生server key,而是在与客户端建立private key时,利用Diffie-Hellman的演算方式, 共同确认来建立private key,然后将该private key与public key组成一组加解密的金钥。同样,这组金钥也仅是在本次的联机中有效。

透过这个机制可见,由于server/client两者之间共同建立了private key,若private key落入别人手中,由于server端还会确认联机的一致性,使cracker没有机会插入有问题的攻击码。即ssh version 2 是比较安全的。

7.2.2 SSH常用操作

1. 启动 SSH 服务

Linux 系统中,预设含有SSH的所有需要的套件,包含可以产生密码等协议的OpenSSL套件与OpenSSH套件,直接启动即可使用。

以SSH daemon(简称 sshd)手动启动的步骤如下:

[root@localhost ~]# /etc/init.d/sshdrestart

[root@localhost ~]# netstat -tlp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp0 0 *:ssh *:* LISTEN 24

启动后,利用netstat查阅sshd 程序是否正确的在LISTEN即可。这时,SSH服务器设定值均是系统默认值,能否仅用较安全的version 2 ,需要进一步的设定。

如果想在开机即启动SSH,用chkconfig设定开机启动即可。

[root@localhost ~]#chkconfig sshd on

2. ssh 客户端联机

⑴Linux Client:ssh

SSH在客户端使用ssh指令,该指令可以指定联机的版本 (version1或version2), 还可以指定非正规的ssh port(正规ssh port为22)。

一般的用法:

①直接登入到对方主机:

[root@localhost ~]# ssh account@hostname

# 范例:

# 连接到我们自己本机上面的 ssh 服务

[root@localhost ~]# ssh dmtsai@localhost

The authenticity of host 'localhost(127.0.0.1)' can't be established.

RSA key fingerprint isf8:ae:67:0e:f0:e0:3e:bb:d9:88:1e:c9:2e:62:22:72.

Are you sure you want to continueconnecting (yes/no)? yes

#务必填入完整的 "yes" 而不是 Y 或 y 而已。

Warning: Permanently added 'localhost'(RSA) to the list of known hosts.

dmtsai@localhost's password:

Last login: Fri Jul 1 14:23:27 2005 from localhost.localdomain

[dmtsai@linux ~]$

[dmtsai@linux ~]$ exit <== 输入 exit 就能够离开对方主机

②不登入对方主机,直接在对方主机执行指令:

[root@localhost ~]# ssh dmtsai@localhostdate

dmtsai@localhost's password:

Tue Nov 22 11:57:27 CST 2005

[root@localhost ~]#

[root@localhost ~]# vi ~/.ssh/known_hosts

localhost ssh-rsaAAAAB3NzaC1yc2Euowireffodjoiwjefmoeiwhoqhwupoi

t[egmlomowimvoiweo6VpTHTw2/tENp4U7Wn8J6nxYWP36YziFgxtWu4MPSKaRmr

E4eUpR1G/zV3TkChRZY5hGUybAreupTVdxCZvJlYvNiejfijoejwiojfijeoiwx5

eRkzvSj7a19vELZ5f8XhzH62E=

7.2.3 SSH项目配置

任务1.配置SSH服务,提供本地用户远程SSH口令登录。

[系统及软件环境]

1. 操作系统:Red Hat AS 5.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@localhost ssh]# rpm -qa |grep ssh

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@localhost RPMS]# rpm -ivh openssh-* --aid --force

warning: openssh-3.9p1-8.RHEL4.1.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e

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@localhost ssh]# grep -v "#" /etc/ssh/sshd_config

SyslogFacility AUTHPRIV

PasswordAuthentication yes

ChallengeResponseAuthentication no

GSSAPIAuthentication yes

GSSAPICleanupCredentials yes

UsePAM yes

X11Forwarding yes

Subsystem sftp /usr/libexec/openssh/sftp-server

(2)按要求修改后的/etc/ssh/sshd_config文件(修改处用黑体标明)。

Port 22 //默认为22(如果需要,可以进行修改服务端口号,比如:4444)

Protocol 2 //只允许ssh2协议工作,提高安全性

SyslogFacility AUTHPRIV

PermitRootLogin yes //如果不允许root用户远端登录,则改为no

PasswordAuthentication yes

ChallengeResponseAuthentication no

GSSAPIAuthentication yes

GSSAPICleanupCredentials yes

UsePAM yes

X11Forwarding yes

MaxStartups 10 #将准备连接的最大允许数设为10,防止拒绝服务攻击

Subsystem sftp /usr/libexec/openssh/sftp-server

4.重启ssh服务,并测试是否启动成功。

root@localhost ~]# service sshd restart //或者用/etc/rc.d/init.d/sshd restart

启动 sshd [确定]

停止 sshd [确定]

[root@localhost ~]# ssh supsun@10.1.6.250 //如果需要指定端口号4444,则加 –p 4444

The authenticity of host '10.1.6.250 (10.1.6.250)' can't be established.

RSA key fingerprint is ef:e0:6a:28:7c:f6:14:b6:fa:56:66:1f:7f:91:42:1c.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '10.1.6.250' (RSA) to the list of known hosts.

supsun@10.1.6.250's password:

Last login: Sun Aug 1 09:07:05 2010 from 10.1.6.238

[supsun@localhost ~]$

任务2.配置SSH服务,提供基于密匙的登录,要求RSA加密算法进行加密,不需要输入密匙即可实现远程登录。

[操作步骤]

//说明:本任务是在(任务1)的基础上进行配置。

1.生成需要登录的用户

[root@localhost ~]# useradd testuser

[root@localhost ~]# passwd testuser

Changing password for user testuser.

New UNIX password: //输入密码123456

BAD PASSWORD: it is too simplistic/systematic

Retype new UNIX password: //输入密码123456

passwd: all authentication tokens updated successfully.

[root@localhost ~]#

2.生成用户密匙对

[root@localhost ~]# ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa): //此处直接回车

Enter passphrase (empty for no passphrase):

Enter same passphrase again: //此处直接回车

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

4a:10:42:21:79:3e:2c:73:23:6e:e9:fe:a0:a0:a0:c4 root@localhost.localdomain

[root@localhost ~]#

3.拷贝密匙

[root@localhost ~]# mkdir /home/testuser/.ssh/ //创建登录用户环境

[root@localhost ~]# cd ~/.ssh/

[root@localhost .ssh]# ls

id_rsa id_rsa.pub

[root@localhost .ssh]# scp id_rsa.pub testuser@10.1.6.250:/home/testuser

The authenticity of host '10.1.6.250 (10.1.6.250)' can't be established.

RSA key fingerprint is ef:e0:6a:28:7c:f6:14:b6:fa:56:66:1f:7f:91:42:1c.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '10.1.6.250' (RSA) to the list of known hosts.

testuser@10.1.6.250's password: //此处要输入testuser用户密码123456

id_rsa.pub 100% 408 0.4KB/s 00:00

[root@localhost .ssh]# cd /home/testuser/

[root@localhost testuser]# cp id_rsa.pub .ssh/authorized_keys

4.完成登录测试

[root@localhost ~]# ssh testuser@10.1.6.250 //此处不需要输入密码,直接登录,表示成功

[testuser@localhost ~]$ w //查看登录情况

10:22:12 up 1:53, 4 users, load average: 0.00, 0.01, 0.05

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

root tty1 - 08:40 1:32m 0.05s 0.05s -bash

root pts/0 :0.0 08:54 1:15m 0.05s 0.05s bash

supsun pts/1 10.1.6.238 09:07 0.00s 0.53s 0.15s sshd: supsun [p

Testuser pts/2 10.1.6.250 10:22 0.00s 0.05s 0.02s w

[testuser@localhost ~]$

任务3.利用第三方软件PUTTY,在WINDOWS 下实现LINUX系统的远程登录。

[软件环境]

1、PUTTY.EXE

[操作步骤]

1、启动windows 客户端软件putty,输入目标主机IP地址,如图7-2。

图7-2 启动putty

2、修改登录字体。选择Windows选项的Appearance选项,选择Font setting的Chang…按钮,修改字形和大。如图7-3、图7-4。

图7-3 putty字体设置

图7-4putty字体设置

3、修改登录支持中文设置。选择Windows选项的Translation选项,选择Use font encoding的下拉列表,选择UTF-8,如图7-5。

图7-5 设置接受中文字体

4、修改等率颜色配比设置,如图7-6。

图7-6 颜色配比设置

5、完成用户登录,如图7-7。

图7-7 用户登录

7.2.4 SSH服务配置常见故障与常规配置参数解析

1、下面的表格中列出了在实验过程中可能出现的故障及其解决方法。

序号

实验故障

分析与解决

1

无法登录

可能是ssh服务未启动

2

root用户无法登录

可能是PermitRootLogin参数设为了no

3

远程ssh服务器已经启动成功,但无法连接到远程的ssh服务器

远程ssh服务器对应主机的防火墙没有关闭。可采用service iptables stop命令关闭

2、ssh服务的主配文件/etc/ssh/sshd_confg常规参数说明

VersionAddendum TecZm-20050505 #在telnet ip 22时只能看出openssh的版本,看不出OS
Protocol 2 #使用协议版本2

Port 22 #sshd监听22端口

ListenAddress 192.168.7.1 #sshd只监听目标ip为192.168.7.1的请求

AllowGroups wheel myguest #允许wheel组和myguest组的用户登录

AllowUsers teczm authen@192.168.8.5 #允许来自以上组的teczm用户和authen用户登录,

#且authen用户只能从主机192.168.8.5登录

#DenyGroups #拒绝登录的组,参数设置和AllowGroups一样

#DenyUsers #拒绝登录的用户,参数设置和AllowUsers一样

#AllowTcpForwarding yes #是否转发的TCP包都被允许。默认是 ``yes''。

LoginGraceTime 60 #60秒内客户端不能登录即登录超时,sshd切断连接。

KeyRegenerationInterval 1800 #1800秒(30分钟)后自动重新生成服务器的密匙。

MaxStartups 3 #设置同时发生的未验证的并发量,即同时可以有几个

UseDNS no #不使用DNS查询客户端。

PermitRootLogin no #不允许root登录,root可由wheel组用户登录后su。

X11Forwarding no #禁止用户运行远程主机上的X程序。

UseLogin yes #禁止X11Forwarding

#认证配置(口令认证、PAM认证、非对称密钥认证任选其一)

#口令认证

PubkeyAuthentication no #不使用非对称密钥认证

PasswordAuthentication yes #使用口令认证

PermitEmptyPasswords no #不允许使用空密码的用户登录

#PAM认证

PasswordAuthentication no #不使用口令认证

UsePAM #使用pam认证

ChallengeResponseAuthentication yes #允许挑战应答方式

#非对称密钥认证

PasswordAuthentication no #不使用口令认证

PubkeyAuthentication yes #使用非对称密钥认证

AuthorizedKeysFile .ssh/authorized_keys #用户认证使用的公钥。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics