SSH服务

1.SSH服务

  SSH是Security Shell的缩写,是建立在应用层和传输层基础上安全协议,是目前较为安全可靠的远程登录会话和传输协议,SSH的客户端也适用于多种平台

2.SSH结构

  SSH是C/S架构,即Client(客户端)/Server(服务端)结构。需要使用SSH,需要在远程创建Server服务,以及需要在本地建立客户端。版本有OpenSSH1.x和OpenSSH2.x。

3.SSH功能

可以有效防止DNS欺骗以及IP欺骗

  • 压缩传输数据(可选择)
  • SSH提供了多种传输方式
  • SSH构建Socket5代理

4.SSH服务的安装和配置

  • 安装

  在安装Linux系统的时候,如果不是选择的最小化安装,SSH服务将会默认安装在系统中,无需自行安装。如果系统没有自带SSH服务,那么需要我们自行安装:

    • RedHat 、CentOS

        yum install openssh -server openssh -clients

    • Debian、Ubuntu等DEB包的发行版

      apt -get install openssh -server openssh -client

  • 客户端选择
    • 苹果OS X操作系统:自带terminal中包含有SSH客户端,与LinuxSSH客户端的使用方法相同
    • Linux系统:OpenSSH-Client
    • Windows操作系统:PuTTY、Xshell、SecureCRT、Plink、WinScp等
  • 配置

   在Linux操作系统中,SSH服务端配置文件默认路径是:/etc/ssh/sshd_config(服务端配置)

    • port 22                            SSH端口设置,默认是22
    • Protocol  2,1                   选择SSH协议版本
    • ListenAddress 0.0.0.0            监听的网卡ip
    • PermitRootLogin   no             是否允许root登录,默认是允许的
    • PasswordAuthentication  yes  是否开启密码验证
    • PermitEmptyPasswords  no    是否允许密码为空
    • PrintMotd  no                       登入后是否显示一些信息,如上次登入时间、地点等
    • PrintLastLog yes                   显示上次登入的信息
    • KeepAlive   yes                     发送KeepAlive信息给客户端,解决的是服务端僵尸进程的问题
    • MaxStartups  10                  允许尚未登录的联机画面数(已经联机,但是还没有登录)
    • DenyUsers  *                       禁止用户登录,*表示所有用户
    • AllowUsers  *                       允许用户登录

5.SSH的认证方式与访问策略

  • 口令认证  

    口令是SSH服务的基础认证方式,在不对SSH进行相应配置的情况下,口令认证方式是默认启用的。

    在Linux操作系统中,使用SSH客户端的命令格式如下:

      ssh  options username@hostname  'command'

  • 密钥认证

    密钥认证是Linux运维中常用的较为安全的认证方式,由于无需输入口令,因此在自动化运维以及集群运维中较多

    • 生成密钥和公钥文件  ssh-keygen 命令可以生成公钥和密钥

      需要输入生成密钥文件的保存地址,默认为 ~/.ssh目录下,命名为id_rsa.pub文件

      确认是否需要给密钥文件设置口令密码,无需设置

      密钥和公钥文件保存路径

    • 将公钥文件加入到主机的认证文件中 cat id_rsa.pub >> ~/.ssh/authorized_keys(注意: .ssh目录权限为700,authorized_keys文件权限为600)
      • 创建系统所需要的ssh认证文件,touch authorized_keys
      • 将公钥文件内容写入到创建的ssh认证文件中,cat id_rsa.pub >> authorized_keys
      • 查看或者编辑ssh的认证文件

        

      • 修改ssh认证文件的权限,chmod 600 authorized_keys
      • 客户端密钥连接,通过xftp将密钥文件复制在客户端主机上,xftp连接之后,进入密钥存放路径,这里由于.ssh文件夹是隐藏文件夹,所以需要在xftp的工具-->选项-->常规中勾选显示隐藏文件
      • 进入.ssh目录,将id_rsa文件下载到客户端主机
      • 测试使用非口令验证(密钥验证),使用ssh客户端连接Linux主机
  • 访问策略-限制用户连接SSH

    在/etc/ssh/sshd_config文件中配置

    DenyUsers  test  禁止用户登入

    AllowUsers  test  允许用户登入

    DenyGroups  test  禁止群组登入

    AllowGroups  test  允许群组登入

  注意:修改配置文件后,服务需要重启

  • 访问策略-限制ip连接SSH
    • iptables防火墙
      • iptables -A INPUT -p tcp --dport 22 -s 192.168.1.104/32 -j ACCEPT   #允许ip为192.168.1.104的主机访问22端口
      • iptables -A INPUT -p tcp --dport 22 -j DROP                                  #组织所有ip访问本机22端口

     iptables限制ssh访问是基于端口的

    • TCP Wrappers(推荐使用)
      • 在/etc/host.allow文件中配置允许访问ip

         sshd:192.168.1.104/255.255.255.255

      • 在/etc/host.deny文件中配置禁止ip访问

        sshd:ALL 或者sshd:ALL EXCEPT 192.168.1.104

     TCP Wrappers只支持长格式掩码,不能用192.168.1.104/24

6.SSH运维常用参数

  • SSH执行远程主机命令

  获取远程主机当前系统时间,并以“主机名:时间”格式保存在本地的remote.txt文件中。

    ssh root@192.168.1.149 ‘echo ${HOSTNAME}: `date +%Y-%m-%d\ %H:%m:%S`’ >> remote.txt

  • SSH构建跳板隧道

  hostA(104)主机可以直接访问,hostB(103)主机只允许通过hostA访问,用ssh构建从本机到hostB的访问

  • 在Windows系统下,有一个plink.exe程序:  plink.exe -t root@192.168.1.104 ssh 192.168.1.103

 

     -t 属性,构建了一个伪终端

  ssh -t hostA hostB

  • 执行密钥路径

    默认,密钥存放在/home/userName/.ssh目录下,也可以通过-i来指定

  • -p指定ssh端口
  • -l指定用户(也可以通过 userName@hostName)
  • -F指定配置文件
  • -t指定伪终端迫使SSH客户端以交互模式工作,常配合expect使用

示例:ssh -l test 192.168.1.149 -i ~/mykey -p 122 -F ~/myConfig

  • 调试模式与绑定ip    

  调试: ssh -v hostName

    (-v参数以类似log的形式返回debug信息,可以帮助运维人员在SSH连接出现问题的时候快速查找问题)

  绑定ip: ssh -b 192.168.1.104 root@192.168.1.149(表示从192.168.1.104这个ip与192.168.1.149简历ssh连接)

    (绑定ip多用于我们的SSH客户端有多个ip地址,分不清到底是哪一个ip连接到了SSH服务)

  • 构建Socket5代理

    实例:hostA可以访问www.website.com站点,hostB无法直接访问该站点,现在要求hostB访问该站点。。。(国内访问谷歌)

    访问谷歌的两个必要条件

    第一,需要有可以访问谷歌的(国外)主机或者虚拟主机也可;

    第二,需要有效的用户,普通权限用户即可

    plink.exe userName@hostName [-i userPk.ppk] -D 2015 (用户通过密钥验证,打开2015端口访问主机)

    在fireFox浏览器-->选项-->高级-->网络-->设置-->>手动配置代理 127.0.0.1 p:2015

 

posted @ 2016-01-20 17:03  行者_2014  阅读(311)  评论(0编辑  收藏  举报