第289期 / November 5, 2021

分享到臉書!分享到維特!分享到噗浪!分享到Google+!分享到微博!轉寄友人友善列印

[技術分享]NonStop Server SSH架構與操作(上)

作者/馬先讓

[發表日期:2021/11/5]

作者簡歷

作者擁有26年IT服務資歷,現職凌群電腦NSK服務總處副總工程師,主要負責HPE Nonstop 證券、期貨、銀行客戶交易系統維運服務,專長為HPE NonStop系統整合。

前言

HPE NonStop SSH是一個綜合性Enterprise Secure Shell解決方案。SSH (Secure Shell)是一套網路連線協定,本期將介紹HPE NonStop SSH架構/安裝設定。

一、SSH產品介紹

SSH2支援Secure Shell協定Version 2,SSH2軟體包含了以下的檔案元件:
  • SSH2:SSH2是最主要執行的檔案,根據它在啟動的模式,它可以服務不同的目的:
    • 它如果當成Server process,它會聽特定的連線TCP/IP Port(通常為PORT 22),對使用者和服務進行身份驗證,然後建立連線。
    • 它使用SSHCOM管理SSH configuration database。
    • 使用者可以用SFTP或SSH client軟體與有啟動SSH daemon的系統做連線。


  • SSHOSS:它是一個執行在OSS環境下的Secure Shell client,與遠端SSH daemon連線。

  • SSH:它是一個執行在Guardian環境下的Secure Shell client,與遠端SSH daemon連線。

  • SFTPSERV:它透過SSH2啟動,每個連接到SSH2的SFTP client,SFPTSERV就會啟動,SFTPSERV處理SFTP client端要做的檔案傳送,SSH2的設定需設定是否允許SFTP功能。

  • SFTPOSS:執行在OSS環境的SFTP client。

  • SFTP:執行在Guardian環境的SFTP client。

  • SSHCOM:用來管理SSH環境

  • PAUTH:對系統使用者群的使用者密碼進行身份驗證。

  • STN:是一個pseudo TTY server,提供全螢幕shell給遠端SSH clients使用。

  • SCPOSS:當作一個SCP SERVER,由遠端SCP client執行shell指令啟動,系統目前未提供SCP client程式。


二、SSH架構概述

  • SSH2執行成SSH Daemon (Server)

    下圖為SSH2執行成SSH Daemon (Server)時,SSH2的元件如何運作;SSH processes提供了shell、file transfer、port forwarding access到遠端的SSH Clients,如同開源軟體的OpenSSH。


    《圖一》


    說明:

    SSH2元件接受遠端連線,根據使用者的資料庫對遠端使用者進行身份驗證,也可以使用PAUTH驗證使用者密碼。在收到請求後,可使用以下的服務:
    • 能獲得OSS Shell或TACL或SFTPSERV。
    • 連到一個PTY(pseudo terminal),由STN啟動的PTY server。
    • 轉發TCP/IP或FTP連線到local server process。

    使用者可以使用SSHCOM管理user database,允許管理者配置remote users public keys和控制對伺服器的功能和檔案傳輸的檔案系統的存取權限。


  • SSH2執行成SSH Client

    下圖為SSH2 執行成SSH Daemon Client時,SSH2的元件如何運作。


    《圖二》


    說明:

    SSH2當作SSH、SFTP或OSS環境的SSHOSS、SFTPOSS client 的介面,client元件透過SSH2傳送使用者指令到遠端的SSH daemon。SSH2元件透過TCP/IP連接到遠端系統建立SSH連線,client元件和SSH2元件透過$RECEIVE交換訊息,直到client端被使用者終止。

    此外,client也可建立port forwarding轉發TCPIP或FTP連線從local socket程式到遠端SSH Server。SSHCOM用於維護包含本地系統使用者的金鑰組,遠端密碼和遠端SSH主機公共金鑰。


三、快速啟動SSH2

此章節說明如何快速啟動SSH2環境並建立連線。

  • START the STN Pseudo Terminal Server

    若要讓遠端SSH clients得到一個全螢幕連線,必須啟動一個STN process 當作SSH2的PTY server,若不需要則不用啟動,在TACL環境下執行下面obeyfile:

    ALLOW ALL ERRORS

    ABORT PROCESS $ZZKRN.#SSH-PTYB
    DELETE PROCESS $ZZKRN.#SSH-PTYB

    ADD PROCESS $ZZKRN.#SSH-PTYB, &
    NAME $PTYB, PROGRAM $SYSTEM.ZSSH.STN, DEFAULTVOL $SYSTEM.SSHTEST, &
    HOMETERM $ZHOME, INFILE $ZHOME, OUTFILE $ZHOME, &
    AUTORESTART 10, SAVEABEND OFF, STARTMODE APPLICATION, PRIORITY 150, &
    STOPMODE STANDARD, CPU FIRSTOF (1,0)

    START PROCESS $ZZKRN.#SSH-PTYB

    說明:
    ‧STN Process Name等同以前的TELSERV Process Name。
    ‧指定STN DEFAULTVOL目錄。


  • To Start the SSH2 Component

    在TACL環境下執行下面Obeyfile:

    ALLOW ALL ERRORS
    ABORT PROCESS $ZZKRN.#SSH-ZSSHB
    DELETE PROCESS $ZZKRN.#SSH-ZSSHB

    ADD PROCESS $ZZKRN.#SSH-ZSSHB, &
    NAME $ZSSHB, PROGRAM $SYSTEM.ZSSH.SSH2, DEFAULTVOL $SYSTEM.SSHTEST, &
    HOMETERM $ZHOME, INFILE $ZHOME, OUTFILE $ZHOME, &
    AUTORESTART 10, SAVEABEND OFF, STARTMODE APPLICATION, PRIORITY 150, &
    STOPMODE STANDARD, CPU FIRSTOF (1,0), &
    STARTUPMSG "ALL;SUBNET $ztc0;PORT 7171;CONFIG $SYSTEM.SSHTEST.SSHBCFG"

    START PROCESS $ZZKRN.#SSH-ZSSHB

    說明:
    ‧啟動SSH2 process,並指定DEFAULTVOL目錄
    ‧指定要走那個TCPIP PROCESS:SUBNET $ztc0
    ‧指定要走那個PORT:PORT 7171
    ‧指定要讀那個CONFIG FILE:CONFIG $SYSTEM.SSHTEST.SSHBCFG, CONFIG FILE內要指定該SSH2要與那個STN PROCESS做連結,如下面紅色字串-PTYSERVER $PTYB

    SSH CONFIG FILE 內容如下:

    CUSTOMER HP
    AUTOADDSYSTEMUSERS TRUE
    STRICTHOSTKEYCHECKING FALSE
    CLIENTMODEOWNERPOLICY GUARDIANNAME
    PTYSERVER $PTYB
    SSHCTL SSHBDB
    SSHCTLAUDIT FALSE
    BACKUPCPU 0
    BANNER
    HOSTKEY HOSTKEYB
    #---------------------------------------
    # log configuration
    #---------------------------------------
    # SET THE LEVEL
    LOGLEVEL 50
    # Do not log to hometerm and EMS
    LOGCONSOLE *
    LOGEMS *
    # Log to log file
    LOGFILE $SYSTEM.SSHTEST.SSHBLOG

    #---------------------------------------
    # audit configuration
    #---------------------------------------
    # Turn on basic auditing
    AUDITFILE $SYSTEM.SSHTEST.AUDITB

  • 設定user

    採用SSH的連線方式,若要連線要有BLOCK MODE畫面,就必須啟動STN PTY server,它和傳統TELNET連線方式較大不同的地方在於透過SSH連線到系統時,SSH會先有USER的檢驗,所以會有USER的DATABASE,裡面對針對每個登入的USER做限制,該user name為連線時ssh的登入使用者,它可以是系統的user,或是自訂的user name。如登入的使用者採用系統的user,則可以不用先建立user,若是自訂的user,則需先建立,以下為加一個user的範例。

    open $zsshB
    DELETE USER SUPERID
    ADD USER SUPERID, SYSTEM-USER SUPER.SUPER, &
    ALLOWED-AUTHENTICATIONS (keyboard-interactive, password, publickey), &
    ALLOW-SHELL YES, ALLOWED-SUBSYSTEMS (sftp, tacl), ALLOW-TCP-FORWARDING YES, & CI-PROGRAM *MENU*

    說明:

    此範例為加一個SSH USER叫SUPERID,它登入後權限等同SUPER.SUPER,允許的驗證方式有4種(通常都用PASSWORD),該USER有權限使用SFTP和TACL,且能看到SERVER NAME(CI-PROGRAM *MENU*)。


四、SSH 設定與啟動

SSH2的啟動一定要用SUPER.SUPER才能啟動。以下介紹如何設定與啟動SSH。

  • 設定SSH2

    SSH有下列三種方式可以設定所需要的參數- Configuration file、PARAM commands、Startup command line parameters。

    • Configuration file
      編輯一個Configuration file,將所需的參數放到檔案內,它的寫法為


      《圖三》


      Parameter-name parameter-value。下面為範例:
      在啟動SSH2之前,將所需要的參數先宣告,宣告方式如下:
      PARAM
      假如parameter value 有包含一個或多個逗號,則parameter value要加雙引號””:
      PARAM ""

      下面為範例:
      PARAM PORT 22
      PARAM SUBNET $ZTC03
      RUN SSH2/ NAME $SSH02 / SERVER

    • Startup command line parameters

      在執行SSH2時,將參數一起加在同一個命令列中,參數中間用分號區隔,方式如下:

      ; ; ...

      下面為範例:
      PARAM CONFIG SSHCONF
      RUN SSH2 /NAME $SSH00, CPU 0, NOWAIT/ SERVER; SUBNET $ZTC0; PORT 22
      RUN SSH2 /NAME $SSH01, CPU 1, NOWAIT/ SERVER; SUBNET $ZTC1; PORT 22
      RUN SSH2 /NAME $SSH02, CPU 2, NOWAIT/ SERVER; SUBNET $ZTC2; PORT 22
      RUN SSH2 /NAME $SSH03, CPU 3, NOWAIT/ SERVER; SUBNET $ZTC3; PORT 22


  • 啟動SSH2

    SSH2必須由SUPER.SUPER才能啟動,啟動方式有兩種,一種直接從TACL指令啟動,一種設成Generic process(請參考快速啟動SSH2)。從TACL指令啟動方式如下:
    RUN SSH2 / runoptions / mode [ ; paramname paramvalue; ... ]
    runoptions:是標準的Guardian RUN選項,如IN、CPU、TERM
    Mode:是設定SSH啟動的模式,以下為MODE的模式:

    《圖四》


    paramname paramvalue:為SSH2的參數設定

參考資料

HPE NonStop SSH Reference Manual