와... 정말 하루 온종일 popup 안뜨게 하려고 이것저것 시도하다가 겨우겨우 스스로 해결했다.

selenium 처음 시작시 참고하면 좋을거 같아서 포스팅을 해본다.

참고로 selenium 버전은 4.8.2이다.

def chrome_driver_dev():
    options = webdriver.ChromeOptions()
    # options.add_argument('--headless')
    # options.add_argument('--no-sandbox')
    # options.add_argument("--start-maximized")
    options.add_argument('--disable-dev-shm-usage')
    options.add_argument("--disable-notifications")
    options.add_experimental_option('excludeSwitches', ['disable-popup-blocking'])

    service = Service('/opt/homebrew/bin/chromedriver')

    return webdriver.Chrome(service=service, options=options)

 

To be continued.........

 

 

Made by 꿩

# Database connection

 

Python으로 각 DB별 연결 내용 정리

# python3 설치
yum install python3 -y

 

1. PostgreSQL

# PostgreSQL 드라이버 설치
pip install psycopg2
python3 -m pip install psycopg2

 

import psycopg2
 
try:
    conn = psycopg2.connect(
        host="192.168.123.50",
        port="5432",
        database="postgres",
        user="user1",
        password="password")
 
    cur = conn.cursor()
 
    cur.execute("select version()")
 
    print(cur.fetchone())
 
except Exception as e:
    print("Error while fetching Schema")
    print(e)
 
finally:
    conn.close()

 

2. MySQL/MariaDB

# MySQL/MariaDB 드라이버 설치
pip install pymysql
python3 -m pip install pymysql

 

import pymysql
 
try:
    conn = pymysql.connect(
        host='192.168.123.50',
        port=3306 ,
        user='user1',
        password='password',
        db='mysql',
        charset='utf8'
    )
 
    cur = conn.cursor()
    cur.execute("select version()")
 
    rows = cur.fetchall()
    cur.close()
    conn.close()
    print(rows)
 
except Exception as e:
    print("Error while fetching Schema")
    print(e)

 

3. ClickHouse

# clickhouse 드라이버 설치
pip3 install clickhouse-driver[lz4]
python3 -m pip install clickhouse-driver[lz4]

 

from clickhouse_driver import Client
 
try:
    client = Client('192.168.123.50',
                user='user',
                password='password',
                verify=False,
                database='default',
                compression=True)
 
    result = client.execute('SELECT now(), version()')
    result2 = client.execute('SHOW databases')
    print(result)
 
except:
    print("Error while fetching Schema")

 

4. MongoDB

# MongoDB 드라이버 설치
pip install pymongo
python3 -m pip install pymongo

 

 

import pymongo
 
try:
    #conn = pymongo.MongoClient('mongodb://{user}:{password}@127.0.0.1:27017')
    conn = pymongo.MongoClient('mongodb://127.0.0.1:27017')
    db = conn.get_database('testdb')
    collection = db.get_collection('testcollection')
 
    for x in collection.find():
        print(x)
 
except Exception as e:
    print("Error while fetching Schema")
    print(e)

 

5. ElasticSearch

# ElasticSearch 드라이버 설치
pip install elasticsearch
python3 -m pip install elasticsearch

 

from elasticsearch import Elasticsearch
 
try:
    es = Elasticsearch('192.168.123.50:9200')
 
    # elastic info
    print(es.info())
 
    # get all index
    print(list(es.indices.get_alias().keys()))
 
    print(es.indices.get_mapping("products"))
    print(es.indices.get_mapping("work"))
 
except Exception as e:
    print("Error while fetching Schema")
    print(e)

 

6. Redis

# Redis 드라이버 설치
pip install scylla-driver
python3 -m pip install scylla-driver

 

import redis
 
try:
    r = redis.Redis(host='192.168.123.50', port=6379, db=0)
    r.set('k_test','v_test')
    print(r.get('k_test'))
    r.close()
except Exception as e:
    print("error")
    print(e)

 

7. ScyllaDB

# ScyllaDB 드라이버 설치
pip install scylla-driver
python3 -m pip install scylla-driver

 

import cassandra
 
print(cassandra.__version__)

 

 

 

To be continued.........

 

 

Made by 꿩

 

'IT > Bash' 카테고리의 다른 글

[Linux] SSH 공개키 설정  (0) 2022.03.28
[Bash] 스크립트 #! 의미  (0) 2021.10.19
[Bash] 터미널 jar 파일 생성  (0) 2021.10.05
[centos] java openjdk 설치 및 삭제  (0) 2021.10.05
Redis 메모리 & 시간 측정 스크립트  (0) 2021.05.14

# SSH 공개키 설정

 

root 계정으로 서비스를 실행하는 것은 보안상 좋은 습관이 아니다

HDFS를 설치할 때 ssh 공개키에 대한 지식이 필요해서 포스팅을 한다

 

우선, 모든 서버에 hadoop이라는 계정을 생성해보자

groupadd hadoop
useradd -c "Apache Hadoop" -d /home/hadoop -g hadoop -s /bin/bash -u 9000 hadoop
passwd hadoop

 

ssh는 public key 암호방식을 사용한다

public key 암호방식은 비대칭 키로 양방향 암호화 방식이다.

public key와 private key를 사용한다

 

public key로 암호화된 데이터는 private key로만 복호화가 가능하다

private key로 암호화 된데이터는 public key로만 복호화가 가능하다

 

SSH Key를 생성하면 public key와 private key가 만들어진다

# 키 생성
ssh-keygen -t rsa -C "hadoop@localhost"

ssh-keygen이라는 프로그램을 이용하여 키를 생성하면 된다

-t rsa 옵션은 rsa 암호화 방식으로 키를 생성한다

-C 옵션은 코멘트이다

Enter file in which to save the key (/root/.ssh/id_rsa):

ssh 키가 저장될 위치를 말한다

기본 경로는 로그인한 사용자의 홈디렉토리의 {사용자}/.ssh/ 이다.

그냥 엔터 누르면 된다.

Enter passphrase (empty for no passphrase):

passphrase는 암호화시 salt처럼 사용하는 값이다.

The key fingerprint is:
SHA256:uIm++us4lxkLQoQJ3c3tp7ygxFsncmBKtBoN2TLGVWk hadoop@localhost

SHA256 해시 알고리즘을 사용했다는 것을 알려준다

 

위와 같이 키를 생성하면 public key와 private key가 생성된다.

### Public 키
# cat ~/.ssh/id_rsa.pub
ssh-rsa (키 내용) (코멘트)

### Private 키
# cat ~/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----

id_rsa는 private key로 타인에게 노출되면 안되는 키이고

id_rsa.pub은 public key로 remote 서버의 authorized_keys에 입력한다

authorized_keys 파일을 직접 생성할 경우 chmod 644 설정해줘야 한다.

authorized_keys는 public key 값을 저장하는 파일로 remote 서버에 생성하면 된다

 

HDFS에서는 네임노드가 private key를 가지고 있고

데이터노드가 public key를 가지고 있다고 보면 된다.

 

추가적으로 확인해야 할 사항이 한가지 더 있다

리눅스 접근 통제(tcpwrapper) 설정이 되어 있으면 허용해줘야 한다

# cat /etc/pam.d/sshd
...
account    required     pam_access.so accessfile=/etc/security/access.conf
...

# cat /etc/security/access.conf
...
-:hadoop:ALL EXCEPT 127.0.0.1 192.168.11.60

# cat /etc/hosts.allow
# cat /etc/hosts.deny

 

access.conf 파일에서

hadoop 계정으로 접근하는 ip를 허용해준다

더불어서 hosts.allow와 hosts.deny 파일도 체크하고

허용이 필요하면 허용해준다

 

위의 모든 과정이 끝나면

ssh hadoop@localhost로 비밀번호 없이 접속이 되는지 확인한다

[hadoop@localhost .ssh]$ ssh localhost
Last login: Mon Mar 28 20:12:07 2022 from ip
[hadoop@localhost ~]$

 

[참고자료]

https://storycompiler.tistory.com/112

https://brunch.co.kr/@sangjinkang/52

https://opentutorials.org/module/432/3742

https://gukii.tistory.com/19

To be continued.........

 

 

Made by 꿩

'IT > Bash' 카테고리의 다른 글

[Python] Database connection  (0) 2022.05.09
[Bash] 스크립트 #! 의미  (0) 2021.10.19
[Bash] 터미널 jar 파일 생성  (0) 2021.10.05
[centos] java openjdk 설치 및 삭제  (0) 2021.10.05
Redis 메모리 & 시간 측정 스크립트  (0) 2021.05.14

# 인바운드 & 아웃바운드

 

방화벽이란

서버와 서버 간 통신을 하는데 있어서

정의된 보안 규칙에 기반하여

네트워크 트래픽을 제어하는 보안 시스템이다.

쉽게 말하자면

어떤 곳에서 파티가 열렸는데

그 파티에 참석하려면 파티 인원으로 등록된 인원만 출입이 가능하다

파티장 앞에서 등록된 사람만 들여보내주는 역할을 하는게

바로 방화벽의 역할이다.

 

서버간 통신을 하다보면

데이터가 서버로 들어오는 경우가 있고

데이터가 서버밖으로 나가는 경우가 있다.

이때, 데이터가 서버로 들어오는 경우를 인바운드라 하고

데이터가 서버 밖으로 나가는 경우를 아웃바운드라 생각하면 된다.

 

예를 들자면

첨부파일을 서버에 저장한다 = 인바운드

첨부파일을 다운로드 한다 = 아웃바운드

한가지 더 알아야 할 것이 있는데 데이터 전송 방식이다.

데이터 전송 방식은 TCP와 UDP가 있는데

TCP는 신뢰성을 우선시하고

UDP는 성능을 우선시한다.

 

1,2,3이라는 데이터를 보낸다고 생각하자.

TCP 프로토콜은 데이터를 받는 입장에서 1,2,3 순서대로 데이터를 받겠지만

UDP 프로토콜은 1,2,3으로 오든 2,3,1로 오든 데이터를 받기만 하면 된다.

그리고

TCP는 받는 쪽에서 데이터를 잘 받았는지 확인하는 절차가 있는 반면

UDP는 데이터 보내기만 하면 끝이다.

 

그럼 방화벽을 여는 법을 알아보자

<리눅스>

### 인바운드 오픈
# 192.168.123.60 서버가 5432 포트로 들어오도록 허용
iptables -I INPUT 1 -s 192.168.123.60 -p tcp --dport 5432 -j ACCEPT
# 192.168.123.60 서버에 대한 인바운드 모든 포트를 허용
iptables -I INPUT 1 -s 192.168.123.60 -p all -j ACCEPT

### 아웃바운드 오픈
# 192.168.123.60 서버가 5432 포트로 나가도록 허용
iptables -I OUTPUT 1 -s 192.168.123.60 -p tcp --dport 5432 -j ACCEPT
# 192.168.123.60 서버에 대한 아웃바운드 모든 포트를 허용
iptables -I OUTPUT 1 -s 192.168.123.60 -p all -j ACCEPT

# 주의! 테스트 안함 ㅋ 참고용

 

<윈도우>

제어판 > Windows Defender 방화벽 > 고급 설정

> 인바운드/아웃바운드 규칙 > 새규칙 > 

포트 선택 + 다음 > TCP(기본) + 모든/특정 로컬 포트(특정 port 입력) + 다음

> 연결 허용 + 다음 > 다음 > 이름 및 설명 입력 마침

 

[참고자료]
https://prinha.tistory.com/entry/%EB%B0%A9%ED%99%94%EB%B2%BD
https://mangkyu.tistory.com/15
https://yunyoung1819.tistory.com/20

 

 

To be continued.........

 

 

Made by 꿩

'IT > 보안' 카테고리의 다른 글

[Spring] Google reCAPTCHA v3  (6) 2019.07.07
OAuth  (0) 2019.06.17
SSL인증서  (0) 2019.03.21
CSRF  (0) 2018.12.25
XSS 공격과 방어  (2) 2018.10.25

# [Bash] 스크립트 #! 의미

 

#!는 스크립트 제일 앞에서

어떤 명령어 해석기를 이용하여 파일을 실행할 것인지를 명시하는 것이다.

 

리눅스에서는 기본적으로 파일을 실행할때 bash 쉘로 설정되어 있어서

따로 명시를 하지 않아도

#!/bin/bash
#!/bin/sh

위의 bash 쉘로 자동 실행되게 한다.

 

다음의 예시를 통해 눈으로 확인해보자.

[root@chuchu test]# cat test1.sh 
#!/bin/bash

echo "Hello World!"
[root@chuchu test]# cat test2.sh 
#!/bin/cat

echo "Hello World!"
[root@chuchu test]# 
[root@chuchu test]# ./test1.sh 
Hello World!
[root@chuchu test]# ./test2.sh 
#!/bin/cat

echo "Hello World!"

 

참고: https://hahoital.tistory.com/145

To be continued.........

 

 

Made by 꿩

'IT > Bash' 카테고리의 다른 글

[Python] Database connection  (0) 2022.05.09
[Linux] SSH 공개키 설정  (0) 2022.03.28
[Bash] 터미널 jar 파일 생성  (0) 2021.10.05
[centos] java openjdk 설치 및 삭제  (0) 2021.10.05
Redis 메모리 & 시간 측정 스크립트  (0) 2021.05.14

# [Bash] 터미널 jar 파일 생성

 

1. java 파일 생성

# cat Hello.java 
public class Hello {
  public static void main(String args[]){
    System.out.println("hello world");
  }
}

 

2. 컴파일

# javac Hello.java

 

3. manifest.txt 파일 생성

# cat manifest.txt 
Main-class: Hello

※ manifest.txt 파일이란? jar로 패키지된 파일 구성요소의 메타 정보를 가지고 있는 파일이다.

 

4. jar 파일 생성

# jar -cvmf manifest.txt hello.jar Hello.class 
Manifest를 추가함
추가하는 중: Hello.class(입력 = 415) (출력 = 286)(31%를 감소함)

 

5. jar 파일 실행

# java -jar hello.jar 
hello world

To be continued.........

 

 

Made by 꿩

 

'IT > Bash' 카테고리의 다른 글

[Python] Database connection  (0) 2022.05.09
[Linux] SSH 공개키 설정  (0) 2022.03.28
[Bash] 스크립트 #! 의미  (0) 2021.10.19
[centos] java openjdk 설치 및 삭제  (0) 2021.10.05
Redis 메모리 & 시간 측정 스크립트  (0) 2021.05.14

# [centos] java openjdk 설치 및 삭제

 

1. java 설치현황 파악

# rpm -qa | grep jdk
java-11-openjdk-11.0.12.0.7-0.el7_9.x86_64
java-1.8.0-openjdk-headless-1.8.0.302.b08-0.el7_9.x86_64
copy-jdk-configs-3.3-10.el7_5.noarch
java-11-openjdk-devel-11.0.12.0.7-0.el7_9.x86_64
java-11-openjdk-headless-11.0.12.0.7-0.el7_9.x86_64
java-1.7.0-openjdk-headless-1.7.0.261-2.6.22.2.el7_8.x86_64

 

2. java 삭제

yum remove java-11-openjdk-devel.x86_64 -y

 

3. java 설치

yum install java-11-openjdk-devel.x86_64 -y

echo 'export JAVA_HOME=/usr/lib/jvm/jre-openjdk' > /etc/profile.d/java.sh
echo 'setenv JAVA_HOME "/usr/lib/jvm/jre-openjdk"' > /etc/profile.d/java.csh

 

4. java 설치 확인

# java -version
openjdk version "11.0.12" 2021-07-20 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.12+7-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.12+7-LTS, mixed mode, sharing)

# javac -version
javac 11.0.12

To be continued.........

 

 

Made by 꿩

'IT > Bash' 카테고리의 다른 글

[Python] Database connection  (0) 2022.05.09
[Linux] SSH 공개키 설정  (0) 2022.03.28
[Bash] 스크립트 #! 의미  (0) 2021.10.19
[Bash] 터미널 jar 파일 생성  (0) 2021.10.05
Redis 메모리 & 시간 측정 스크립트  (0) 2021.05.14

# Redis 메모리 & 시간 측정 스크립트

 

Python으로 redis 테스트 시 메모리와 시간 측정을 위한 스크립트

#!/bin/sh
 
### help message
function help() {
/bin/cat << EOF
Usage :
    redis_test.sh [-n/--filename] filename [-f/--flushall] [-h/--help]
EOF
}
    
### flag
INPUT_FILE=False
  
### check parameter
while (("$#")); do
    case "$1" in
        -n|--filename)
            if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
                INPUT_FILE=$2
                shift 2
            else
                echo "[Error] Argument for $1 is missing" >&2
                exit 1
            fi
            ;;
        -f|--flushall)
            FLUSHALL=True
            shift
            ;;
        -h|--help)
            help
            exit 1
            ;;
        -*|--*) # unsupported flags
            echo "[Error] Unsupported flag: $1" >&2
            echo "$0 -h for help message" >&2
            exit 1
            ;;
        *)
            echo "[Error]: Arguments with not proper flag: $1" >&2
            echo "$0 -h for help message" >&2
            exit 1
            ;;
    esac
done
   
  
### check if input filename
if [ $# -eq 0 ] && [ "$INPUT_FILE" == "False" ]
  then
    echo "[Error] Please give me test file"
    help;
    exit 1;
fi
   
 
### flushall execution
if [[ "$FLUSHALL" == True ]]
then
    ok=`redis-cli FLUSHALL`
    echo "[Info] redis memory flush all : ${ok}"
fi
 
  
### check memory and time before test
before=`redis-cli INFO memory | grep 'used_memory:' | awk -F: '{print $2}'`
b=`echo "${before//[$'\t\r\n ']}"`
StartTime=$(date +%s)
  
### test execution
echo "[Info] test start"
################################################ 테스트 실행 파일
python3 $INPUT_FILE
echo "[Info] test end"
  
### check memory and time after test
after=`redis-cli INFO memory | grep 'used_memory:' | awk -F: '{print $2}'`
a=`echo "${after//[$'\t\r\n ']}"`
EndTime=$(date +%s)
  
used=$(expr $a - $b)
  
echo ""
echo ""
echo "####################################[result]################################################"
echo "[result] redis used memory ${used}"
echo "[result] It takes $(($EndTime - $StartTime)) seconds to complete this task."

 

 

[참고문서]
https://tyanjournal.com/tips/bash-command-line-option-parsing%ED%95%98%EA%B8%B0-%EC%98%B5%EC%85%98-%EB%B0%9B%EA%B8%B0/
https://knight76.tistory.com/entry/Redis-%EB%A0%88%EB%94%94%EC%8A%A4-%ED%85%8C%EC%8A%A4%ED%8A%B8%ED%9B%84-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%B8%A1%EC%A0%95%ED%95%98%EA%B8%B0-redis-used-memory

 

To be continued.........

 

 

Made by 꿩

'IT > Bash' 카테고리의 다른 글

[Python] Database connection  (0) 2022.05.09
[Linux] SSH 공개키 설정  (0) 2022.03.28
[Bash] 스크립트 #! 의미  (0) 2021.10.19
[Bash] 터미널 jar 파일 생성  (0) 2021.10.05
[centos] java openjdk 설치 및 삭제  (0) 2021.10.05

+ Recent posts