- SSH(Secure Shell)는 컴퓨터 네트워크에서 암호화된 통신을 통해 원격으로 컴퓨터에 접속하고 명령을 실행할 수 있는 프로토콜이다.
- SSH는 보안 및 데이터 무결성을 제공하기 위해 설계되었으며, 일반적으로 원격 서버에 안전하게 접속하고 파일을 전송하거나 명령을 실행하는 데 사용된다.
- SSH는 클라이언트-서버 모델을 기반으로 작동한다.
- 일반적으로 SSH 클라이언트는 로컬 컴퓨터에서 실행되며, 원격 서버에 대한 인증 및 암호화된 통신을 처리한다.
- SSH 서버는 원격 컴퓨터에서 실행되며, 클라이언트의 연결 요청을 수락하고 인증을 검증한 후 암호화된 통신을 설정한다.
SSH의 기능과 특징
- 보안
SSH는 네트워크 통신을 암호화하여 데이터의 기밀성과 무결성을 보호한다. 암호화된 연결을 통해 비인가자가 데이터를 엿들을 수 없다. - 인증
SSH는 클라이언트와 서버 간의 안전한 인증을 제공한다. 대부분의 경우 사용자는 비밀번호 대신 SSH 키를 사용하여 서버에 로그인하게 된다. 이러한 키는 암호화되어 있으며, 개인 키는 클라이언트에 저장되고 공개 키는 서버에 저장된다. - 원격 제어
SSH를 사용하면 원격 서버에 대한 로그인 및 원격 명령 실행이 가능하다. 이를 통해 사용자는 로컬 컴퓨터에서 원격 서버를 제어하고, 파일 전송, 프로세스 관리, 설정 변경 등의 작업을 수행할 수 있다. - 포트 포워딩
SSH는 로컬 포트와 원격 포트 간의 연결을 안전하게 전달할 수 있는 포트 포워딩 기능을 제공한다. 이를 통해 로컬 시스템과 원격 서버 사이의 트래픽을 안전하게 전송하거나 원격 리소스에 접근할 수 있다.
⛈ SSH는 대부분의 운영 체제에서 사용할 수 있으며, 다양한 SSH 클라이언트 및 서버 소프트웨어가 제공된다. 일반적으로 OpenSSH는 많은 운영 체제에서 사용되는 가장 널리 알려진 SSH 구현체이다.
🐥 SSH를 사용하면 보안적으로 안전한 원격 접속 및 데이터 전송을 수행할 수 있으므로, 원격 서버 관리, 원격 작업 수행, 파일 전송 등에 유용하게 활용됩니다.
예제
ssh2모듈을 통해서 자바스크립트에서 원격 접속을 구현해보자.
npm install ssh2
이제 아래의 예제 코드를 사용하여 클라이언트 앱에서 SSH를 통해 원격 서버에 접속하고 명령을 실행할 수 있다.
const Client = require('ssh2').Client;
// SSH 연결 설정
const config = {
host: '<원격 서버 IP>',
port: 22,
username: '<사용자 이름>',
password: '<비밀번호>'
};
// SSH 클라이언트 생성
const conn = new Client();
conn.on('ready', () => {
console.log('SSH 연결 성공');
// 원격 서버에 명령 실행
conn.exec('ls', (err, stream) => {
if (err) throw err;
stream.on('close', (code, signal) => {
console.log('명령 실행 완료');
conn.end(); // SSH 연결 종료
}).on('data', (data) => {
console.log('결과:', data.toString());
}).stderr.on('data', (data) => {
console.log('에러:', data.toString());
});
});
});
conn.connect(config);
위의 코드에서 `<원격 서버 IP>`, `<사용자 이름>`, `<비밀번호>` 부분을 실제 원격 서버의 정보로 바꾼다.
이 예제에서는 `ls` 명령을 실행하여 원격 서버의 파일 목록을 출력하고 결과를 로그에 표시한다. 필요에 따라 원하는 명령으로 변경할 수 있다.
ssh2 라이브러리를 사용하여 SSH 연결을 설정하고 `exec` 메서드를 사용하여 원격 서버에 명령을 실행할 수 있다.
`stream` 객체는 명령 실행 결과를 읽고, `close` 이벤트에서 명령 실행이 완료되었음을 확인할 수 있다.
`data` 이벤트에서는 명령 실행 결과가 출력되고, `stderr` 객체를 통해 발생한 에러 메시지를 처리한다.
sshping은 SSH 연결 상태를 테스트하기 위해 개발된 도구로 sshping을 사용하면 명령행에서 원격 서버에 대한 SSH 연결을 테스트할 수 있다.
⚽️ 일반적으로는 PuTTY를 통한 SSH 원격 접속을 많이 하는 것 같다.
'기타' 카테고리의 다른 글
선언적 프로그래밍이란? (0) | 2023.08.30 |
---|---|
SQL의 DDL, DML, DCL란? (0) | 2023.08.25 |
nvm 대신 asdf 사용하기 (0) | 2023.08.11 |
SemVer에 대해서 알아보기 (0) | 2023.08.06 |
MSA(Microservices Architecture) 개발 방법론 알아보기 (0) | 2023.07.30 |