一、计算机的登录

    计算机终端设备通过输入用户账户标识和与之对应的口令的方式被计算机验证的过程。

      终端的分类:

        1)物理终端:计算机本身的控制台设备:通常将其标识为"pty",在现代计算机上,物理终端与早期的计算机上的物理终端的意义不一样了。在现在的linux系统上,物理终端设备被映射到/dev/console上,所有内核输出的信息都输出到console终端,除此之外,其他用户进程输出的信息一般都输出到虚拟终端或伪终端

2)虚拟终端:在现代的计算机中,通常将键盘+显示器组合称作"虚拟终端"或者"虚拟控制台",即一个虚拟的终端设备,通常将其标识为"tty"

3)串行终端:如果服务器上没有装载显卡设备,就可以使用串行终端设备连接计算机,通常将其标识为"ttyS"

4)模拟终端:伪终端,通过网络客户端工具或图形终端下开启的命令行终端,都称为伪终端;通常将其标识为"pts",基于网络的远程连接会在/dev/pts目录下生成一个新的设备文件


二、Telnet工具

    C/S结构的程序,默认情况下不允许管理员直接实施远程登录,如果想使用root用户,则需要用其他用户登录后使用su命令进行切换

    服务器端使用Telnet-server程序包,通过23号端口进行监听,客户端使用telnet程序包进行链接。


    1.在需要被链接的主机(服务器端)中打开Telnet-server

        在Centos 5,6中打开Telnet-server             

    关闭防火墙和SElinux

        service iptables stop

        sentenforce 0


    启动telnet服务

        chkconfig telnet on 或者修改 /etc/xinetd.d/telnet 文件中disable一行为no

        service xinetd restart|reload


    检测服务是否启动:

        ss -tnl | grep :23


        在Centos 7中打开Telnet-server       

            关闭防火墙和SElinux

        systemctl disable firewalld.service

        systemctl stop firewalld.service

        iptables -F

        setenforce 0


    启动 telnet服务

        systemctl start telnet.socket


    检测服务是否启动:

        ss -tnl | grep :23


    2.在其他主机使用Telnet命令进行链接

        ]#Telnet IP_ADDRESS


三、Openssh应用  

    1.Openssh应用的组成

服务器端:

    应用程序:sshd

            配置文件:/etc/ssh/sshd_config


客户端:

    应用程序:ssh,scp,sftp

    配置文件:/etc/ssh/ssh_config


    

    2.SSH提供的认证方式:

1)基于口令的认证:

    使用远程服务器上的有效用户账户和该用户的口令,进行身份认证;

    需要在网络中传递被加密的用户名和口令信息;有被拦截和破解的风险;


2)基于密钥的认证:

    用户在客户端提供一对密钥,私钥保存在客户端,公钥保存在远程服务器的某个用户的家目录下;

    使用私钥加密一段数据,如果服务器可以使用对应的公钥进行解密,则说明认证成功,可以继续后续通信;

    在整个过程中不涉及用户名和密码等敏感信息的传递;


    3.客户端程序:ssh

        ssh [options] [user@]hostname [command]

        选项:

            -l login_name:指定此次使用哪个用户进行远程登录;如果使用了该选项,则hostname前面就不能再使用"user@"

                ssh ppp213@192.168.43.159  相当于  ssh -l ppp213 196.168.43.159

            -p port:指明访问服务器的具体哪个服务端口,省略该选项,默认是22,一般服务器中出于安全考虑会将监听端口改为其他,此时可以使用此选项可以指定需要访问的端口号

            -b bind_address:指明此次访问服务器时的源IP地址;省略该选项,则从当前客户端所有有效的IP地址中,选择一个            

            -X:支持X11转发功能,当客户端使用SSH协议远程连接到服务器时,可以在客户端打开图形界面的配置窗口;

    -Y:支持受信任的X11转发;功能与-X相似;

            -o option=value                    

                在实施远程连接时,引入特定的功能或以特定的方式对服务器进行访问;


                注意:-o选项所能够使用的配置内容非常复杂,通常会将常用的此类功能选项直接写到ssh客户端的配置文件中(/etc/ssh/ssh_config);

格式为:

    HOST pattern

OPTION1 value1

OPTION2 value2

...

        

    4.客户端基于密钥的验证机制   

ssh-keygen命令:用于创建密钥对

    格式:

ssh-keygen [-q] [-b bits] [-t type] [-P passphrase] [-f output_keyfile]

常用选项:

    -q:安静模式;

    -b bits:指定创建的密钥的长度;

                RSA:最少768bits,默认是2048bits;

        DSA:显式给出1024bits;

        ECDSA:256bits, 384bits, 521bits;

        ED25519:只是使用固定长度的密钥而忽略-b选项指定内容;

            -t type:指明公钥加密算法的类型;

在SSHv2协议中可以使用上述四种算法;

    -P passphrase:指定加密私钥文件的口令;

    -f output_keyfile:生成的密钥文件保存的路径;


示例:

    ~]# ssh-keygen -t rsa -P '123456' -f .ssh/id_rsa

    

                    创建出来的私钥文件为/root/.ssh/id_rsa,公钥文件为/root/.ssh/id_rsa.pub



ssh-copy-id命令:用于将创建的公钥复制到目标服务器指定用户的家目录中

    示例:

~]# ssh-copy-id -i .ssh/id_rsa.pub root@196.168.43.159

    

            通过以上命令添加公钥后,再次远程登录时无需输入密码,拷贝后的公钥存放在服务器端的/root/.ssh/authorized_keys文件内。


    

    5.客户端程序:sshd        

        配置文件:/etc/ssh/sshd_config

    配置指令的格式:

指令 值


    常用的指令:

        Port 22:指明sshd服务进程要监听的端口号;建议改为非22号端口;

ListenAddress 0.0.0.0:指明sshd服务进程监听的IP地址,建议某个固定的IP地址;0.0.0.0表示当前主机上所有的可用IP地址;

        Protocol 2:ssh协议的版本;

LoginGraceTime 2m:登录时,输入密码操作的最大时长;

PermitRootLogin yes:是否运行root用户直接进行远程登录;在生产环境中,强烈建议禁用此功能;

UseDNS no:是否允许使用DNS反向解析主机名;建议关闭此功能;

AllowUsers user1 user2 ...:设置登录用户的白名单;

AllowGroups group1 group2 ...:设置组的白名单;

DenyUsers user1 user2 ...:设置登录用户的黑名单;

DenyGroups group1 group2 ...:设置组的黑名单;


    如果对此配置文件中的指令进行了修改,那必须要让sshd进程重新读取配置文件的内容才能使新配置生效;

CentOS 5、6:

    ~]# service sshd reload

        CentOS 7:

    ~]# systemctl reload sshd


        ssh服务的最佳实践方案:

    1)更换服务端口,不要使用默认的22号端口;

    2)禁止使用sshv1;

    3)合理的设置登录用户的黑名单和白名单;

    4)设置空闲会话的超时时间,将其改的短一些;

    5)需要利用防火墙来配合设置ssh的安全访问规则;

    6)监听固定的IP地址而不是0.0.0.0;

    7)如果必须使用口令认证机制,则需要使用足够复杂的密码;

~]# tr -dc A-Za-z0-9 < /dev/urandom | head -c 30 | xargs

~]# openssl rand -base64 30 | head -c 30 | xargs

    8)建议最好使用基于密钥的认证机制;

    9)禁止用户使用空密码登录;

    10)禁止root用户直接进行远程登录;

    11)限制ssh的密码失败频度和并发数;

    12)做好日志记录,并经常分析日志内容;


    6.基于SSH协议的安全复制命令:scp        

        两种使用情形:

    推送:PUSH,将客户端的文件发送到服务器端

scp [option...] /PATH/FROM/LOCAL_FILE [user@]hostname:/PATH/TO/DESTINATION_REMOTE_FILE


    拉取:PULL,将服务器端的文件拉取到客户端

scp [option...] [user@]hostname:/PATH/FROM/REMOTE_FILE /PATH/TO/LOCAL_FILE 

常用选项:

    -r:递归复制,可以复制目录;

    -p:保留源文件中的权限信息;

    -q:安静模式;

    -P port:指定远程主机的sshd进程监听的服务端口;

    

    7.安全ftp传输协议:sftp

        基于SSH协议的FTP协议,FTP协议本身明文传送,不安全,基于SSH加密后安全性更高。除此之外还有基于SSL协议的FTP协议(ftps)。       

        本身是C/S架构的程序

            服务器:sftp-server, 由sshd进程管理的一个子服务项目,是sshd的一个子系统;在CentOS中默认是开启的

            客户端:stfp命令


        格式:

            sftp [user@]HOSTNAME


        常用命令:

            help 查看帮助

            ls

            cd

            get /PATH/TO/DESTINATION_REMOTE_FILE /PATH/FROM/LOCAL_FILE 从服务器下载文件

            put /PATH/FROM/LOCAL_FILE /PATH/TO/DESTINATION_REMOTE_FILE 从本地上传文件到服务器

            quit 退出