1. 程式人生 > >ssh驗證和端口轉發

ssh驗證和端口轉發

securecrt ssh服務器 驗證方式 nom 基於 查找 適合 cli 80端口

ssh 服務登錄驗證

    ssh 服務登錄驗證方式:
        用戶/ 口令
        基於密鑰
    基於用戶和口令登錄驗證
        客戶端發起ssh請求,服務器會把自己的公鑰發送給用戶
        用戶會根據服務器發來的公鑰對密碼進行加密
        加密後的信息回傳給服務器,服務器用自己的私鑰解密,如果密碼正確,則用戶登錄成功
    基於用戶名口令登錄驗證

    基於密鑰的登錄方式
        1。首先在客戶端生成一對密鑰(ssh-keygen) 
        2。並將客戶端的公鑰ssh-copy-id拷貝到服務端
        3。 當客戶端再次發送一個連接請求,包括ip 、用戶名
        4。 服務端得到客戶端的請求後,會到authorized_keys中查找,如果有響應的IP和用戶,就會隨機生成一個字符串,例如:acdf
        5。 服務端將使用客戶端拷貝過來的公鑰進行加密,然後發送給客戶端
        6。 得到服務端發來的消息後,客戶端會使用私鑰進行解密,然後將解密後的字符串發送給服務端
        7。 服務端接受到客戶端發來的字符串後,跟之前的字符串進行對比,如果一致,就允許免密碼登錄

基於key 認證

    ssh-keygen
        ssh-keygen - authentication(證明)key generation, management and conversion(轉化)
            ssh-keygen [options]
                -t type     指定密鑰創建的類型
                -P  phrase 提供老的密碼
                -f  指定密鑰文件
                -p  更改私鑰文件的密碼
                -i  導入到openssh密鑰文件
    ssh-copy-id
        ssh-copy-id - install your public key in a remote machine’s authorized_keys
        ssh-copy-id [-i [identity_file]] [user@]machine
    ssh-add
        ssh-add - adds private key identities to the authentication agent
            ssh-add [-n [-T token]] [-e pkcs11] [-s pkcs11] [-cDdLlXx] [-t life] [file ...]
    基於密鑰的認證:
        1。在客戶端生成密鑰對
            ssh-keygen -t rsa [-P ‘‘] [-f “~/.ssh/id_rsa"]
        2。把公鑰文件傳輸至遠程服務器對應用戶的家目錄
            ssh-copy-id [-i [identity_file]] [user@] host
        3。測試,完成
    可以給私鑰加口令 :
            ssh-keygen –p
    私鑰加口令後使用代理。
        啟動代理
            ssh-agent bash
        當你輸入一次私鑰的口令後,代理(authentication agent )保存口令,幫你下次自動登錄,但當你註銷後,代理程序關閉了。
        要想再使用代理,就需要再此啟動並ssh-add,才能有用。
        在GNOME中,代理被自動提供給root用戶,否則運行ssh-agent bash
    私鑰口令通過命令添加給代理
        ssh-add
    在SecureCRT或Xshell實現基於key驗證
        在SecureCRT 工具—> 創建公鑰—> 生成Identity.pub 文件轉化為openssh 兼容格式(適合SecureCRT ,Xshell 不需要轉化格式),並復制到需登錄主機上相應文件authorized_keys 中,註意權限 必須為600 ,在需登錄的ssh 主機上執行:
        ssh-keygen -i -f Identity.pub  >> .ssh/authorized_keys(secureCRT)

SSH 端口轉發

    SSH 端口轉發
        SSH會自動加密和解密所有SSH客戶端與服務端之間的網絡數據。
        但是,SSH 還能夠將其他 TCP 端口的網絡數據通過 SSH 鏈接來轉發,並且自動提供了相應的加密及解密服務,這一 過程也被叫做“隧道”(tunneling )。
        這是因為 SSH 為其他 TCP 鏈接提供了一個安全的通道來進行傳輸而得名,例如,Telnet、SMTP、LDAP 這些 TCP 應用均能夠從中得益,可以避免用戶名,密碼以及隱私信息的明文傳輸。
        與此同時, 如果工作環境中的防火墻限制了一些網絡端口的使用,但是允許SSH的連接 ,也能夠通過將 TCP 端口轉發來使用 SSH 進行通訊
            
    SSH 端口轉發能夠提供兩大功能:
        加密SSH Client 端至 SSH Server端之間的通訊數據
        突破防火墻的限制完成一些之前無法建立的TCP連接
    本地轉發:
        -L localport:remotehost:remotehostport sshserver
        選項:
            -f  後臺啟用
            -N  不打開遠程shell ,處於等待狀態
            -g  啟用網關功能
        示例
            A機器上為本地:
                當你訪問本機9527端口時,它會將請求轉發到B的sshd服務器上,ssh服務器收到解密後,將其再轉發到c的telnet服務器的23端口。
            前提:C機器上telnet服務打開,A和B機器上sshd服務打開,本機防火墻關閉
            ssh –L 9527:telnetsrvIP:23  -Nf sshsrvIP   (開通橋)
            telnet 127.0.0.1 9527
            data <- -> localhost:9527 <- -> localhost:XXXXX <- ->sshsrv:22 <- -> sshsrv:YYYYY <- -> telnetsrv:23
    遠程轉發:
        -R sshserverport:remotehost:remotehostport sshserver
        示例:
            
            B機器為本機:
                讓A機器sshsrv偵聽9527端口的訪問,如有訪問,A機器就加密後通過ssh服務轉發請求到B本機ssh客戶端,再由本機解密後轉發到smtpsrv:25
            ssh –R 9527:smtpsrvIP:25 –Nf sshsrvIP
            Data <- ->  remotesshsrv:9527 <- ->  remotesshsrv:22 <- -> localhost:XXXXX <- -> localhost:YYYYY(隨機端口) <- -> smtpsrv:25
            
    動態端口轉發:
        當用firefox訪問internet 時,本機的1080端口做為代理服務器,firefox 的訪問請求被轉發到sshserver 上,由sshserver替之訪問internet
            在本機firefox 設置代理socket proxy:127.0.0.1:1080
            ssh -D 1080 root@sshserver
        curl  --proxy   

X協議轉發

    所有圖形化應用程序都是X客戶程序
        能夠通過tcp/ip 連接遠程X服務器
        數據沒有加密機,但是它通過ssh連接隧道安全進行
    ssh -X user@remotehost gedit
        remotehost主機上的gedit 工具,將會顯示在本機的X服務器上
        傳輸的數據將通過ssh連接加密

ssh驗證和端口轉發