늘 자주 사용하긴 하지만 


kafka-01.internal.google.com에서 kafka-20.internal.google.com까지의 ip 주소를 얻고 싶다면 



number=0; for i in $(seq 1 20); do if [ $i -le 9 ]; then number=0$i ; else number=$i  ; fi ; ping -c1 -t 1 kafka-$number.internal.google.com  ; done



결과는 나오지만 지저분하게 나오려면 다음처럼 awk를 써서 처음 라인의 호스트와 ip만 나오게 한다.




number=0; for i in $(seq 1 20); do if [ $i -le 9 ]; then number=0$i ; else number=$i  ;fi ; ping -c1 -t 1 kafkatest-$numberr.internal.google.com | awk 'NR==1{print $2$3 ; exit}'  ; done



kafkatest-17.internal.google.com(1.1.1.1

...

Posted by 김용환 '김용환'


스크립트에서 현대 디렉토리를 지정하기 위해 다음과 같은 스크립트를 많이 사용한다. 


my_root=$(cd $(dirname $(readlink $0 || echo $0))/../;/bin/pwd)



그런데 맥에서 이런 에러가 발생했다.


dirname: illegal option -- b




bash에서 $0이 스크립트 경로를 알려주는 것이라 알고 있긴 하지만... 사실 보장하지 않는다.

완벽히 보장하는 bash script를 개발하려면 BASH_SOURCE를 사용하길 바란다.



SCRIPT_PATH=${BASH_SOURCE[0]}

my_root=$(cd $(dirname $(readlink ${SCRIPT_PATH} || echo ${SCRIPT_PATH}))/../;/bin/pwd)




Posted by 김용환 '김용환'



디스크 볼륨을 추가한 뒤


 재부팅되더라도 계속 디바이스에 잘 연결되도록 하려면.. /etc/fstab을 사용해야 한다. 





먼저 특정 디바이스를 xfs로 파일 시스템을 구축하고 mount 한다. 그리고 잘 붙는지 확인한다.


$ mkfs.xfs -f /dev/sdc 

$ mount -t xfs /dev/sdc /home/file3

$ df

/dev/sdc       2928835792     32944 2928802848   1% /home/file3

 



block id를 구한다.


$ sudo blkid -pi /dev/sdc

DEVNAME=/dev/sdc

UUID=df556bd3-da08-4642-a2cd-179f34c603a6

TYPE=xfs

USAGE=filesystem

MINIMUM_IO_SIZE=512

PHYSICAL_SECTOR_SIZE=512

LOGICAL_SECTOR_SIZE=512






재부팅되더라도 df 커맨드를 사용하면 항상 운영체제와 연결될 수 있도록 /etc/fstab에 추가한다.


UUID=df556bd3-da08-4642-a2cd-179f34c603a6    /               xfs    errors=remount-ro 0       1









만약 아래와 같이 uuid가 나오지 않는 다면 디스크 볼륨이 없거나 문제가 있는 것이다.


# sudo blkid -ip /dev/sdc

DEVNAME=/dev/sdc

MINIMUM_IO_SIZE=512

PHYSICAL_SECTOR_SIZE=512

LOGICAL_SECTOR_SIZE=512



참고


http://faq.hostway.co.kr/Linux_ETC/7437

http://nan1004au.tistory.com/entry/Linux-%EB%94%94%EC%8A%A4%ED%81%AC%EC%9D%98-UUID%EB%A5%BC-%EC%95%8C%EC%95%84%EC%98%A4%EA%B8%B0-ntfs-ext3-%EB%A7%88%EC%9A%B4%ED%8A%B8


Posted by 김용환 '김용환'


ssh tunning하고 rsync를 하다가 아래와 같은 에러를 보게 되었다. (필요하다면 strace를 보면 된다)




channel 1: open failed: administratively prohibited: open failed




/etc/ssh/sshd_config 파일에 포워딩 기본 설정이 no로 되어 있다. yes로 바꾸면 동작한다.




AllowTcpForwarding no

->

AllowTcpForwarding yes


Posted by 김용환 '김용환'

리눅스 패치시 cpu 타입 확인하기



예를 들어 보안 취약점 공개로 문제가 발생했을 때. cpu가 i386인지, x86_64인지 모를 수 있다


https://access.redhat.com/errata/RHSA-2017:1100



이 때는 uname -a 또는 uname -m으로 cpu계열을 확인할 수 있다.


$ uname -m

x86_64





Posted by 김용환 '김용환'

shell script에서 간단하게 한 줄로 표현하고 싶은 line이 있을 수 있다. 


$ echo  xxx: ; printf "mm"

xxx:

mm




echo 매개 변수에 -n을 추가하면 원하는 대로 한 줄로 표현할 수 있다. 


$ echo -n xxx: ; printf "mm"

xxx:mm


Posted by 김용환 '김용환'


맥 OS에서는 zcat을 사용하면 파일이 없다는 에러가 나온다. 


$ zcat ../$dump 

zcat: can't stat: ../file.json.gz (../files.gz.Z): No such file or directory



zcat 대신 gzcat을 사용하면 잘 동작한다. 

Posted by 김용환 '김용환'



리뉵스에서 netstat -o 또는 netstat --timers 명령을 사용하는 경우, keepalive 사용 여부와, 상태를 볼 수 있다. 



ESTABLISHED off (0.00/0/0)

ESTABLISHED keepalive (239.12/0/0)





Posted by 김용환 '김용환'


openssl 을 이용해서 google.com 인증서를 확인하는 방법이다.


$ openssl s_client -connect www.google.com:443

CONNECTED(00000003)

depth=2 /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA

verify error:num=20:unable to get local issuer certificate

verify return:0

---

Certificate chain

 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com

   i:/C=US/O=Google Inc/CN=Google Internet Authority G2

 1 s:/C=US/O=Google Inc/CN=Google Internet Authority G2

   i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA

 2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA

   i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority

---

Server certificate

-----BEGIN CERTIFICATE-----

MIIEgDCCA2igAwIBAgIITq9JKLrGf5EwDQYJKoZIhvcNAQELBQAwSTELMAkGA1UE

BhMCVVMxEzARBgNVBAoTCkdvb2dsZSBJbmMxJTAjBgNVBAMTHEdvb2dsZSBJbnRl

cm5ldCBBdXRob3JpdHkgRzIwHhcNMTUxMjEwMTgwMzQ3WhcNMTYwMzA5MDAwMDAw

WjBoMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwN

TW91bnRhaW4gVmlldzETMBEGA1UECgwKR29vZ2xlIEluYzEXMBUGA1UEAwwOd3d3

Lmdvb2dsZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVwcpO

O/ntr0YcvEwMII6pb6oKH0kZjFfRCUEJM7PvWg08qULwfN8Z/HeeXQRec4YmpQxt

0u2R7X7qVMrAnzOQCtWsa951+SlzuRXaLaDcC0P/sT6KD2xnyFTVF9/Oq3k44wap

QooOYLQleHru6Fi3UYJM2xLq8jKXSotaOhYEjY/6/vMvZVQVaczfMsu8FZPL22qa

gVwbEca2maC8DT9oEjVlpiiiMRU4QnzSNuD/rssklqUXuRs+MDQPjkrh0VzzYgOo

jHvrxttFPHFUrmMGVWkKiPgwIK3f8fI6Ao2U4HUKEc5+bngQubg5YkLdkxBSPNSc

Bfff9IspCu/V0t4rAgMBAAGjggFLMIIBRzAdBgNVHSUEFjAUBggrBgEFBQcDAQYI

KwYBBQUHAwIwGQYDVR0RBBIwEIIOd3d3Lmdvb2dsZS5jb20waAYIKwYBBQUHAQEE

XDBaMCsGCCsGAQUFBzAChh9odHRwOi8vcGtpLmdvb2dsZS5jb20vR0lBRzIuY3J0

MCsGCCsGAQUFBzABhh9odHRwOi8vY2xpZW50czEuZ29vZ2xlLmNvbS9vY3NwMB0G

A1UdDgQWBBTRV+KjkFiVN5eQP1h1Fz4F4rTwbzAMBgNVHRMBAf8EAjAAMB8GA1Ud

IwQYMBaAFErdBhYbvPZotXb1gba7Yhq6WoEvMCEGA1UdIAQaMBgwDAYKKwYBBAHW

eQIFATAIBgZngQwBAgIwMAYDVR0fBCkwJzAloCOgIYYfaHR0cDovL3BraS5nb29n

bGUuY29tL0dJQUcyLmNybDANBgkqhkiG9w0BAQsFAAOCAQEAQr4lzcjyBQZ5fn/Z

drUDqpN4fx8Sa6hafoGVOfWMktt003x8ylXb3Pxhgw27f6wiFFRXlX85a2F0/AnC

eoV23mHmV6/0mOwocVYt/Th96WNGGmhANkFW//HCphRWnhaOqIG6yFRQ/jxArTvZ

QJEGI5AiYHzQn7LdUM8mH1o3ifR+lX+QiAwyeU9oegdlRslI2KMoPOuOFj329NFx

Bw+XVQXMsRJITPg8pnegPmLCOjpz8y7pBxbxGnfaI66I8X4dArsaXX4r5mkfhk2e

mm7fxQ8qUaW9mKoW0XvwGxU0AwKI8OopuXHoD97vr2GSK0QNZ19A96mtTWnQ2cu2

i9qjGw==

-----END CERTIFICATE-----

subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com

issuer=/C=US/O=Google Inc/CN=Google Internet Authority G2

---

No client certificate CA names sent

---

SSL handshake has read 3240 bytes and written 456 bytes

---

New, TLSv1/SSLv3, Cipher is AES128-SHA

Server public key is 2048 bit

Secure Renegotiation IS supported

Compression: NONE

Expansion: NONE

SSL-Session:

    Protocol  : TLSv1

    Cipher    : AES128-SHA

    Session-ID: EC7CB675C0117DBEC466D0444B91A5FBD81E173E1636E7D0E1DF2E60C4661FD0

    Session-ID-ctx:

    Master-Key: 849D9BCC56523450185D47C92D70FC782659F53D1369A34636443290801EA3C588B6956244B8D8B00AEC016B331BB060

    Key-Arg   : None

    Start Time: 1451295587

    Timeout   : 300 (sec)

    Verify return code: 0 (ok)

---


HTTP/1.0 400 Bad Request

Content-Length: 54

Content-Type: text/html; charset=UTF-8

Date: Mon, 28 Dec 2015 09:39:49 GMT

Server: GFE/2.0


<html><title>Error 400 (Bad Request)!!1</title></html>read:errno=0



open ssl 요청을 하면 정보를 받으려 하는데, 대충 넣으면 400에러가 발생한다. 



원하는 것은 인증서 정보이니. echo를 open ssl 명령 앞에 사용한다.



$ echo | openssl s_client -connect www.google.com:443


CONNECTED(00000003)

depth=2 /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA

verify error:num=20:unable to get local issuer certificate

verify return:0

---

Certificate chain

 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com

   i:/C=US/O=Google Inc/CN=Google Internet Authority G2

 1 s:/C=US/O=Google Inc/CN=Google Internet Authority G2

   i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA

 2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA

   i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority

---

Server certificate

-----BEGIN CERTIFICATE-----

MIIEgDCCA2igAwIBAgIITq9JKLrGf5EwDQYJKoZIhvcNAQELBQAwSTELMAkGA1UE

BhMCVVMxEzARBgNVBAoTCkdvb2dsZSBJbmMxJTAjBgNVBAMTHEdvb2dsZSBJbnRl

cm5ldCBBdXRob3JpdHkgRzIwHhcNMTUxMjEwMTgwMzQ3WhcNMTYwMzA5MDAwMDAw

WjBoMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwN

TW91bnRhaW4gVmlldzETMBEGA1UECgwKR29vZ2xlIEluYzEXMBUGA1UEAwwOd3d3

Lmdvb2dsZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVwcpO

O/ntr0YcvEwMII6pb6oKH0kZjFfRCUEJM7PvWg08qULwfN8Z/HeeXQRec4YmpQxt

0u2R7X7qVMrAnzOQCtWsa951+SlzuRXaLaDcC0P/sT6KD2xnyFTVF9/Oq3k44wap

QooOYLQleHru6Fi3UYJM2xLq8jKXSotaOhYEjY/6/vMvZVQVaczfMsu8FZPL22qa

gVwbEca2maC8DT9oEjVlpiiiMRU4QnzSNuD/rssklqUXuRs+MDQPjkrh0VzzYgOo

jHvrxttFPHFUrmMGVWkKiPgwIK3f8fI6Ao2U4HUKEc5+bngQubg5YkLdkxBSPNSc

Bfff9IspCu/V0t4rAgMBAAGjggFLMIIBRzAdBgNVHSUEFjAUBggrBgEFBQcDAQYI

KwYBBQUHAwIwGQYDVR0RBBIwEIIOd3d3Lmdvb2dsZS5jb20waAYIKwYBBQUHAQEE

XDBaMCsGCCsGAQUFBzAChh9odHRwOi8vcGtpLmdvb2dsZS5jb20vR0lBRzIuY3J0

MCsGCCsGAQUFBzABhh9odHRwOi8vY2xpZW50czEuZ29vZ2xlLmNvbS9vY3NwMB0G

A1UdDgQWBBTRV+KjkFiVN5eQP1h1Fz4F4rTwbzAMBgNVHRMBAf8EAjAAMB8GA1Ud

IwQYMBaAFErdBhYbvPZotXb1gba7Yhq6WoEvMCEGA1UdIAQaMBgwDAYKKwYBBAHW

eQIFATAIBgZngQwBAgIwMAYDVR0fBCkwJzAloCOgIYYfaHR0cDovL3BraS5nb29n

bGUuY29tL0dJQUcyLmNybDANBgkqhkiG9w0BAQsFAAOCAQEAQr4lzcjyBQZ5fn/Z

drUDqpN4fx8Sa6hafoGVOfWMktt003x8ylXb3Pxhgw27f6wiFFRXlX85a2F0/AnC

eoV23mHmV6/0mOwocVYt/Th96WNGGmhANkFW//HCphRWnhaOqIG6yFRQ/jxArTvZ

QJEGI5AiYHzQn7LdUM8mH1o3ifR+lX+QiAwyeU9oegdlRslI2KMoPOuOFj329NFx

Bw+XVQXMsRJITPg8pnegPmLCOjpz8y7pBxbxGnfaI66I8X4dArsaXX4r5mkfhk2e

mm7fxQ8qUaW9mKoW0XvwGxU0AwKI8OopuXHoD97vr2GSK0QNZ19A96mtTWnQ2cu2

i9qjGw==

-----END CERTIFICATE-----

subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com

issuer=/C=US/O=Google Inc/CN=Google Internet Authority G2

---

No client certificate CA names sent

---

SSL handshake has read 3240 bytes and written 456 bytes

---

New, TLSv1/SSLv3, Cipher is AES128-SHA

Server public key is 2048 bit

Secure Renegotiation IS supported

Compression: NONE

Expansion: NONE

SSL-Session:

    Protocol  : TLSv1

    Cipher    : AES128-SHA

    Session-ID: 72651A382C87293E8EE016DC08F14D5AEB583C8EC1B327E51C30E0A90CDE1594

    Session-ID-ctx:

    Master-Key: 140E09B68C0F61DBD4201E9B52A1EB3A60DC49E83E8243DB307AF77ADFF0EACD45182425087A2E287E7B35E98816332C

    Key-Arg   : None

    Start Time: 1451295479

    Timeout   : 300 (sec)

    Verify return code: 0 (ok)

---

DONE


interactive없이 문자열을 받을 수 있다. 




$ echo | openssl s_client -connect www.google.com:443 | grep subject

depth=2 /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA

verify error:num=20:unable to get local issuer certificate

verify return:0

DONE

subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com



그리고, 여기에 터미널 출력(verify error:num=20:unable to get local issuer certificate

verify return:0, DONE)을 안보이게 하기 위해 아웃풋 출력을 안보이게 2>/dev/null을 추가한다. 



$ echo | openssl s_client -connect www.google.com:443 2>/dev/null

...



$ echo | openssl s_client -connect www.google.com:443 2>/dev/null | grep subject

subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com




어느 싸이트에 대해서 인증서를 발급했는지 알려면 subject를 보고, 어느 기관에서 발행했는지 보려면 issuer를 확인한다.


subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com

issuer=/C=US/O=Google Inc/CN=Google Internet Authority G2



SSL인증 시간을 확인하려면, openssl을 다시 사용하여 x509 형태로 파싱하여 certificate 내용을 보이지 않도록 한다.


$ echo | openssl s_client -connect www.google.com:443 2>/dev/null | openssl x509 -noout -dates

notBefore=Dec 10 18:03:47 2015 GMT

notAfter=Mar  9 00:00:00 2016 GMT




Posted by 김용환 '김용환'


가끔씩 테스트용 포트를 열어야할 때가 있다.

하지만, 이미 잘 쓰고 있는 데몬의 포트를 사용하면 already in bind port error가 발생하기 쉬우니.

잘 안쓰는 포트를 확인하는 것이 좋다.



특정 포트를 계속 쓰고 있다고 판단되면, adminsub.net에서 포트 검색을 해보고, 해당 포트가 정말 쓰는지 체크할 수 있다.


8001번 포트를 계속 쓰는 데몬이 있어서, 잘 사용하지 않는 포트인 18001번 포트를 찾아 변경할 때 adminsub.net를 활용했다.


https://www.adminsub.net/tcp-udp-port-finder/8001






https://www.adminsub.net/tcp-udp-port-finder/18001



Posted by 김용환 '김용환'