리눅스 원격접속 명령어 - linugseu wongyeogjeobsog myeonglyeong-eo

기본 방법

ssh 명령어의 manpage에서, 아래와 같은 Synopsis를 확인할 수 있다.

ssh [-afgknqstvxACNTX1246] [-b bind_address] [-m mac_spec] 
 [-c cipher_spec] [-e escape_char] [-i identity_file] 
 [-i PKCS#11-URI]
 [-l login_name] [-F configfile] [-o option] [-p port] 
 [-L [bind_address:]port:host:hostport]
 [-R [bind_address:]port:host:hostport]
 [-D [bind_address:]port] hostname | user@hostname [command]

여기서 맨 윗 줄과 아랫 줄만 빼서 보면 아래와 같이 줄일 수 있다.

ssh [user@hostname] [command]

즉, 아래와 같은 명령어를 사용하면

ssh  ls -al

192.168.2.100 원격지에서, root 계정의 홈 디렉토리에서, ls -al 명령어를 수행한 결과를 현재의 터미널에 출력해준다.

한 줄로 여러 개 명령어 원격 실행

ssh [user@hostname] "command_1;command_2;"

명령어를 따옴표로 묶고, 각각의 명령어를 세미콜론(;)으로 구분지어주면 된다.

예시

ssh user@server_ip "ls -a; df"

server_ip 원격지에서, user 계정의 홈 디렉토리에서, ls -al 명령어를 수행한 결과와 df 명령어를 수행한 결과를 현재의 터미널에 출력해준다.

스크립트로 실행하는 방법

별도의 쉘스크립트를 만들고 원격에 스크립트 해석기를 실행시키고 파이프나 리다이렉션으로 보내는 방법

test_script.sh

#!/bin/sh
ls -la
df

cat test_script.sh | ssh myserver sh
또는
ssh myserver sh < test_script.sh

여러 서버에 루프를 돌면서 지정한 스크립트를 실행하는 스크립트

#!/bin/sh
SERVERS="
myserver1
myserver2
"
for m in $SERVERS
do
    ssh $m sh < test_script.sh  # 순차 실행
    # ssh $m sh < test_script.sh > $m.log &  # 백그라운드 실행
done

참고 자료

  • ssh 원격 명령 실행
  • SSH로 많은 서버에 동시에 같은 명령내리기

Ubuntu에서 SSH를 이용해서 암호없이 원격 서버의 명령어를 실행하는 방법에 대해 알아보겠습니다.

암호는 우리를 보호해주지만 원격 서버에 연결할 때마다 매번 암호를 입력해야한다면 불편합니다.

로컬서버(출발지)에서 원격서버들(도착지)로 연결하는 형태로 실습을 통해 알아보겠습니다.

실습에서는 원격서버들의 CPU 사용률을 구해보겠습니다.

리눅스 원격접속 명령어 - linugseu wongyeogjeobsog myeonglyeong-eo

1) 로컬서버에 SSH Key를 발급합니다.

중간에 설정할 passphrase를 묻는데 빈값으로 비워둡니다.

만약 설정하시면 SSH 연결 시 개인키 잠금을 풀 암호 입력을 요구하게됩니다.

(로그인 상태에서 이 키의 잠금을 자동으로 해제하도록 설정할 수 있습니다.)

Generating public/private rsa key pair. Enter file in which to save the key (/home/user1/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/user1/.ssh/id_rsa. Your public key has been saved in /home/user1/.ssh/id_rsa.pub.

ssh-rsa AAAAB3NzaC1yc2EAAAXXXXXXXXXXXXXXXXXX user1@user1-MYSERVER01

2) 원격서버들을 구성하고 위에서 발급한 SSH 공개키를 복사합니다.

실습은 도커 Ubuntu 컨테이너를 활용하여 9001번 포트를 연결하고 openssh를 설치합니다.

$ sudo docker pull ubuntu:bionic $ sudo docker run --name ubuntu01 -it -p 9001:22 ubuntu:bionic bash $ apt-get update $ apt-get install -y openssh-server $ mkdir /var/run/sshd

원격으로 연결할 user2 계정을 만들고 해당 계정으로 전환합니다.

$ adduser user2 $ su - user2

홈폴더에 .ssh 디렉토리를 만들고 SSH 공개키를 복사하여 authorized_keys 파일에 추가합니다.

$ mkdir .ssh $ echo 'ssh-rsa AAAAB3NzaC1yc2EAAAXXXXXXXXXXXXXXXXXX user1@user1-MYSERVER01' >> ~/.ssh/authorized_keys $ exit

3) 로컬서버에서 ssh 이용해서 원격서버에 원격 명령어를 호출합니다.

[사용법] ssh -p 포트번호 아이디@아이피주소

$ ssh -p 9001 "top -b -d1 -n1|grep -i 'Cpu(s)'|head -c21|cut -d ' ' -f3|cut -d '%' -f1" // [결과] 2.8

원격서버의 CPU 사용률이 2.8%로 나옵니다.

이상 SSH와 공개키 개인키를 이용해서 암호없이 원격 서버의 명령어를 실행하는 방법에 대해 알아보겠습니다.

끝.

SSH(Secure SHell)

  • OSI 7계층 프로토콜 종류 중 하나이다
  • 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 파일을 복사할 수 있도록 해주는 응용 플고그램 또는 그 프로토콜
  • FTP 또는 Telnet에 비해 장점은 "보안"이다
    • key 를 이용해서 접속
  • openssh-server를 설치해서 사용할 수 있다
    • mac os는 기본적으로 ssh server가 설치되어있다

명령어

ssh [원격 계정]@[원격 ip] -p [변경할 포트]

옵션

  • p : 원격 호스트에 연결할 포트를 지정
  • L : 지정된 원격 호스트와 포트에 전송할 로컬 포트 설정
  • o : 구성파일의 형식을 따르는 사용자 정의 옵션에 제공하는데 사용된다.
    • 호스트별로 지정할 수 있다
  • N : Do not execute a remote command. This is useful for just forwarding ports.
    • 포트를 포워딩하는 데 유용

사용 예

  • 원격 컴퓨터(서버) 접속
  • 포트포워딩
    • ssh -p 20080 -L 8080:localhost:8080 -i ~/keyDir/key.pem -N

more

  • 사용했던 옵션 및 예시만 적었으므로 다른 옵션들이나 정확한 정보들은 추가로 찾아봐야 함
  • TODO : FTP vs. Telnet vs. SSH 정리하기

참고

  • https://hanamon.kr/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-ssh%EB%9E%80/?ckattempt=1
  • https://velog.io/@hyeseong-dev/%EB%A6%AC%EB%88%85%EC%8A%A4-ssh%EB%9E%80
  • https://wlsvud84.tistory.com/12
  • 옵션정리