openssh遠程登陸服務器端和基於密鑰的認證機制

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.作好日誌記錄,並常常分析日誌內容;linux

OpenSSH:
在linux系統上實現ssh協議的應用程序;實施遠程登陸服務器端;算法

登陸:login,登入
    計算機終端設備經過輸入用戶帳戶標識和與之對應的口令的方式,被計算機驗證的過程就是登陸;

終端:Terminal,完整的稱呼是"終端設備",是計算機中的外圍設備,主要用於用戶信息的輸入和計算機計算結果的輸出;
    終端的分類:
        物理終端:計算機自己的控制檯設備;一般將其標識爲"pty";在現代計算機上,物理終端與早期的計算機上的物理終端的意義不同了。在如今的Linux系統上,物理終端設備被映射到/dev/console上,全部內核輸出的信息都輸出到console終端,除此以外,其餘用戶進程輸出的信息通常都輸出到虛擬終端或僞終端上;

        虛擬終端:在現代的計算機中,一般將鍵盤+顯示器組合稱做"虛擬終端"或者"虛擬控制檯",即一個虛擬的終端設備;一般將其標識爲"tty";

        串行終端:若是服務器上沒有裝配顯卡設備,就可使用串行終端設備鏈接計算機,一般將其標識爲"ttyS";

        模擬終端:僞終端,經過網絡客戶端工具或圖形終端下開啓的命令行終端,都稱爲僞終端;一般將其標識爲"pts"

遠程登陸:
    Telnet:
        C/S結構,默認不容許管理員直接實施遠程登陸;
            Client:telnet
            Server:telnet-server
                Socket:23/TCP

        安裝telnet-server, telnet程序包,本地光盤yum倉庫中;

        CentOS 5,6:
            關閉防火牆和SELinux;
                service iptables stop
                setenforce 0

            啓動telnet服務:
                chkconfig telnet on
                service xinetd restart|reload

            檢測服務是否啓動:
                ss -tnl | grep :23

        CentOS 7:
            關閉防火牆和SELinux;
                systemctl disable firewalld.service
                systemctl stop firewalld.service
                iptables -F
                setenforce 0

            啓動telnet服務:
                systemctl start telnet.socket

            檢測服務是否啓動:
                ss -tnl | grep :23

            注意:telnet服務出於安全考慮,默認不容許root用戶直接登陸;但可使用普通用戶登陸以後,利用su命令切換至root用戶登陸;

    SSH:Secure SHell;
        其目的旨在取代較早的很是不安全的telnet協議,實現安全的遠程登陸;
            C/S結構;
                Client:Xshell,OpenSSH(ssh,scp,sftp),SecureCRT,sshsecureshellclient,putty;
                Server:OpenSSH(sshd),dropbear
                    Socket:22/TCP

    SSH提供的認證方式:
        基於口令的認證:
            使用遠程服務器上的有效用戶帳戶和該用戶的口令,進行身份認證;
            須要在網絡中傳遞被加密的用戶名和口令信息;有被攔截和破解的風險;

        基於密鑰的認證:
            用戶在客戶端提供一對密鑰,私鑰保存在客戶端,公鑰保存在遠程服務器的某個用戶的家目錄下;
            使用私鑰加密一段數據,若是服務器可使用對應的公鑰進行解密,則說明認證成功,能夠繼續後續通訊;
            在整個過程當中不涉及用戶名和密碼等敏感信息的傳遞;

    SSH協議:
        v1:不安全,禁用;
        v2:當前流行的安全應用協議;

Openssh
openssh應用程序的組成:
服務器端:
應用程序
sshd
配置文件
/etc/ssh/sshd_configshell

客戶端:
        應用程序:
            ssh, scp, sftp
        配置文件:
            /etc/ssh/ssh_config

客戶端程序:
    ssh命令:
        ssh - OpenSSH SSH client (remote login program)

        ssh [options...] [user@]hostname [command]
            經常使用選項:
                -l login_name:指定這次使用哪一個用戶進行遠程登陸;若是使用了該選項,則hostname前面就不能再使用"user@";
                    注意:若是既沒有指定此選項,有沒有在hostname前面指定"user@"用戶名前綴,SSH協議的客戶端程序會默認使用客戶端本地登陸的用戶帳戶做爲這次遠程登陸的用戶名;

                -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
                                ...

        基於密鑰的認證機制:
            1.建立密鑰對兒:
                ssh-keygen命令:
                    ssh-keygen — authentication key generation, management and conversion
                    格式:
                        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

            2.將上一步驟中生成的公鑰複製到目標服務器指定用戶的家目錄中:
                ssh-copy-id命令:

                示例:
                    ~]# ssh-copy-id -i .ssh/id_rsa.pub root@172.16.67.1

            3.登陸測試:
                在客戶端執行下列命令:
                    ~]# ssh -l USER hostname
                    ~]# ssh USER@hostname

    scp命令:基於ssh協議的cp命令;安全複製命令;
        scp - secure copy (remote file copy program)
            兩種使用情形:
                推送: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進程監聽的服務端口;

    sftp:
        FTP over ssh
        FTP over ssl(ftps)

        C/S架構:
            S:sftp-server, 由sshd進程管理的一個子服務項目,是sshd的一個子系統;在CentOS中默認是開啓的;
            C:sftp命令

        sftp [user@]HOSTNAME

        sftp> help
        sftp> get
        sftp> put
        ...

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用戶直接進行遠程登陸;在生產環境中,強烈建議禁用此功能;
            PasswordAuthentication yes:是否開啓口令認證機制;
            UseDNS no:是否容許使用DNS反向解析主機名;建議關閉此功能;
            AllowUsers user1 user2 ...:設置登陸用戶的白名單;
            AllowGroups group1 group2 ...:設置組的白名單;
            DenyUsers user1 user2 ...:設置登陸用戶的黑名單;
            DenyGroups group1 group2 ...:設置組的黑名單;

        若是對此配置文件中的指令進行了修改,那必需要讓sshd進程從新讀取配置文件的內容才能使新配置生效;
            CentOS 五、6:
                ~]# service sshd reload
            CentOS 7:
                ~]# systemctl reload sshd
相關文章
相關標籤/搜索