[Ubuntu] ssh서버 구축


기본적으로 우분투에 ssh 클라이언트는 설치되어 있는걸로 알고 있습니다. (openssh-client)

 

여기서 ssh 서버를 구축하기 위해서는 몇가지 설치과정을 거치면 서버로 활용이 가능합니다.

 

 

 - 실행 전 update 하기

sudo apt update

 

 

 - ssh 서버 설치

sudo apt install ssh

> 설치시 '이 작업은 *k바이트의 디스크 공간을 더 사용하게 됩니다. 계속 하시겠습니까? [Y/n]'이라는 문구가 나오면 y키를 누르고 엔터를 해주시면 됩니다.

 

 

 

 - ssh 서버 설정

sudo vim /etc/ssh/sshd_config

 > 저는 vim을 활용하기 때문에 vim이 설치되어 있지 않은 경우 vi를 사용하시면 됩니다.

sudo vi /etc/ssh/sshd_config

> 기본 port가 22로 되어있는데, 바꾸고싶은 port번호로 바꾸시거나, root 권한으로의 로그인이 가능하도록 설정을 변경할 수 있습니다.

 

 

 

 - ssh 서버 실행

sudo service ssh start

 

 

 

 - 클라이언트에서 ssh 서버로의 접속

ssh <계정id>@ssh서버ip주소 [-p port]

> 예시 : 

ssh karzin@192.168.0.1 -p 1234

 


[해결방법]

ssh 접속 에러

(REMOTE HOST IDENTIFICATION HAS CHANGED!)


 

간만에 서버로 돌리고 있던 컴퓨터를 포맷 후 ssh를 이용해 접속을 하려 하니 접속이 되지 않습니다.

 

REMOTE HOST IDENTIFICATION HAS CHANGED! 에러만 뿜고 접속이 되지 않는 경우인데요,

 

해당 에러는 간혹 서버로 돌리고 있던 PC를 시원하게 포맷했거나,

같은 IP주소로 다른 서버를 물려놨을 경우 생기게 됩니다.

 

이는 기존에 IP주소로 접속했던 서버의 ssh key가 남아있어 생기는 문제로,

변경된 서버로 접속하려는 자신의 데스크탑에 남겨져있던 기존 서버의 ssh key를 지워주시면 해결되는 문제입니다.

 

- ssh key 제거하기

ssh-keygen -R [ip주소]

 

이후 ssh를 통해 서버의 ip로 다시 접속하시면 문제없이 접속됨을 확인하실 수 있습니다.

 


[Ubuntu, CentOS] 온도 확인하기


 

- 설치 방법

 > Ubuntu인 경우 (apt)

sudo apt install lm-sensors

 > 혹은 (apt-get)

sudo apt-get install lm-sensors

 

 

  > CentOS인 경우 (yum)

sudo yum install lm_sensors

 

 

 - 온도 측정을 위한 센서 인식 (Ubuntu / CentOS 공통)

sudo sensors-detect

 

 - 서비스 기동

sudo service lm_sensor start

 > 기동중인 경우 restart

sudo service lm_sensors restart

 

 - 센서 체크

sensors

 

 

 

* 수정이 필요할 경우 댓글 남겨주시면 수정하도록 하겠습니다. 감사합니다.

[JavaScript] 문자형을 숫자형으로 바꿔주기

 

 -> js파일은 맨 하단에 있습니다.

 

1. Number 함수를 사용한다.

var myData = '0';
var myNumber = Number(myData);

 

1-2. 아래의 함수를 참조한다. (필요에 의해 개인적으로 만들었음을 알려드립니다.)

function changeNumber(data) {
    console.log('input Data : ', data);
    if(!!data) {
        data = data*1;
    } else {
        if(data == '0') {
            data = 0;
        }
    }
    console.log('output Data : ', data);
    return data;
}

 

2. NaN을 0으로 처리 (필요에 의해 개인적으로 만들었음을 알려드립니다.)

function changeNumber_NaN(data) {
    console.log('input Data : ', data);
    if(!!data) {
        data = data*1;
    } else {
        if(data == '0') {
            data = 0;
        }
    }
    if(isNaN(data)) {
		data = 0;
	}
    console.log('output Data : ', data);
    return data;
}

 

3. 숫자만 숫자로, 나머진 그대로 return (필요에 의해 개인적으로 만들었음을 알려드립니다.)

function changeNumber_rest(data) {
    console.log('input Data : ', data);
    if(!!data) {
        if(!isNaN(data)) {
            data = data*1;
        }
    } else {
        if(data == '0') {
            data = 0;
        }
    }
    console.log('output Data : ', data);
    return data;
}

change_Number.zip
0.00MB

 

* 코드 중 버그 및 에러가 있는 경우 댓글로 알려주시면 수정하도록 하겠습니다.

* 댓글 하나하나가 작성자에겐 큰 힘이 됩니다. 감사합니다.

 

DBLink 란??

 - 타 DB에 접속하기 위한 Link라고 보시면 됩니다.

 - 예를 들자면, A라는 데이터베이스와 B라는 데이터베이스가 있을 때, A에서 B에 있는 Table을 확인하고 싶을 때 사용하는 방법이라고 생각하시면 될 것 같습니다.

 - A -> B.table

 

DBLink 생성

 - 1. (Oracle의 경우) tbsnames.ora 설정 필요 //Oracle의 경우 데이터베이스 링크 생성 시 선언해도 됩니다. (2번으로)

DBLinkName = 
 (DESCRIPTION =
  (ADDRESS_LIST = 
   (ADDRESS = (PROTOCOL = TCP) (HOST = 192.168.1.1) (PORT = 1234) ) 
  )
  (CONNECT_DATA = 
   (SERVICE_NAME = ORACLE) 
  )
 )

 - 1. (Tibero의 경우) tbdsn.tbr 설정 필요

DBLinkName = 
(
 (INSTANCE = (HOST=192.168.1.1)
  (PORT=1234)
  (DB_NAME=TIBERO)
 )
)

 

 - 2. 데이터베이스 링크 생성

create database link [DBLinkUseName] connect to [USER_ID]
identified by [USER_PASSWORD] using [DBLinkName];

 -> [ ]안에 들어갈 내용은 1. 사용할 DBLink의 명칭 2. 연결할 DB에 생성되어있는 접속할 유저의 아이디 3. 유저의 비밀번호 4. 위 ora 및 tbr 파일에서 선언한 네임(맨 위에 있는 명칭 DBLinkName = )을 적어주면 됩니다. (여기에서는  DBLinkName)

 

  - 2.1. Oracle에서 ora 설정을 하지 않고 데이터베이스 링크 생성 방법

Create database link [DBLinkName] connect to [USER_ID]
Identified by [USER_PASSWORD] using '(DESCRIPTION =
 (ADDRESS_LIST = 
  (ADDRESS = (PROTOCOL = TCP) (HOST = 192.168.1.1) (PORT = 1234) )
  )
 (CONNECT_DATA = 
  (SERVICE_NAME = ORACLE) 
 )
)'

 

 - 3. 테스트

select * from dual@DBLinkUseName

 

 

DBLink 삭제

DROP DATABASE LINK DBLinkUseName;

 

DBLink를 쓸 일이 없었으면 하지만.. 생각보다 자주쓰는것 같습니다.



Open JDK 설치

- Java Develop Kit 8 -



올해부터 Oracle JDK의 유료화가 되면서 개인 프로젝트도 그냥 맘편히 Open JDK를 이용하기로 마음을 먹었습니다.


사실 노트북을 포멧을 해서 자바를 설치하려다 보니.. 이왕 포멧한 김에 Open JDK로 하자는 생각이 들었습니다.


그.래.서 설치를 하려고 Open JDK 홈페이지에 접속한것까진 좋은데..


리눅스에서 설치하는 방법만 찾을수 있었고 윈도우용은 보이질 않더라구요. (내가 못찾는 건가..?)


검색을 해보니 윈도우용은 없고, github에 올라와 있는 윈도우용 파일을 이용해야한다는 사실을 알게 되었습니다.

(추후 Open JDK 홈페이지에서 설치하는 방법이 생긴다면 해당 게시글은 다시 업로드 하겠습니다.)


> 리눅스 운영체제에 설치시에는 Open JDK 홈페이지에 있는 Installing 메뉴를 참고하시면 될 것 같습니다. (주소로 이동)


> 윈도우 운영체제에 설치시에는 우측의 github 주소를 이용해주시면 될 것 같습니다. (주소로 이동)

 - 주소로 이동 후 하단으로 스크롤을 해보시면 원하시는 버전의 자바를 내려받으실 수 있습니다.

 - 라이센스는 GPL-2.0입니다. (라이센스에 대한 자세한 내용을 원하신다면 해당 주소(한국어) 혹은 해당 주소(영어)로 이동해주시기 바랍니다.)


* 게시판 중 특성이 중복이 되거나, 애매한 경우 사라질 수 있습니다.

 # 기존 업로드된 게시글에 대해서는 사라진 게시판의 중복된 게시판으로 이동됩니다.

* 저작권에 위반되는 게시글의 경우 수정 혹은 삭제될 수 있습니다.


* Karzin

* abbeea@naver.com



초기화 블록

(initialization block)



오픈소스등 이런저런 코드들을 분석하다보면 꽤나 참신한 코드들을 볼 수 있습니다.


특히 이 언어 저 언어를 사용하는 저로써는 한가지에만 파지를 않다보니 한가지 언어에 대해서 지식이 얕은 편입니다. ㅠㅠ


이번시간에는 제가 최근 봤던 코드 중 초기화 블록(initialization block)에 대해서 설명을 해 볼까 합니다.

(학부시절에도 배웠던것같은데 졸업한지 오랜지라 가물가물하네요.)



소스


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
    class
*/
public class ClassName {
 
    static {
        //class initialization block
    }
 
    {
        //instance initialization block
    }
 
    public static void main(String[] args) {
        //main source
        System.out.println("안녕 세상아!");
    }
}
cs


소스를 살펴보다보면 한번쯤은 이런 소스를 보신적이 있을겁니다.


Class 내부에 있는 static 블록이나, 그냥 블록만 있는 경우.


저의 경우에는 분명 배운거같은데(학부때라던가), 그냥 봤을땐 굉장히 이질감이 느껴지더라구요.

(java이외 다른 언어도 사용이 가능한지는 파악해봐야겠네요.)


상단에 보이는 형태는 전부 초기화 블록(initialization block)이라고 합니다.


초기화 블록은 복잡한 초기화를 할 때 사용하며, 생성자보다 우선 실행됩니다.

(따라서 main 함수 상단에 초기화 블록을 생성했다면 main함수 실행 이전에 실행됩니다.)



초기화 블록은 static {}(블록) 형태와, {}(블록) 형태로 나눠집니다.



* 클래스 초기화 블록(class initialization block)


static {


}


위와 같은 형식을 클래스 초기화 블록(class initialization block)이라고 하며,


클래스 변수의 초기화에 사용이 되며


클래스가 처음 실행될 때 실행이 됩니다. (이후 인스턴스 생성시에는 클래스 초기화는 실행되지 않습니다.)



* 인스턴스 초기화 블록(instance initialization block)


{


}


위와 같은 형식을 인스턴스 초기화 블록(instance initialization block)이라고 하며,


클래스 초기화처럼 인스턴스 변수의 초기화에 사용이 되며


인스턴스가 생성될 때 마다 실행됩니다.




참고


자바에서 static 블록은 무엇을 의미하나요?

(https://hashcode.co.kr/questions/654/%EC%9E%90%EB%B0%94%EC%97%90%EC%84%9C-static-%EB%B8%94%EB%A1%9D%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%84-%EC%9D%98%EB%AF%B8%ED%95%98%EB%82%98%EC%9A%94)



'컴퓨터 이야기 > Java' 카테고리의 다른 글

[자료구조]Java로 Stack 구현해보기 (List 활용)  (0) 2020.06.18
Open JDK 설치  (0) 2019.01.13
#2 자바 프로그래밍의 기초  (0) 2017.02.15
#1 Hello World! [java]  (0) 2017.02.02
# Java와 Eclipse 설치하기!  (0) 2017.02.01



Homebrew 설치

(macOS)



이번시간에는 macOS의 패키지 관리자, Homebrew를 설치해보도록 하겠습니다.


자, 우선 짚고 넘어가야할 부분이 보이는데요, 바로 '패키지관리자'입니다.


물론! 패키지를 관리하니까 패키지 관리자겠지만, 좀 더 알아보도록 하죠!



패키지관리자란? (설치방법은 하단에 있습니다. 설명이 필요없으신 분들은 스크롤을 내려주세요~)


패키지 관리자(package manager, 패키지 매니저), 패키지 관리 시스템(package management system)은 컴퓨터 운영 체제를 위해 일정한 방식으로 컴퓨터 프로그램의 설치, 업그레이드, 구성, 제거 과정을 자동화하는 소프트웨어 도구들의 모임이다.


- 출처 : 위키피디아 (패키지 관리자)


역시 모르는게 있을땐 위키가 모든 대답을 알고 있습니다.


위에 있는 글처럼 패키지 관리자는 컴퓨터 프로그램의 설치, 업그레이드, 구성, 제거 과정을 자동화하는 소프트웨어 도구들의 모임이라고합니다.


한 예로 리눅스를 다뤄보셨다면 터미널에서 apt-install XXXX 이런식으로 필요한 패키지를 설치하셨을텐데, apt또한 패키지 관리자의 한 종류라고 보시면 되겠네요!


저의 경우에는 apt나 yum은 자주 사용해봤지만, 이번에 macOS에서 사용할 brew는 아무래도 처음다루는만큼 어렵게 느껴집니다만, 기본적인 골격은 비슷한 모양인 것 같아 정말 다행입니다..ㅠㅠ



설치방법


설치방법은 생각보다 굉장히 간단합니다.


방법은 스크립트 한줄을 터미널에 복사 - 붙여넣기를 하시면 바로 설치가 진행됩니다.


스크립트는 공식홈페이지(https://brew.sh/index_ko.html)에서 복사하시거나,




/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

- 출처 : https://brew.sh/index_ko.html


상단의 스크립트를 복사하셔서 터미널에 붙여넣으시면 됩니다.


공식홈페이지 들어가면 바로 설치 스크립트가 보입니다.


또한, 상단의 스크립트는 공식홈페이지에 있는 스크립트를 그대로 복사한 것이므로, 우리의 macOS에는 무해할 것입니다!


[설치가 완료된 모습, 출처 : karzin]


터미널에 스크립트를 붙여넣어주시고 커피 한잔의 여유를 가지시다보면 금새 설치가 끝나있을 겁니다.

+ Recent posts