SSH服务器

1、SSH

SSH是Secure Shell的缩写,由IETF的网络工作小组所制定,SSH是建立在应用层和传输层基础上的安全协议。SSH有很多功能,它既可以代替Telnet,又可以为FTP、POP,甚至为PPP提供一个安全的通道。

OpenSSH是SSH的替代软件包,而且是开放源代码和免费的。

SSH协议框架中最主要的部分是3个协议。

  1. 传输层协议(The Transport Layer Protocol):传输层协议提供服务器认证、数据机密性、信息完整性等的支持。
  2. 用户认证协议(The User Authentication Protocal):用户认证协议为服务器提供客户端的身份鉴别。
  3. 连接协议(The Connection Protocol):连接协议将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用。

在客户端看来,SSH提供两种级别的安全验证。

  1. 第一种级别(基于密码的安全验证),知道用户账号及密码,就可以登录到远程主机,并且所有传输的数据都会被加密。但是,可能会有别的服务器在冒充真正的服务器,无法避免被中间人攻击。
  2. 第二种级别(基于密钥的安全验证),需要依靠密钥,也就是必须为自己创建一对密钥,并把公钥存放在需要访问的服务器上。客户端软件会向服务器发出请求,请求用密钥进行安全验证。服务器收到请求之后,先在该服务器的用户根目录下寻找公钥,然后把它和 发送过来的公钥进行比较,如果两个密钥一致,服务器就用公钥加密质询并把它发送给客户端软件。从而避免被中间人攻击。
  1. OpenSSH

2.1 OpenSSH概述

   OpenSSH 1999年10月第一次在OpenBSD 2.6里出现,当初的计划是取代由SSHCommunication Security所提供的SSH软件。OpenSSH的工作原理如下。

   当OpenSSH启动后,它首先建立一条经过加密的连接,然后对用户进行身份验证。这两项任务完成后,OpenSSH就可以用来在这两个系统之间来回发送信息。OpenSSH使用两个密钥进行加密会话协商,主机密钥对(Host Key Pair)和会话密钥对(Session Key Pair)。主机密钥对是一组公钥/私钥,当服务器系统第一次运行sshd时(通常就是系统第一次启动时)就会建立这些密钥对。会话密钥对则是一组每小时都会改变的公钥/私钥。

   当OpenSSH客户端第一次连接到OpenSSH服务器时,它会要求你确认是否连接到正确的服务器。确认之后,客户端就会将该服务器的主机公钥复制一份保存起来。在后续连接中,客户端会将服务器所提供的密钥与自己所保存的密钥进行比较,尽管这个测试并不是那么安全,但是接下来的测试相当安全。

然后客户端生成一个随机密钥,并使用服务器的主机公钥和会话密钥对它进行加密。客户端将这个经过加密的密钥发送到服务器,探后,服务器再使用它自己的私钥对这个经过加密的密钥进行解密。这个过程将会建立一个密钥,这个密钥只有客户端和服务器知道,并被用来对会话中的其他信息进行加密。

2.2 全局配置文件

   OpenSSH的全局配置文件位于/etc/ssh目录

  1. mobuli:服务器和客户端均有该文件,其中包含了密钥交换的信息,OPENSSH利用这些信息建立安全连接,此文件不需要修改。
  2. Ssh_config:OpenSSH客户端配置文件,该文件属于全局的客户端配置文件,改文件的配置如果与用户目录中的OpenSSH客户端配置文件(~/.ssh/config)发生冲突时,将被用户目录的OpenSSH客户单配置文件覆盖。在该文件中的配置行包含着声明,这些声明均以某个关键字(不区分大小写)开头,后面是空白,最后是参数(区分大小写)。改文件中可使用的参数如下。

Host<主机名>:将下面的声明(直到下一条Host声明)都指定为只适用于指定的主机。指定主机名采用的格式应该与hostname命令所用的格式一样,而且也能够包含通配符“*”和“?”。单个“*”指定所有主机。

ForwardAgent yes|no:设置连接是否经过验证代理(如果存在)转发给远程主机。

RhostsAuthentication yes|no:指定是否使用基于rhosts的安全验证。

RSAAuthentication yes|no:指定是否使用RSA算法的安全验证。

PasswordAuthentication yes|no:指定是否使用密码验证。

BatchMode yes|no:如果设置为yes, “passphrase/password”(交互式输入密码)的提示将被禁止。

CheckHostIP yes|no:ssh是否查看连接到服务器的主机的IP地址以防止DNS欺骗。

StrickHostKeyChecking yes|no:指定是否将主机密钥添加到用户的knoen_hosts文件中以及如何添加。如果设置为ask(默认值),那么在连接新系统时会询问是否添加主机密钥;如果设置为no,就会自动添加主机密钥;如果设置为yes,就要求手工添加主机密钥。若将参数设置yes或ask,则当某系统的主机密钥发生改变之后,OpenSSH会拒绝连接到该系统。对于安全性要求较高的系统,应将此参数设置为yes或ask。

IdentityFile 文件名:指定从哪个文件读取用户的RSA安全验证标识,默认为~/.ssh/identity.

Port端口:指定连接到远程主机的端口,默认为22.

HostbasedAuthentication yes|no:如果设置为yes ,则尝试进行rhosts身份验证,对于安全要求更高的系统,应将此参数设置为no(默认值)

User<用户名>:指定登录系统时所用的用户名。用host声明来指定系统。该选项意味着在远程系统上登录时,如果使用的用户名不同于在本地系统上登录所用的用户名,那么不必在命令行上输入用户名。

HostName<主机>:指定客户端想要登录的主机名称。该选项意味着在登录远程主机时不需要指定主机名称。

  1. sshd_config:OpenSSH服务器配置文件。在该文件中的配置行包含着生命,这些声明均以某个关键字(不区分大小写)开头,后面是空白,最后是参数(区分大小写)。该文件中可使用的参数如下:

Port<端口>:指定sshd监听的端口,默认为22。

ListenAddress<IP地址>:指定sshd服务器侦听客户端SSH请求的IP地址。

HostKer<文件名>:指定包含计算机私人密钥的文件,默认为/etc/ssh/ssh_host_key。

ServerKeyBits<位数>:指定服务器密钥的位数,默认为1024.

LoginGraceTime<时间>:指定如果用户不能成功登陆,在切断连接之前服务器需要等待的时间(单位为秒)

KeyRegenrationInterval:指定在多少秒之后自动重新生成服务器的密钥(重新生成密钥是为了防止用盗用的密钥解密被截获的信息)

PermitRootLogin  yes|no:指定root是否可以使用ssh登录。

IgnoreRhosts yes|no:指定验证的时候是否使用”rhosts”和”shosts”文件。

IgnoreUserKnownHosts yes|no:指定sshd是否在进行RhostsRSAAuthentication 安全验证的时候忽略用户的“~/.ssh/known_hosts”文件

StrictModes yes|no:指定ssh在接收登录请求之前是否检查用户目录、rhosts文件的权限和所有权。

PrintMotd yes|no:指定sshd是否在用户登录的时候显示/etc/motd中的信息。

SyslogFacility yes|no:指定在记录来自sshd的消息的时候,是否给出“facility conde”。

LogLevel<日志等级>:指定记录sshd日志消息的等级,一般使用INFO.

RhostsAuthentication yes|no:指定只用rhosts或“/etc/hosts.equiv”进行安全验证是否已经足够了。

RhostsRSSAuthentication yes|no:指定是否允许用rhosts或“/etchosts.equiv”加上RSA进行安全验证。

RSAAuthentication yes|no:指定是否允许只有RSA安全验证。

PasswordAuthentication yes|no:指定是否允许密码验证。

PermitEmptPasswords yes|no:指定是否允许使用密码为空的账户登录。

AllowUsers<用户列表>:用户是一个由空格分隔的多个用户,指定了允许使用sshd登陆的用户。这个列表可以含有通配符“*”和“?”,可以用user或者user@host的形式来指定用户。如果使用的是第二种格式的话,那么要确保将host指定为hostname命令所返回的值。如果没有指定这项声明,那么任何能够在本地登录的用户都能够使用OpenSSH客户端登录。

  1. ssh_host_dsa_key、ssh_host_dsa_key.pub:SSH协议第2版的DSA主机密钥。两个文件的所有者都应该是root.ssh_host_dsa_key.pub是公开文件,任何人都应该可以读取,但是只有它的所有者具有写权限(文件访问权限码为644),而ssh_host_dsa_key是私有文件。除了它的所有者之外,任何人都不应该有读权限或者写权限(文件访问权限码为600)
  2. ssh_host_rsa_key、ssh_host_rsa_key.pub:SSH协议第2版的RSA主机密钥。两个文件的所有者都应该是root。ssh_host_rsa_key.pub是公开文件,任何人都应该可以读取,但是只有它的所有者具有写权限(文件访问权限码为644),而ssh_host_rsa_key是私有文件。除了它的所有者之外,任何人对它都没有读权限或者写权限(文件访问权限码为600)
  3. Ssh_known_hosts:包含本地主机的用户能够连接到的远程主机的RSA公钥。这个文件所包含的额信息类似于~/.ssh/known_hosts,但它是由系统管理员建立并可以由所有用户访问。这个文件的所有者应该是root,而且任何人对它都有读权限,但是只有它的所有者有写权限(文件访问权限码为644)。
  4. .sshrc:相当于~/.bashrc的作用。如果不存在~/.ssh/rc文件,那么这个脚本要在~/.ssh/environment之后且用户的的shell监本开始之前运行。

2.3 ~/.ssh 目录配置文件

   OpenSSH 针对每个用户的配置文件位于~/.ssh目录,该目录中各文件作用如下(这些文件有一些在默认情况下不存在,其中有两种情况,一种是需要再第一次使用ssh后系统自动生成,一种需要手动建立)。

  1. authorized_keys:有了该文件,不需要输入密码就能够登录到远程主机上,并能够从远程主机中复制文件或将文件复制到远程主机中。除了文件的所有者之外,任何人都没有对这个文件的写权限。
  2. Config:用户的私有OpenSSH配置文件。这个文件中的设置会覆盖/etc/ssh/ssh_config中的对影响。
  3. id_dsa、id_dsa.pub:由ssh_keygen生成的DSA用户身份验证密钥。两个文件的所有者都应该是该文件所在的主目录的用户。Id_dsa.pub是公开文件,任何人都应该能够读取,但是只有它的所有者有写权限(文件访问权限码为644)。除所有者之外,任何人都没有id_dsa私有文件的读权限或者写权限(文件访问权限码为600)。
  4. id_rsa、id_rsa.pub:由ssh_keygen生成的RSA用户身份验证密钥。两个文件的所有者都应该是该文件所在的主目录的用户。Id_rsa.pub是公开文件,任何人都应该能够读取,但是只有它的所有者有写权限(文件访问权限码为644)。除所有者之外,任何人都没有id_rsa私有文件的读权限或者写权限(文件访问权限码为600)。
  5. Known_hosts:包含了用户所连接到的主机的RSA公钥(默认)。每次用户连接到一个新的服务器的时候,OpenSSH都会自动向这个文件添加若干项。当第一次连接到OpenSSH服务器的时候,OpeSSH客户端提示你确认是否连接到正确的系统。当回答yes之后,客户端将会把这个服务器的主机公钥(服务器上的/etc/ssh/ssh_host_rsa_key.pub或者/etc/ssh/ssh_host_dsa_key.pub文件中的一行)追加到该用户本地客户端的~/.ssh/known_hosts文件中,如果必要的话会创建~/.ssh目录。为了记录known_hosts中的哪一行对应哪一个服务器,OpenSSH将服务器的名称和IP地址(默认)作为每行的前缀。后面再使用OpenSSH连接到该服务器时,通过将这个密钥与服务器所提供的密钥进行比较,客户端就可以验证是否连接到正确的服务器。3、客户端访问

3.1 linux平台

(1)ssh命令

     Ssh  [-CfLRv]  [用户名@]  SSH服务器  [命令]

(2)scp 命令

     Scp  [-Cpqrv]  [用户名@复制源主机:]复制源文件  [用户名@复制目标主机:] [复制目标文件]

  1. sftp命令

Sftp命令可以代替linux平台的ftp命令,提供一种安全的连接FTP服务器的方式。该命令使用方法与ftp命令相同。

  1. 通过密钥方式远程登录

在使用ssh连接到远程主机时每次需要输入远程主机的密码,如果有多态服务器需要通过ssh进行管理时这样可能比较麻烦。这是可以通过使用密钥文件的方式,先在本机生成一对密钥文件,再将公钥文件复制到远程主机,这样当私钥文件所在主机连接远程主机时就不需要输入密码。使用密钥文件的配置方法如下:

①使用如下命令生成密钥对文件:

    Ssh-keygen

    完成后在用户家目录.ssh中会自动生成密钥对文件,id_rsa为私钥文件,id_rsa.pub为公钥文件。

②使用如下命令将公钥复制到远程主机

Ssh-copy-id -i ~/.ssh/id_rsa.pub  root@192.168.0.10

公钥文件被复制到远程计算机后,会自动更名为authorized_keys,并复制到ssh-copy-id命令指定用户家目录中。

在上述配置完成后,使用ssh命令连接到远程主机时,提示输入的密码就不是用户的密码,而是在生成密钥对是设置的密码。

可以(在客户端)通过以下命令启用ssh代理功能,在启用代理后连接到远程主机时不需要输入任何密码,在输入第二个命令时,会要求输入生成密钥对时设置的密码。

4、配置实例

软件包

openssh

openssh-server

openssh-clients 客户端

默认都已安装

windows客户端工具:puttyCN、winSCP、SecureCRT

 

service sshd start   (1)启动服务

 

ll /etc/ssh/

moduli:

ssh_config:openSSH客户端配置文件,该文件中属于全局的客户端配置文件,如果与用户目录中的openSSH客户端配置文件(~、.ss/config)发生冲突时,将被用户目录的openSSH客户端配置文件覆盖。

 

sshd——config:openSSH服务器端配置文件。

 

--------------------------------------------------------------------------------------------------------------------------

 

vim /etc/ssh/sshd_config     

 (2)配置openSSH服务端

 

①服务监听选项

port 22       监听端口为22

Protocol 2     使用SSH v2协议

listenaddress  192.168.4.254     监听地址为192.168.4.254

SyslogFacility AUTHPRIV      

PasswordAuthentication yes           指定是否使用密码验证

ChallengeResponseAuthentication no   

GSSAPIAuthentication yes

GSSAPICleanupCredentials yes

UsePAM yes

AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES

AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT

AcceptEnv LC_IDENTIFICATION LC_ALL

X11Forwarding yes

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

②用户登录控制

#LoginGraceTime 2m          如果用户不能成功登录,在切断连接之前服务器需要等待的时间

#PermitRootLogin yes        允许root用户登录

#StrictModes yes

#MaxAuthTries 6             最大重试次数为6

AllowUsers jerry admin@61.23.24.25       只允许jerry和admin用户登录,且其中admin用户仅能够从IP地址为61.23.24.25的主机远程登录

③登录验证方式

#PubkeyAuthentication yes         启用密钥对验证

#AuthorizedKeysFile     .ssh/authorized_keys      指定公钥库数据文件

#PasswordAuthentication yes       启用密码验证

 

--------------------------------------------------------------------------------------------------------------------------

(3)使用SSH客户端程序

1、命令程序ssh、scp、sftp

ssh 对方主机用户@目标主机

ssh -p 端口号 对方主机用户@目标主机

第一次登录时,必须接受服务器端发来的rsa密钥后才能继续验证。接收的密钥信息保存在~/.ssh/known_hosts文件中。

whoami    确认当前用户

/sbin/ifconfig eth0|grep "inet addr"     确认当前主机地址

 scp root@192.168.1.1:/etc/passwd /root/pwd254.txt     下载

scp -r /etc/vsftpd/ root@192.168.1.1:/opt               上传

使用sftp命令

 sftp root@192.168.1.1

ls

put /boot/config-2.6.18-194.el5

ls

bye

 

 

构建密钥对验证的SSH体系

1、在客户端创建密钥对

ssh-keygen命令

可用的加密算法:RSA或DSA

ssh-keygen -t rsa

Enter file in which to save the key (/root/.ssh/id_rsa):    指定私钥位置

Enter passphrase (empty for no passphrase):                 设置私钥短语,使用该私钥验证登陆时必须正确提供此处所设置的短语。

ls -lh ~/.ssh/id_rsa*                                       确认生成的密钥文件

-rw------- 1 root root 1.8K 06-06 18:13 /root/.ssh/id_rsa   私钥文件

-rw-r--r-- 1 root root  408 06-06 18:13 /root/.ssh/id_rsa.pub    公钥文件

2、将公钥文件上传至服务器

 scp ~/.ssh/id_rsa.pub root@192.168.1.1:/tmp

3、在服务器中导入公钥文本

mkdir -p /home/lisi/.ssh      用来远程登陆的账号的额公钥数据库位于~/.ssh/目录

[root@mail ~]# cat /tmp/id_rsa.pub >> /home/lisi/.ssh/authorized_keys

[root@mail ~]# tail -l /home/lisi/.ssh/authorized_keys    确保ssh-rsa部分完整

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAr6b9nYb7UAeosoINhYOdb1aPtrhhhj0WYE/EVFiGk3JZY+KqScltJhU9VT6tlOsVXkeb3h6l2oG2Jy2DpYky29d6LVr0CzXDj8jE1WnATDocCZ9nauRM64shdlKPkYYmt9jDeWljF8QzBkvAiHgd2Umpr/QGneFj6XH13F53YpbBTsaiuFJ5JdsQ9TZUwfVUCTCJsykqhZPlhyaRkHxS7ojjd9QOXTNiVkCbZaCjHyd4DAMG56w+UDCtJgAKmhgY8O0ouLdSWtyMdERyBiGCV3er5VFN/2BtQYTNfFpqfCnTsmHi6Oq+wbwJEoCB3zIEz5UfHprDc0BprsCgnqxrOQ== root@localhost.localdomain

 

ls -l /home/lisi/.ssh/authorized_keys     要求是登陆的目标用户或root,同组或其他用户对该文件不能有写入权限,否则可能无法成功试用密钥对验证。      

-rw-r--r-- 1 root root 408 06-06 18:35 /home/lisi/.ssh/authorized_keys

4、在客户端使用密钥对验证

ssh lisi@192.168.1.1   

Enter passphrase for key '/root/.ssh/id_rsa':      输入私钥短语

[lisi@mail ~]$                                     成功登入服务器

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值