欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

第四周LINUX 学习笔记

程序员文章站 2023-02-23 13:50:02
内核编译丶sed丶awk Linux:单内核 模块化:动态 /lib/modules lsmod,modinfo,modprobe,insmod,,modprobe -r ,rmmod dep文件:模块的依赖关系 sysbols:符号映射 depmod:用来生成模块依赖关系 kernel文件夹下 a ......

                                                                                                             内核编译丶sed丶awk

linux:单内核
    模块化:动态
      /lib/modules
      lsmod,modinfo,modprobe,insmod,,modprobe -r ,rmmod
      dep文件:模块的依赖关系
      sysbols:符号映射
    depmod:用来生成模块依赖关系
         kernel文件夹下
            arch:架构
            crypto:加密模块
            drivers:驱动
            fs:文件系统
               有两部分组成
            kernel:内核调试模块
            lib:内核本身通用库
            mm:
            net:网络协议的实现
               netfilter:软件防火墙
               openvswith:虚拟机
               sunrpc:
            sound:声音

        centos6:
           与官方kernel可能不一样
    
        src.rpm
           源码rpm包+specs文件
           步骤:
             1.创建mockbuild用户
             2.切换至mockbuild用户,而后安装src.rpm包
             3.rpmbuild -bb|-ba ~/rpmbuild/specs/package_name.spec
             4.制作完成的rpm包:位于/root/rpmbuild/rpms/x86_64中

        /usr/src,/usr/local/src

   编译内核:
       可能需要的模块不多,红帽或者centos为了使版本更通用,
       y:编译进核心
       m:编译成模块
       make config
       make allyesconfig
       make allnoconfig

       make menuconfig

       建议将/boot/下的config文件拷贝到当前目录下,叫.config
       
       make kconfig(kde桌面环境,并且安装了qt开发环境)

       make gconfig(gnome桌面环境,并且安装gtk开发环境)

    第二步:编译
      make -j #
    第三步:安装模块
      make modules_install
    第四步:安装内核
      make install
    第五步:检查。测试
      grub.conf中是否已经有新内核配置项
      重启系统并启用新内核

      
安装一个新桌面:
   screen命令:
      screen:打开一个新的screen
      隐藏:ctrl+a,d
      重新打开隐藏的screen:
         显示个screen id: screen -ls
         重新打开 screen -r screen_id


    查看硬件信息:
    lspci
    hal-device
    lspcmcia
    lscpu
    lsdiff
    lsusb
    lsdlk
    dmidecode:查看bios,


rhel src.rpm
  补充:http://ftp.redhat.com/pub/redhat/linux/enterprise


编译安装新内核:
1.获取内核编码,解压至/usr/src
  tar xf linux-3.13.5.tar.xz -c /usr/src
  ln -sv /usr/src/linux-3.13.5 /usr/src/linux-
2.配置内核特性
  cp /boot/config-* /usr/src/linux/.config
  make menuconfig
3.编译内核
   make [-j #]
      最多为cpu物理核心总数的两倍
4.安装内核模块
   make modules_install
5.安装内核
   make install
6.验证并测试
  cat /boot/grub/grub.conf
  重启系统并应用新系统

 二次编译如何做清理操作:
     make clean:只清理编译生成的文件,但不删除配置文件.config
     make mrproper:删除编译生成的文件和.config
     make distclean:重置源代码树
将编译的文件放置于源码不同的路径:
    mkdir /path/to/somewhere
    cd  /path/to/somewhere
    ./configure --ksource=/usr/src/linux

如何实现内核的部分编译:
   1.只编译某子目录下的相关代码:
      cd /usr/src/linux
      make 子目录文件

      make subdir=arch/
      make drivers/net/
   2.只编译部分模块
      make m=path/to/dir/

      make m=drivers/net/
   3.只编译某一个模块
      make path/to/dir/module_name.ko

      make drivers/net/e1000/e1000.ko
   4.将编译后的结果放置于别的目录中
      make o=/path/to/somewhere

如何实现交叉编译
    make arch=架构

    以arm为例:

    make arch=arm 默认编译文件

 树莓派


 内核参数的查看与配置:
   /proc/sys/
      kernel net vm fs
   配置参数:
      echo "string" > /proc/sys/path/to/some_parameter
      echo 1 > /proc/sys/net.ipv4/icmp_echo_ignore_all
     sysctl -w
     上面也可写成
     sysctl -w net.ipv4.icmp_echo_ignore_all=1
   查看参数:
     sysctl -a
    配置文件:
     /etc/sysctl.conf

     net.ipv4.ip_forward ip转发
     kernel.hostname 主机名
     net.ipv4.icmp_echo_ignore_all ping功能
     vm.drop_caches 清除缓存
     sysctl -p 重读配置文件

硬件设备:设备文件
    2.4-:2w+

    udev:用户空间程序

    kenrel硬件探测过程在根文件系统挂载前就已经结束,启动udev daemon程序,要求内核重新探测硬件信息,并输出/sys目录,
    由此udevadmin工具就可以根据/sys目录中硬件信息给每个硬件创建设备文件了

    udev rules:udev规则文件,用于定义udev如何创建设备文件的
      /etc/udev/rules.d/

    kernel+initramfs(根文件系统所在设备的设备驱动模块)-->devtmps(用于在内核初始化时为基本设备创建设备文件的临时文件系统)

    如何手动创建设备文件
    mknod
       mknod [option] ...name ytpe [major minor]
       major:主设备号,表示设备类型
       minor:同一设备的不同文件

       选项:
         -m mode:指定权限

       例子
         mknod -m 660 /dev/testdev b 100 0

 

sed初级使用
   stream editor
一次只读一行,只处理一行,不对源文件做处理,至输出到屏幕上
模式空间
是一个行编辑器

格式
   sed[options] "script" file....

选项:
   -n:静默模式,不输出模式空间内的内容;默认打印空间模式的内容
   -r:扩展的正则表达式
   -f 文件:指定sed脚本文件
   -e 'script' -e 'script' :指定多个编辑指令
   -i : 直接编辑原文件
编辑命令:
    d:删除
    p: 打印
    i  \:在被指定到的行前面插入文本
    a  \:在被指定的行的下面插入文本
    \n:换行
    r 文件:在指定位置把另外一个文件的内容插入
    w 文件:将符合条件的所有行保存至指定文件中
    =:显示符号条件的行的行号
    s///:查找条件可以使用模式,但是要替换的内容不行

地址定界:自定义的起始行到结束行
  startline,endline
   1,3
   /pat1/,/pat2/
   /pattern/

 用法:sed [options] 'addr1[,addr2]编辑命令' file...
       sed [options] "addr1[,addr2]编辑命令" file...   变量替换使用双引号
      
 正则表达式:
     基本的
        字符:
           .
           []
           [^]
        次数
           *
           \?
           \{m,n\}
         锚定:
           ^
           $
           \<,\b
           \>,\b
         分组:
          \(\)
         引用:
          \1,\2,……
     扩展:
        字符:
           .
           []
           [^]
        次数
           *
           ?
           {m,n}
           +
         锚定:
           ^
           $
           \<,\b
           \>,\b
         或:
           a|b
         分组:
          \(\)
         引用:
          \1,\2,……
    sed '地址定界s@查找条件@替换文件@'
       修饰符:
          g:global,全局替换
          i:ignore-case,不区分字符大小写

awk命令:
   awk:报告生成工具
       把文件中读取带的每一行的每个字段分别进行格式化,而后进行显示:

       支持使用变量、条件判断、循环、数组

    awk --> new awk --> nawk

    gnu awk --> gawk


  选项:
    -f:切割符
    $0:整行
    $1,$2.....:位置参数


  用法格式:
     awk [options] 'script' file...
     awk [options] '/pattern/{action}' file...

     action: print $1,$2

     模式:
       地址定界:/pat1/,/pat2/ 一个范围
                /pattern/ 被匹配到的行
                experssion 表达式
                   >,>=,<,<=,==,!=,~(模式匹配)
        begin:执行前操作
        end:执行后的收尾  操作

  awk的常用四种分隔符:
      输入:
          行分隔符
          字段分隔符
      输出:
          行分隔符
          字段分隔符
 
  awk的内置变量
    nf:最后一个字段
    fs: 指定输入分隔符 在begin中定义,指定时要使用""
    默认为空白
    ofs:输出时指定的分隔符,在begin中定义,指定时要使用"",默认为空白

 

                                                                               安装丶bash丢失丶dhcp丶pxelinux

anaconda:fedora,linux的安装程序


anaconda:将安装分成两个阶段
    安装前配置阶段
        键盘类型
        安装过程中的语言
        支持的语言
        时区
        选择要使用的磁盘设备
        分区格式化
        选择要安装的程序包
        管理员密码
        是否使用iptables
        是否启用selinux
    安装阶段
        在目标磁盘上根文件系统
        将选定的程序包安装至目标磁盘

如何启动安装过程
  mbr:bootloader,本身可启动的安装光盘
  网络启动安装过程
  可移动设备,便携式设备

简装光盘:只有isolinux,能够启动安装过程的

anaconda的配置文件称为kickstat

安装前配置阶段:
     配置的选项:
          必选项:
          可选项:

kickstart文件的组成部分:
    命令段:用于配置系统
        install
        firewall
        part
        lvm
    软件包:指定要安装的程序包及程序包组
    %packages 标识
      @base:使用@指定包组
      lftp:直接写程序包名
      tree:
      每行一个  
    注意:在程序包前加-,不安装相关包
     %end :软件包结束
    脚本段:
       %pre:安装过程开始前的预备脚本
            所能执行的操作较小,它是一个首先得环境,因为其是仅有简装版的shell环境
       %post:所有的软件完成之后执行的脚本
            此时,具有完整意义上的shell环境,但并非所有命令都安装,先确保所有的程序包已经安装

以光盘为例:
     mbr-->bootloader,isolinux/
     安装树:

     noparport:不探测硬件  


启动安装界面时,boot提示符后,可以向安装内核传递许多的配置参数,用于指定安装过程的特性
boot:
   test:文本安装界面
   graphical:图形安装界面
   askmethod:提示用户指定安装方法,让用户选择使用的安装树
   asknetword:提示用户在安装过程中使用网络功能,并提示用户配置网络地址
   dd:提示用户指定一个驱动程序所在的设备
   ks=:指定一个安装过程使用的kickstart文件
      ks={http|https}://<sevrer>/<path>
      ks=cdrom:/<path>
      ks=nfs:<server>:/<path>
    repo=:指定安装树位置
        repo=ftp://<path>
        repo={http|https}://<path>
        repo=nfs:<path>
    ip:
    netmask:
    gateway:
    dns:
    noipv6:


    http://172.16.0.1/centos6.x86_64.cfg

    成长是用来发现自己的过去是多么的操蛋


    centos:
     kickstart文件:命令段、软件包段、脚本段

     selinux限制进程的访问,
     permissive 记录到日志

    创建光盘映像

     mkisofs:-r -j -t -v --no-emul-boot --boot-load-size 4 --boot-info-table -v "centos 6.5 x86_64 boot(可改)" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/centos6.5.boot.iso(可改) linuxiso/
   
     光盘中的背景图片
     640*480

     dhcp server:告诉客户端到某一位置找一tftp server,向此tftp server要一个文件


     pxe:安装方式

     创建kickstart文件的方式:
        1,复制模板/root/anaconda-ks.cfg。而后使用vim编辑配置
        2.使用system-config-kiskstart来生成,建议使用/root/anaconda-ks.cfg 模板生成

 ksvalidator 检查kiskstart文件的配置是否存在问题

系统故障排除之:bash程序文件损坏
1.启动紧急救援模式
2.获取到bash的rpm包:
   mkdir /media
   mount -r /dev/dvd /media
   rpm -ivh bash-*.rpm --replacepkgs --root=/mnt/sysimage/
 紧急救援模式:启动了一个工作于光盘上的linux

arp

dhcp和pxe

dhcp:动态地址配置协议
  前身bootp:分配出去以后,将绑定
  leases,地址租约,地址池



  dynamic host configuration protocol

  c/s 模式
   server:dhcp server(运行dhcp服务)
     udp服务:67
   client:dhcp client(运行dhcp程序)
     udp服务:68
   udp:适合发送较小的数据报文,且对时效性要求较高

  a:dhcp discover
  s:dhcp offer(ip/netmask)
  a:dhcp request(确认使用)
  s:dhcp ack

  50%:dhcp request
      75%:dhcp request
         87.5%:dhcp request

  dhcp discover

  dhcp :
     ip,netmask,gateway,dns,ntp server,wins server,file

  dhcp client:
       169.254.x.x
        本地地址
  有两个进程
     一个dhcpd
     一个dhcrelay,中继


  dhcpd.conf大致可以分为四个区域:
    定义dhcpd自身的工作属性:
       log-facilify:日志facilify
    全局地址跟拍属性:options打头
      option router
    子网配置:
        通常每个作用域通过一个subnet定义
         subnet network_addr netmask netmask {


         }
    主机配置:
      通常为某特定mac地址固定的分配一个地址
         host ‘host id’ {
           hardware ethernet 08:00:07:26:c0:a5; mac地址
  fixed-address ip; ip地址
         }
日志服务的配置文件:/etc/rsyslog.conf

文件详解:
ption domain-name "example.org"; 搜索域
option domain-name-servers ns1.example.org, ns2.example.org; 全局默认网关
default-lease-time 600;默认租约期限
max-lease-time 7200;最长租约期限
#ddns-update-style none;动态dns
og-facility local7;日志反动地址
subnet 10.254.239.0 netmask 255.255.255.224 {
  range 10.254.239.10 10.254.239.20; 地址池
  option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org; 提供的网关
}

subnet 10.254.239.32 netmask 255.255.255.224 {
  range dynamic-bootp 10.254.239.40 10.254.239.60;向bootp提供服务
  option broadcast-address 10.254.239.31;广播地址
  option routers rtr-239-32-1.example.org;
}
subnet 10.5.5.0 netmask 255.255.255.224 {
  range 10.5.5.26 10.5.5.30;
  option domain-name-servers ns1.internal.example.org;
  option domain-name "internal.example.org";
  option routers 10.5.5.1;默认网关
  option broadcast-address 10.5.5.31;广播地址
  default-lease-time 600;
  max-lease-time 7200;
}

host fantasia {
  hardware ethernet 08:00:07:26:c0:a5; mac地址
  fixed-address fantasia.fugue.com; ip地址
}
class "foo" {
  match if substring (option vendor-class-identifier, 0, 4) = "sunw";
}定义函数,用来定义特定系统分配特定的地址

/var/lib/dhcpd有配置文件

dhcilent -d etho:/客户端重新获取dhcp地址

总结:dhcp dhcpd /etc/dhcp/dhcpd.conf /etc/rc.d/init/dhcpd /var/lib/dhcp,udp:67,68



pxe:preboot execution environment,启动前的执行环境
    
    client:网卡要支持网络引导

tftp trivial ftp:简单文件传输协议,高效传输小文件(udp:69)
   瞬时(非独立)守护进程:他们无需定义在运行级别下,只需要一次性的定义xinetd的运行级别
   独立(standalone)守护进程:能自我管理,无需xinted提供箭头服务的进程

超级守护进程:xinetd
   为那些极少接收用户请求的服务,专门提供监听功能
     tftp:udp:69
     
   瞬时守护进程基于xinetd的配置文件:/etc/xinted.d/service_name
   独立守护进程:能自我管理,无须xinetd提供监听服务的进程
 
   chkconfig xinetd on
   service xinetd start

   chkconfig service_name on
   service xinetd restart

  linux上的tftp:
    服务器:tftp-server
    客户端:tftp
在dhcp添加
    next-server ip地址
    filename="pxelinux.0"


配置步骤:
前提:需要安装apache服务器,并启动httpd服务!
 mkdir /media/cdrom
 mount -r /dev/dvd /media/cdrom
 vi /etc/yum.repo.d/
1.配置dhcp服务器
yum -y install dhcp
vim /etc/dhcp/dhcpd.conf
自定义subnet{
    ...
    next-server
    filename ""
}
 service dhcpd restart
 tail -f /var/log/boot.log
2配置tftp-server
yum -y install xinetd tftp-server tftp
chkconfig xinetd on
chkconfig tftp on
service xinetd start
3准备安装树
mkdir /var/www/html/centos6
mount --bind /media/cdrom /var/www/html/centos6
service httpd start
4.准备tftpboot下的文件
yum -y install syslinux
cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
cp /media/cdrom/isolinux/{boot.msg,vesamenu.c32,splash.jpg} /var/lib/tftpboot/
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
mkdir /var/lib/tftpboot/pxelinux.cfg
cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

5.提供kickstart文件
注意:url及repo后的路径要修改为可用安装树的路径;
url --url=http://192.168.48.128/centos6
repo --name="centos-6.5"  --baseurl=http://192.168.48.128/centos6
编辑好kickstart文件后保存至/var/www/html目录下;假设为ks.cfg

6)配置引导程序能自动加载kickstart文件。
编辑/var/lib/tftpboot/pxelinux.cfg/default
在label为linux项的append一行后附加:
    ks=http://192.168.48.128/ks.cfg

        



selinxu:secure enhenced linux

获取selinux的当前状态:
getenforce
临时启用或禁用
setenfoce 0|1

永久启用:/etc/sysconfig/selinux
      /etc/selinux/config

     selinux={enforcing|permissove|disabled}


 ls -z:查看
 mac:强制访问控制

                                                                                         openssl丶ssh丶脚本信息捕获

passwd:
   加密方式:
       对称加密、公钥加密、单向加密
    加密、解密
    明文:plaintext,cleartext -->密文 -->

    对称加密:
       加密算法+口令
          明文 --> 密文

          字典攻击
          加密方,解密方使用同一个口令
          des(56bits):数据加密标准
          3des
          aes(128bits):高级加密标准
          blowfish
          twofish
          idea
          rc6
          cast5
          serpent
          特性:
          1.加密/解密使用统一口令
          2.将原文分割成固定大小的数据块,对这些块进行加密
            ecb,cbc

          1.口令传输
          2.密钥太多

        密钥交换:
        用户认证:
        数据完整性:

   密钥交换(ike:inernet key exchange):dh算法

   非对称加密:公开公钥,私钥私有,只有一组密钥对(公钥和私钥组成)才能对消息进行加密和解密,公钥和私钥都能进行加密或者解密。公钥一般来加密数据,私钥一般来签名数据。
      加密算法:rsa,eigmal,dsa
      1.密钥交换
      2.用户身份认证
    单向加密:
     抽取数据特征码:
       md5,sha1,sha512,crc-32(循环冗余校验码)
      1.完整性,

      消息认证算法:mac(message authenntication codes)
        cbc-mac
        hmac

        雪崩效应
        定长输出:
使用私钥钥来加密特征码(保留数据的完整性)和数据(保证数据的来源)再将两者进行对称加密(速度快),接着再用对方的公钥来加密密码(保证安全性)

 pki:pubile key infrastucture 公钥基础设施

 openssl gpg

 openssl:套件,开源程序
     libcrypto:通用功能的加密库
     libssl:用于实现tlx/ssl的功能
     openssl:多功能命令工具
         生成密钥,创建数字证书,手动加密解密数据
 加密解密技术常用的功能及算法:
   对称加密:
     工具:gpg openssl enc
     加密:openssl enc -des3 -a -salt -in /ets/fstab -out /tmp/fstab.cipher
     解密:openssl enc -d -dec3 -a -salt -in /tmp/fstab.cipher  -out 文件

   单向加密:
     特性:one-way
           collision-free:
     算法
      md5:128bits
      sha1:160bits
      sha512:512bits
     工具:sha1sum,md5sum,openssl dgst
      openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1][-out filename] /path/to/somefile
   mac:信息摘要码,单向加密的延伸应用
       应用:用于实现在网络通信中保证所传输的数据完整性
       机制:
           cbc-mac
           hmac:使用md5和sha1算法
   用户认证:每一个用户的密码即使是相同的,他们的加密方式也不同,因为是不同用户。可以指定-salt string 即可生成相同的加密
       工具:passwd openssl passwd
 
    公钥加密:公钥加密,私钥解密
       密钥对:
          公钥:pkey
          私钥:skey

       算法:rsa,eigamal

       工具:gpg openssl rsautl

    数字签名:私钥加密,公钥解密
       算法:rsa,eigamal,dsa

       dsa:digital signature algorithm
       dss: digital signature standard
    密钥交换:ike
       算法:dh(diffie-hellman),公钥加密

    数字证书:
    第三方机构使用一种安全的方式把公钥分发出去
       证书格式:x509,pkcs家族
         x509格式:
           公钥和有效期限:
           持有者的个人合法身份信息;(主机名),所以输入主机名所对应的ip地址,有可能会访问不到。
           证书的使用方式
           ca的信息
           ca的数字签名

        谁给ca发证:自签署证书
   用户
    1.生成一对密钥
    2.把所需信息和公钥按固定格式制作成证书申请
   ca机构
    1.自签证书
    2.签署证书
    3.传给用户
    4.维护吊销列表
    openca
用openssl实现是有ca
配置文件/etc/pki/tls/openssl.cnf
命令:
谁给ca发证:自签署证书

    用openssl实现私有ca:
            配置文件:/etc/pki/tls/openssl.cnf

        生成密钥对儿:
            # (umask 077; openssl genrsa -out private/cakey.pem 2048)
            
            如果想查看公钥:
                # openssl rsa -in private/cakey.pem -pubout -text -noout

        生成自签证书:
            # openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655

        
    用openssl实现证书申请:

        在主机上生成密钥,保存至应用此证书的服务的配置文件目录下, 例如:
            # mkdir /etc/httpd/ssl
            # cd /etc/httpd/ssl
            # (umask 077; openssl genrsa -out httpd.key 1024)

        生成证书签署请求:
            # openssl req -new -key httpd.key -out httpd.csr

        将请求文件发往ca;
                                               #  scp httpd.csr  192.168.48.128:/tmp/

    ca签署证书:
        签署:
            # openssl ca -in /path/to/somefile.csr -out /path/to/somefile.crt -days days

        将证书传回请求者

    吊销证书:
        # openssl ca -revoke /path/to/somefile.crt





speed 测试当前系统上的加密算法的性能
version: 版本
s_client ssl/tls client program 测试连接性的
rand:用来生成伪随机数字
   openssl rand -hex #

openssl:私有ca
  证书格式
         公钥和有效期限:
         持有者的个人合法身份信息;(主机名)
         证书的使用方式
         ca的信息
         ca的数字签名


对称加密:数据私密性
公钥加密:密钥交换(对方的公钥)、数据加密(对方的公钥)、身份认证(自己的私钥)
单向加密:hash码,only-way hash
openssl补充材料:

        openssl中有如下后缀名的文件
        .key格式:私有的密钥
        .crt格式:证书文件,certificate的缩写
        .csr格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写
        .crl格式:证书吊销列表,certificate revocation list的缩写
        .pem格式:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式
        
        常用证书协议
        x509v3: ietf的证书标准
        x.500:目录的标准
        scep:  简单证书申请协议,用http来进行申请,数据有pkcs#7封装,数据其实格式也是pkcs#10的
        pkcs#7:  是封装数据的标准,可以放置证书和一些请求信息
        pkcs#10:  用于离线证书申请的证书申请的数据格式,注意数据包是使用pkcs#7封装这个数据
        pkcs#12:  用于一个单一文件中交换公共和私有对象,就是公钥,私钥和证书,这些信息进行打包,加密放在存储目录中,cisco放在nvram中,用户可以导出,以防证书服务器挂掉可以进行相应恢复。思科是.p12,微软是.pfx



ssl:网景公司开发
 secure scocket layer
  安全的套接字层

tls:transport layer security
    安全的传输层

远程登录:
 telnet

telnet服务:明文传输
   监听tcp协议的23号端口
   ss -tan |grep 23

   禁止管理员直接登陆
      使用普通用户登录。而后su到管理员

ssh:secure shell
 监听tcp协议的22号端口
 /etc/services 解析库,进程<->端口
   ssh文本协议:字符通信

 sshv1,sshv2
    由于sshv1是居于crc-32做mac,因此,不安全,建议勿用
    sshv2 基于双发主机协商选择最安全的mac实现机制
       加密机制和mac机制是双方协商选定
       基于dh实现密钥交换,基于rsa或das实现身份认证
       客户端通过检查服务端的主机密钥来判断是否与其进一步通信

 openssh(c/s)
   server:监听tcp22
   client:程序
 windows客户端:xmanager(xshell)、securecrt、putty、sshshellcilent

 openssh客户端组件:
    ssh
       ssh username@host [command]
       ssh -l username host [command]
          -p port:指定要连入端口

    ssh认证机制:
       基于口令
       基于密钥
          客户端在本地生成一对密钥
          客户端将公钥复制到服务器,要登陆的用户的家目录下的隐藏目录.ssh中的一个名为authorized_keys或authorized_keys2中
       配置过程:
         1.生成密钥对,客户端
            ssh-key -t rsa
             生成的密钥默认保存至当前家目录下的.ssh下的id_rsa,公钥在id_rsa.pub
          文件中
          2.复制密钥至远程主机:
             ssh-copy-id -i 公钥文件 登陆用户@远程ip地址
    scp:类cp命令,基于ssh协议跨主机复制
       scp src1 src2 .... dest
       分两种情况:
         1.源文件在本机,目标为远程
         scp /path/to/somefile ....  username@host:/path/to/somewhere
         2.源文件在远程,目标在本机
          scp username@host:/path/to/somefile /path/to/somewhere

         -r当源文件为目录,以实现递归复制
         -p:保留源文件的复制及修改时间戳,以及权限
         -q:静默模式
         -p port:指定服务器端口

    sftp:是基于ssh的ftp协议
     只要openssh的服务器端有以下项,则代表支持sftp
     subsystem    sftp    /usr/libexec/openssh/sftp-server

     用法: sftp[username@]host

服务器端:sshd
   配置文件 /etc/ssh/sshd_config
   服务脚本 /etc/rc.d/init.d/sshd
   脚本配置文件:/etc/sysconfig/sshd

   查看config文件的帮助
       man sshd_config
       listernaddress 当前主机的监听地址
       protocol 协议版本
       # hostkeys for protocol version 2
       #hostkey /etc/ssh/ssh_host_rsa_key
       #hostkey /etc/ssh/ssh_host_dsa_key
       验证主机的公钥
       #keyregenerationinterval 1h  密钥的使用时间
       #serverkeybits 1024 密钥长度
       #loglevel info 日志级别
       #logingracetime 2m 登陆宽限期
       #permitrootlogin yes root是否可以登录
       #strictmodes yes 严格模式,家目录 属主 属组
       #maxauthtries 6 最多可以承受的次数
       #maxsessions 10
       最大的连接数
       passwordauthentication yes 是否使用用户名和密码的方式
       kerberos集中认证管理
       x11forwarding yes 是否转发图形窗口
       allowusers user1 user2
       用户白名单
       allowgroups 组白名单
       denyuser 用户黑名单
 
用户登录信息获取
  lastlog:显示用户最近一次的登录信息,成功的 /var/log/wtmp
  lastb:显示用户登录的信息,并尝试失败的 /var/log/btmp
  用户成功登陆的日志信息
  last



使用ssh的最佳方式
1)only use ssh protocol 2
2)limit users ssh access
    allowusers root vivek jerry
    白名单
    denyuser saroj anjali foo
    黑名单
3)configure  idle log out timeout interval 配置空闲超时长。
    clientalivecountmax 300
    clientaliveinterval  0
4)firwall ssh port # 22
    使用iptables设置ssh服务安全访问策略
5)change ssh port and limit ip binding
    port 300
    listaddress 192.168.1.5
    listenaddress 202.54.1.5
    勿使用默认22端口
6)use strong ssh passwords and passphrase  
    genpasswd(){
        local 1=$1
            [ "$1" == "" ]&& 1=20
            tr -dc a-za-z0-9_</dev/urandom | head -c ${1} | xargs
    }
使用足够长足够复杂的密码,且定期更换。
7)use public key based authentication
使用公钥认证。
8)disable empty password
9)thwart ssh crakers (brute  force attack)
google:ssh best practice
10)rate-limit incoming port # 22 connections
限制ssh访问频度
11)use log analyzer
    记录好日志,经常做日志分析。

总结:ssh,scp.sftp,sshd
      ssh /etc/ssh/ssh_config
      sshd /etc/ssh/sshd_config

bash编程的信号捕获
  trap 陷阱
  trap ‘command’ signal
  kill -l
  kill无法捕捉

  信号捕捉用于:在中途中止时做一些清理操