업데이트(2024.08.01): pyenv uninstall 관련 내용 추가

업데이트(2024.07.19): Ubuntu 16.04 LTS 관련 내용 삭제 및 패키지 업데이트 변경

업데이트(2024.07.14): OS 버전에 따른 패키지 관련 내용 수정

업데이트(2022.12.01): pyenv-update git 주소 변경

업데이트(2021.10.11): pyenv 설정 관련 값 추가

업데이트(2020.02.08): Ubuntu 18.04 내용 추가 및 파이썬 버전 변경 3.5.2 -> 3.6.2

업데이트(2018.03.07): pyenv-update를 추가하였고 환경변수를 로드해주는 명령어도 추가해주었습니다.

Ubuntu 환경에서 pyenv와 virtualenv를 사용해보자

환경

  • Ubuntu 18.04 LTS
  • Ubuntu 20.04 LTS
  • Ubuntu 22.04 LTS
  • Ubuntu 24.04 LTS


필요한 패키지 설치

Suggested build environment에 따라 필요한 패키지들을 먼저 설치합니다.

sudo apt update -y
sudo apt install -y build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev curl git libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev


pyenv 설치

git에서 ~/ 폴더안에 .pyenv이름으로 직접 clone을 합니다.

git clone https://github.com/pyenv/pyenv.git ~/.pyenv

추가를 마치고 환경변수까지 추가합니다.

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init --path)"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
source ~/.bash_profile

환경 변수를 추가하고나서 pyenv를 찾을 수 없다고 하여 컴퓨터를 reboot하였습니다.

만약 이렇게 reboot을 했음에도 진행이 되지 않는다면 다음 링크를 참고한다.(https://github.com/pyenv/pyenv/wiki/Common-build-problems)


pyenv-update 설치

pyenv를 업데이트 해줄 수 있도록 다음 아래 명령어를 통해 pyenv-update를 설치합니다.

git clone https://github.com/pyenv/pyenv-update.git ~/.pyenv/plugins/pyenv-update

업데이트를 합니다.

pyenv update


설치 가능한 python version들 확인

설치 가능한 python version들을 확인하고 설치합니다.

pyenv install --list


필요한 python version 설치

저는 3.6.2를 설치하였습니다. pyenv에 설치된 python version들은 pyenv versions를 통해서 확인 가능합니다.

pyenv install 3.6.2


pyenv-virtualenv 설치

git에서 ~/.pyenv/plugins/ 폴더안에 pyenv-virtualenvwrapper이름으로 직접 clone을 합니다.

git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv

추가를 마치고 환경변수까지 추가합니다.

echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
source ~/.bash_profile

똑같이 환경변수를 추가하고 로드하였는데도 안되면 다시 shell을 껐다가 켭니다.


가상환경 생성

이전에 포스팅한 [Mac] Mac에서 pyenv, virtualenv 그리고 autoenv 사용하기에 나와있는 것과 사용법은 똑같습니다.

사용법

pyenv virtualenv [python version] [virtual environment name]

예시

pyenv virtualenv 3.6.2 LinkU


가상환경 사용

이 부분도 포스팅한 [Mac] Mac에서 pyenv, virtualenv 그리고 autoenv 사용하기에 나와있는 것과 사용법은 똑같습니다.

$ pyenv activate [virtual environment name]
(virtual environment name)$ pyenv deactivate


가상환경 삭제

pyenv versions 명령어를 통해 나오는 가상환경을 pyenv uninstall [가상환경 디렉토리]를 통해 삭제할 수 있습니다.

$ pyenv versions
* system (set by /home/twpower/.pyenv/version)
  3.7.2
  3.9.2
  3.9.2/envs/test-env
  3.10.2
  3.10.2/envs/jupyter-notebook-env
  jupyter-notebook-env --> /home/twpower/.pyenv/versions/3.10.2/envs/jupyter-notebook-env
  test-env --> /home/twpower/.pyenv/versions/3.9.2/envs/test-env
$ pyenv uninstall 3.9.2/envs/test-env 
pyenv: remove /home/twpower/.pyenv/versions/test-env? [y|N] y
pyenv-virtualenv: remove /home/twpower/.pyenv/versions/3.9.2/envs/test-env? (y/N) y


참고자료

Shell Script에서 명령어들을 순차적으로 실행해야 할 때 ;와 &&를 쓰는데 그 차이를 알아보자

환경 및 선수조건

  • Ubuntu
  • CentOS


차이

  • ;는 앞에 있는 명령어가 성공적으로 수행이되든 되지 않든 다음에 나오는 명령어가 실행됩니다.
$ apt-get install gcc; apt-get install gdb


  • &&AND와 같은 의미로 앞의 명령어가 성공적으로 수행되어야(true를 return해야) 다음뒤에 있는 명령어가 실행됩니다.
$ apt-get install gcc && apt-get install gdb

ssh key로만 로그인을 할 수 있도록 변경하자

환경 및 선수조건


sshd_config 파일 수정하기

$vim /etc/ssh/sshd_config

다음 아래처럼 PasswordAuthentication yes를 다음처럼 PasswordAuthentication no로 변경합니다.

  • PasswordAuthentication yes -> PasswordAuthentication no

PasswordAuthenticationYes PasswordAuthenticationNo


ssh 바뀐 설정 적용하기

다음 명령어를 통해 바뀐 설정을 적용해줍니다.

$ /etc/init.d/ssh restart

#아무런 반응이 없다면

$ service ssh restart

만약 적용되지 않는다면 재부팅해주면 적용되어있습니다.

$ sudo reboot

외부에서 root계정에 로그인 할 수 없도록 막자


환경 및 선수조건


sshd_config 파일 수정하기

의외로 간단하게 sshd_config 파일에서 수정만 하면 됩니다.

다음 아래 파일을 vim 혹은 다른 편집기를 통해서 엽니다.

$vim /etc/ssh/sshd_config

다음 아래처럼 PermitRootLogin yes를 다음처럼 PermitRootLogin no로 변경합니다.

  • PermitRootLogin yes -> PermitRootLogin no

RootLoginYes RootLoginNo


ssh 바뀐 설정 적용하기

다음 명령어를 통해 바뀐 설정을 적용해줍니다.

$ /etc/init.d/ssh restart

#아무런 반응이 없다면

$ service ssh restart

만약 적용되지 않는다면 재부팅해주면 적용되어있습니다.

$ sudo reboot

해킹당하지 않기 위한 기초로 서버를 호스팅하고 키를 발급해 접근을 해보자


환경

  • Mac
  • ssh-keygen(키 발급)
  • ssh-copy-id(서버에 공개키 전송)
  • 원격서버(Ubuntu 16.04) 및 추가된 유저


현재 환경은 Ubuntu 16.04버전에서 진행을 하겠습니다. Mac기준으로 포스팅을 하였으며 Mac에서 Remote Server에 접근해 보겠습니다.


ssh-copy-id 설치

보다 빠르게 설정을 하기 위해 ssh-copy-id를 사용하겠습니다.

  • ssh-copy-id: Local에서 발급한 공개키를 서버로 전송할 때 사용할 수 있는 패키지입니다.


Homebrew를 통한 설치

Homebrew가 설치되어 있다고 가정 했을 때 설치법은 아래와 같습니다.

$ brew install ssh-copy-id

추가적으로 원격서버 IP 주소는 알고 있으며 유저가 추가되었다고 가정을 하고 진행하겠습니다. 제가 추가한 유저는 test 입니다.

유저 추가에 대한 자료는 호스팅한 Ubuntu 서버에 유저 추가하기를 참고하세요!


Mac에서 SSH Key 발급

편의상 ~/.ssh의 폴더에서 진행을 하겠습니다.

우선 저희가 Key를 현재 로컬 컴퓨터에서 발급을 해야합니다. Mac 혹은 Ubuntu에서는 다음과 같은 명령어로 발급이 가능하니다.

  • -t는 dsa, ecdsa, ed25519, rsa, rsa1 중에서 어떤 형식의 암호화 알고리즘을 선택할지 결정하는 옵션입니다.

  • -b는 key를 만들때 몇 bit의 key를 만들지 결정하는 옵션이며 기본값은 2048입니다.

$ ssh-keygen [-t] [rsa] [-b] [2048]

옵션을 사용하지 않는 예시

$ ssh-keygen

그러면 아래와 같이 file이 저장될 위치와 passphrase를 입력하면 완성이 됩니다.

file을 입력할 때 파일 위치를 입력해도 되고 원하는 파일의 이름을 입력하면 ~/.ssh/[key name] 형태로 들어가게됩니다. 저는 test라고 키 이름을 짓겠습니다.

passphrase는 key와 함께 사용하는 비밀번호입니다. 현재는 편의상 사용하지 않겠습니다.

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/taewoo/.ssh/id_rsa): test (실제로는 여기에 파일 경로 혹은 이름을 넣어주시면 됩니다.)
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in test.
Your public key has been saved in test.pub.


ssh-copy-id를 통해서 손쉽게 ssh public key를 서버에 보내기

위의 과정을 제대로 진행했다면 ~/.ssh 폴더에 private keypublic key가 생성되어 있습니다.

저는 testtest.pub가 생성되었습니다.

Keys

이제 ssh-copy-id를 통해서 원격 서버에 public key를 보내봅시다. 사용법은 아래와 같습니다.

$ ssh-copy-id -i [key path or name] [Username in Server]@[IP Address]

사용 예시

$ ssh-copy-id -i test.pub test@[IP Address]

실제로 진행을 해보면 아래와 같습니다.

Taewooui-MacBook-Pro:.ssh taewoo$ ssh-copy-id -i test.pub test@[IP Address]
/usr/local/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "test.pub"
/usr/local/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/local/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
test@[IP Address]'s password:

Number of key(s) added:        1

Now try logging into the machine, with:   "ssh 'test@[IP Address]'"
and check to make sure that only the key(s) you wanted were added.

로그인을 해봐서 키가 추가되었는지 확인해달라고합니다. 원격 서버에 해당 User로 로그인하고(지금과 같은 경우는 test유저 입니다.) ~/.ssh 폴더에 authorized_keys 파일에 키가 저장되어 있는지 확인합니다.


Mac에서 ssh로 원격서버에 SSH KEY를 통해서 접속하기

사용법은 다음과 같습니다.

$ ssh -i [private key name] [Username]@[IP Address] -p [port number]

실제 접속을 하면!

$ ssh -i test test@[IP Address]

Login Success


Mac에서 ~/.ssh/config를 통해 ssh 접속을 간편하게 하기

Mac에서는 ~/.ssh/config 파일을 통해서 보다 쉽게 접속을 할 수 있습니다.

~/.ssh에 config라는 파일을 생성합니다.

$ touch config

해당 config 파일에 ssh 접속에 대한 정보를 아래 형식에 따라서 입력하시면 됩니다.

Host Name1
    HostName [IP Address]
    User [Username]
    Port [Port Number]
    IdentityFile ~/.ssh/[private key name]

Host Name2
    HostName [IP Address]
    User [Username]
    Port [Port Number]
    IdentityFile ~/.ssh/[private key name]

여기 내용대로 진행을 하셨다면 아래처럼 입력하시면 됩니다.

Host Test
    HostName [IP Address]
    User test
    IdentityFile ~/.ssh/test

그러면 Host 다음에 오는 이름만으로도 간단하게 접속이 가능합니다.

$ ssh Test