LoginSignup
0
0

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

Last updated at Posted at 2022-07-06

※※ 私用メモ

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=

ユーザID

declare FTP_USER=

ユーザPASS

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接続して対象のファイルを所定の場所に移動させる。

引数1 接続先IPアドレス

引数2 ユーザID

引数3 ユーザPASS

引数4 移動先フォルダーパス

引数5 移動元フォルダーパス

##-------------------------------------------------------------------------------
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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0