bash盛り合わせ SSHコマンド自動化【作業用】

※※ 私用メモ

    RtnLine="${RtnLines[0]}"
    
    RtnItems=(`echo "${RtnLine}" | tr ',' ' '`)

    FTP_HOST="${RtnItems[0]}"
    FTP_USER="${RtnItems[1]}"
    FTP_DIR="${RtnItems[2]}"
    FTP_USER_PASS="${RtnItems[3]}"


    expect -c "
        set timeout 10
        spawn ssh ${FTP_USER}@${FTP_HOST}
        expect {
                default { exit 2}
                \"assword:\" { send \"${FTP_USER_PASS}\n\" }
        }
        expect \":~\"
        send \" コマンド命令文 \n\" ...N

        interact
    "
    
    if [ $? -eq 2 ]; then
        Abort 2 "接続タイムアウトを検知しました。"
    fi

## SSHコネクション作成自動化
    expect -c "
        set timeout 10
        spawn ssh ${FTP_USER}@${FTP_HOST}
        expect \"Are you sure you want to continue connecting (yes/no)?\" {
                send \"yes\n\"
                expect -re \".* password\:\"
                send \"${FTP_USER_PASS}\r\n\"
        } \".* password\:\" {
                send \"${FTP_USER_PASS}\r\n\"
        }
        
        expect \":~\"
        send \"mv $FTP_DIR/boshi02/in/JZCD921X*.csv       $FTP_DIR/boshi02/in_z/ \n\"
		send \"mv $FTP_DIR/chuki02/in/JZCD921X*.csv       $FTP_DIR/chuki02/in_z/ \n\"
		send \"mv $FTP_DIR/houchi02/in/JZCD921X*.csv      $FTP_DIR/houchi02/in_z/ \n\"
		send \"mv $FTP_DIR/jisou02/in/JZCD921X*.csv       $FTP_DIR/jisou02/in_z/ \n\"
		send \"mv $FTP_DIR/kenjyutaku02/in/JZCD921X*.csv  $FTP_DIR/kenjyutaku02/in_z/ \n\"
		send \"mv $FTP_DIR/nourin02/in/JZCD921X*.csv      $FTP_DIR/nourin02/in_z/ \n\"
		send \"mv $FTP_DIR/shinsho02/in/JZCD921X*.csv     $FTP_DIR/ifdata/shinsho02/in_z/ \n\"
		send \"mv $FTP_DIR/shogaku02/in/JZCD921X*.csv     $FTP_DIR//shogaku02/in_z/ \n\"
		send \"\exit\n\"
        interact
	"


#OpenLDAPのバージョンを確認
rpm -qa | grep openldap

#LDAP組織情報に登録されているユーザの一覧を取得するコマンド
ldapsearch -x -h localhost -b 'dc=test,dc=soshikimei,dc=jp'(uid=*)' uid

#エントリーを変更する場合
ldapmodify -D "cn=Manager,dc=test,dc=soshikimei,dc=jp" -w ldapmng -f /root/ldif/base_user_modfi.ldif

#エントリーを新たに追加する場合
ldapadd -x -D "cn=Manager,dc=test,dc=soshikimei,dc=jp" -w ldapmng -f /root/ldif/base_user.ldif

#エントリー情報例
Host:XX.XX.XX.XX
Domain:dc=test,dc=soshikimei,dc=jp
Entry:uid=1112252,ou=000000組織1,ou=000組織の課室,dc=test,dc=soshikimei,dc=jp



ldifの内容①
# LDAPユーザの登録

dn: uid=7710160,ou=000000組織1,ou=000組織の課室,dc=test,dc=soshikimei,dc=jp
objectClass: top
objectClass: posixAccount
objectClass: account
gecos: ldapsystem manager
uid: 7710160
uidNumber: 7710160
cn: 7710160
gidNumber: 50001
homeDirectory: /home/7710160
loginShell: /bin/bash
userPassword: pw7710160

dn: uid=7110570,ou=000000組織1,ou=000組織の課室,dc=test,dc=soshikimei,dc=jp
objectClass: top
objectClass: posixAccount
objectClass: account
gecos: ldapsystem manager
uid: 7110570
uidNumber: 7110570
cn: 7110570
gidNumber: 50001
homeDirectory: /home/7110570
loginShell: /bin/bash
userPassword: pw7110570

ldifの内容（変更）②
# LDAPユーザの更新

dn: uid=7710160,ou=000000組織1,ou=000組織の課室,dc=test,dc=soshikimei,dc=jp
changetype: modify
replace: gidNumber
gidNumber: 10501

dn: uid=7110570,ou=000000組織1,ou=000組織の課室,dc=test,dc=soshikimei,dc=jp
changetype: modify
replace: gidNumber
gidNumber: 10501

# RSA暗号鍵作成

トムキャット(SANs)
keytool -genkeypair -alias client -keystore ~/jz_client/security/.keystore -validity 36500 -keyalg RSA -sigalg SHA256withRSA -keysize 2048 -storepass client_password -keypass client_password -ext SAN=DNS:test.example.com,IP:XX_XX_XX_XX 

アパッチ(SANs)
openssl x509 -req -days 36500 -in server.csr -signkey server.key -out server.crt -extfile san.txt
openssl x509 -text -in server.crt -noout

# セキュリティホール確認用
#空いているポートを確認する
lsof -i -P
 
#CentOS ファイアウォールの確認
systemctl status firewalld.service

#ファイアウォールで許可されているポートの確認
firewall-cmd --list-ports

#ファイルウォールが設定されているゾーンを確認
firewall-cmd --list-all

# ICMP疎通確認
ping -4 XX.XX.XX.XX
traceroute -4 XX.XX.XX.XX

######################################################################
# 変数定義
######################################################################

## FTPサーバ接続先情報

# IPアドレス
declare FTP_HOST=
# ユーザＩＤ
declare FTP_USER=
# ユーザＰＡＳＳ
declare FTP_USER_PASS=


##-------------------------------------------------------------------------------
## Xmoveftp() 個別連携ファイル移動関数
## 
##-------------------------------------------------------------------------------
function Xmoveftp() {

    local RtnLines=
    local RtnItems=
    local xFilePathFrom=
    local XPathFrom=
    local sqltxt=
    
    sqltxt="SELECT 
               M00.shutokuki       AS FTPSVNAME
             , M00.shutokumei1     AS FTPHOST
             , M00.shutokumei2     AS FTPUSER
             , M00.shutokumei3     AS FTPPASS
             , M01.shutokumei2     AS FromPath
             , replace(M02.shutokumei1,'in_z','in')     AS FILEFromPath
            FROM 
               (SELECT * FROM JZZ010M WHERE kbn = 'Z040') M00
               INNER JOIN (SELECT * FROM JZZ010M WHERE kbn = 'Z041') M01
                 ON ( M00.shutokuki=M01.shutokumei1 )
               INNER JOIN (SELECT * FROM JZZ010M WHERE kbn = 'Z019') M02
                 ON (    M01.shutokumei1=M02.shutokumei3 
                     AND left(M01.shutokumei2,strpos(M01.shutokumei2,'in_z')) = left(M02.shutokumei1,strpos(M02.shutokumei1,'in_z'))  )
            WHERE 
                  M00.shutokuki='FTPSV01'
              AND M01.shutokumei2 LIKE '%in_z%'
              AND M02.shutokumei1 LIKE '%in_z%'
           ;"
    
    ## 配列で取得
    RtnLines=(`$HOME/bin/JZSQL.sh -c "${sqltxt}" -t | tr '\n' ' '`)
    
    ## 文字列が0文字であれば -z zero -n zero以上
    if [ -z "${RtnLines}" ]; then
        RTN_CD=50
        echo "GetFtpFileList: FTPサーバファイルリスト取得エラー"
        Abort $RTN_CD " FTPサーバファイルリストが用語管理テーブルに設定されていません。"
    fi
    
    for RtnLine in ${RtnLines[@]};
    do
        RtnItems=(`echo "${RtnLine}" | tr ',' ' '`)
        
        ## FTPサーバのIPアドレスを取得
        FTP_HOST=`eval echo "${RtnItems[1]}"`
        ## FTPサーバのユーザ情報を取得
        FTP_USER=`eval echo "${RtnItems[2]}"`
        ## FTPサーバのパスワード情報を取得
        FTP_USER_PASS=`eval echo "${RtnItems[3]}"`
        
        ## "/"が含まれるため"@"をデリミタとする。
        if [ -z "${JZ_FTP_DIR}" ]; then
            xPathFrom=`eval echo "${RtnItems[4]}"`
            xFilePathFrom=`eval echo "${RtnItems[5]}"`
        else
            xPathFrom=`eval echo "${RtnItems[4]}" | sed -e "s@${HOME}/${HOSTNAME}@${JZ_FTP_DIR}@g"`
            xFilePathFrom=`eval echo "${RtnItems[5]}" | sed -e "s@${HOME}/${HOSTNAME}@${JZ_FTP_DIR}@g"`
        fi
        
        ## 受信元ファイルパスに"%","_"が含まれている場合の処理（ファイル名不定）
        if [ `echo "${RtnItems[5]}" | grep [%_]` ]; then
            ## "$HOME"置換, "%" -> "*" に置換
            xFilePathFrom=`eval echo "${xFilePathFrom}" | sed -e "s/%/*/g"`
        fi
        
        echo ${xFilePathFrom}
        echo ${xPathFrom}
        
        XsvnclientFTP ${FTP_HOST} ${FTP_USER} ${FTP_USER_PASS} ${xPathFrom} ${xFilePathFrom} 
        
	done
}


##-------------------------------------------------------------------------------
## XsvnclientFTP() ファイルチェック関数
##
## FTPサーバにSVN接続して対象のファイルを所定の場所に移動させる。
## 引数１ 接続先IPアドレス
## 引数２ ユーザID
## 引数３ ユーザPASS
## 引数４ 移動先フォルダーパス
## 引数５ 移動元フォルダーパス
##
##-------------------------------------------------------------------------------
function XsvnclientFTP() {
    echo "`date "+%Y/%m/%d %H:%M:%S"` : ***** 外部ファイルID<$5>のファイル受信開始 *****"
    
    Do "電子収納個別調定データ移動" 128 \

    # 対話方式
    expect -c "
        set timeout 10
        spawn ssh ${FTP_USER}@${FTP_HOST}
        expect \"Are you sure you want to continue connecting (yes/no)?\" {
                send \"yes\n\"
                expect -re \".* password\:\"
                send \"${FTP_USER_PASS}\r\n\"
        } \".* password\:\" {
                send \"${FTP_USER_PASS}\r\n\"
        }
        
        expect \":~\"
        send \"mv $xFilePathFrom       $xPathFrom \n\"
		send \"\exit\n\"
        interact
	"

}


Do "電子収納個別調定データ移動" 128 \

    # 対話方式
    Xmoveftp