728x90

제 리눅스 환경과 원격 서버의 환경은 아래와 같습니다.

Ubuntu 20.04 LTS

 

만들고자 하는 계정과 배경은 이렇습니다.

  • @와 .이 들어간 이메일 형식의 사용자 계정을 추가하고 싶습니다.
  • 원격 Git Server가 존재하고 로컬에서 SSH로 Repository를 관리하고 싶습니다.

 

사용자 계정추가

먼저 linux에서 사용자 계정을 만드는 명령어는 adduser와 useradd가 있습니다.

여기서는 adduser로 설명을 하겠습니다.

 

$ sudo adduser <사용자id>
$ sudo adduser userId@admin.com

두 번째처럼 계정을 설정할 경우 오류 메시지를 내뿜으면서 계정이 생성되지 않습니다.

기본적으로 특수문자를 계정으로 설정할 수 없기 때문입니다.

하지만 무시하고 특수문자를 계정의 id에 추가하고 싶으면 --force -badname 옵션을 사용하세요.

$ sudo adduser userId@admin.com --force -badname

이후에 비밀번호를 설정하고 다른 내용을 채워주시면 사용자 계정이 생성됩니다.

 

SSH 설정

* SSH를 사용 가능한 상태를 전제로 합니다. ex) openssh 설치*

 

ssh 설정은 서버와 로컬에서 각각 해주실 것이 있습니다.

우선 로컬에서 ssh 공개키를 생성해야 합니다.

기본적으로는 ~/.shh 경로에 키가 존재합니다.

$ cd ~/.ssh 
$ ls
authorized_keys2  id_dsa       known_hosts
config            id_dsa.pub

.ssh 디렉토리로 이동해 ls 명령어로 id_dsa.pub이 있는지 확인합니다.

id_dsa.pub가 공개키고 id_dsa는 개인키입니다.

만약 공개키가 없다면 ssh-keygen 명령어로 생성해주세요.

$ ssh-keygen

그러면 키를 저장하고 싶은 디렉토리를 입력하고 암호를 두 번 입력하면 생성할 수 있습니다.

이때 암호를 비워두면 키를 사용할 때 암호를 묻지 않습니다.

암호를 생성하면 암호는 아래처럼 생겼습니다.

$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU
GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3
Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA
t3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En
mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx
NrRFi9wrf+M7Q== schacon@mylaptop.local

그럼 이제 이 파일을 옮기거나 내용을 복사해 서버에 만들어둔 계정의 .ssh/authorized_keys에 등록하면 됩니다.

 

서버에서는 제일 먼저 생성했던 계정으로 사용자 변경해줍니다.

$ su userId@admin.com
$ cd ~
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys

사용자 계정을 userId@admin.com로 지었으니 su 명령어를 사용해 사용자를 변경해주고

홈 디렉토리로 이동 후 .ssh 디렉토리 생성, 권한 변경.

authorized_keys 파일 생성, 권한 변경을 해줍니다.

 

이후 authorized_keys 파일에 위에 로컬에서 생성한 공개키를 추가해주시면 됩니다.

파일로 가져오셨다면 cat, 복사해오셨다면 echo를 사용해주세요. 

사실 다른 방법도 될 수 있는데 전 echo를 사용했습니다.

$ echo "공개키"  >> ~/.ssh/authorized_keys

다음부터는 생성한 계정을 통해 접속하시면 됩니다.

 

#ex)
$ ssh userId@admin.com@192.168.xxx.xxx:9999

저는 Repository를 관리한다고 했으니 서버에 생성한 계정 소유자 권한을

서버에 접속은 못하고 push, pull만 가능하게 하려면 git-shell를 사용해보세요.

 

참조

Git server 설정하기

 

Git - 서버 설정하기

ssh-copy-id 명령을 사용하면 여기에서 설명하는 SSH 공개키를 복사하고 설치하는 내용을 자동화 한 도구이다.

git-scm.com

새 사용자 계정추가 aws linux

728x90

'OS' 카테고리의 다른 글

Linux Shell 명령어 - scp, cp, cat, su, chmod  (0) 2022.11.21
728x90

오늘 로컬에서 원격 저장소로 파일을 하나 옮기려고 하는데 scp permission denied오류 때문에

리눅스 쉘에 명령어를 바꿔가며 수십 번 처보고, 구글에 검색도 해보고 얻은 결과입니다.

 

문제가 저와 다를 수 있지만 대부분 비슷한 답을 주니 먼저 시도해보고 다른 방법을 찾는 것도 좋으실 듯합니다.

 

일단 제 코드는 아래와 비슷합니다.

$ scp -P 9900 README.md user@192.168.xxx.xxx:/home/user/repo

해당하는 주소 home/user/repo에 9900번 포트를 이용해 README.md 파일을 옮기고 싶었으나

scp permission denied 오류가 발생했습니다.

 

해당 오류를 검색해보시면 크게 세 가지 방법을 찾으실 수 있는데요.

1. 옮기려는 파일의 권한이 잘 주어졌는지 확인해보세요. 

2. 원격 저장소의 포트 번호나 경로가 맞는지 확인해보세요.

3. 원격 저장소의 폴더 권한을 확인해보세요.

 

먼저 첫 번째 문제는 하위 디렉토리로 이동해서 ls -al 명령어를 치면 아래와 같은 결과를 얻을 수 있습니다.

그걸 보고 읽기, 쓰기 권한이 있는지 확인해보세요.

빨간색 부분이 권한이 있는지 없는지 나와있는 부분입니다. r은 읽기 w는 쓰기 x는 실행

저처럼 되어 있다면 문제없습니다.

 

두 번째의 포트번호는 원격 저장소에 설정하신 설정을 찾으셔야 하니 패스하고

경로 같은 경우는 상대 경로로 작성하면 된다는 이야기를 여러 스택오버플로우 페이지에서 볼 수 있었습니다.

$ scp -P 9900 README.md user@192.168.xxx.xxx:/home/user/repo

예를 들어 위와 같은 주소가 원격 저장소의 주소이고, /home/user가 홈 디렉토리인 경우에는 아래처럼 작성할 수 있습니다.

$ scp -P 9900 README.md user@192.168.xxx.xxx:~/repo

 

세 번째 문제는 로컬에서 원격 저장소에 파일을 보낼 때 원격 저장소의 디렉토리가 root 권한으로 설정되어있을 경우

해당 오류가 발생할 수 있습니다.

ls -al 명령어를 쳤을 때 파일을 받아오려는 원격 저장소의 디렉토리의 권한이 위와 같이 root로 되어있다면

권한을 변경하고 다시 시도해보세요.

$ sudo chown <사용자 계정> <디렉토리명>
$ sudo chown ymkim repo.git

위의 명령어로 사용자 계정으로 권한을 바꿀 수 있습니다.

예를 들어 두 번째 명령어는 repo.git 폴더를 ymkim계정 권한으로 바꾸는 것입니다.

 

여담으로 위의 방법들이 안되시면 ssh 서비스가 켜져 있는지 확인해보세요.

$ service ssh status

혹은 Scp permission denied (publickey)의 문제이면 원격 저장소에 ssh 공개키 등록을 해주셔야 합니다.

728x90
728x90

SSH(Secure Shell)

 

- 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을

복사할 수 있도록 해주는 응용프로그램 또는 프로토콜을 가리킵니다.

- TCP 상에 보안 채널을 형성하여 기타 응용 프로토콜들이 안전하게 데이터 교환 가능하게 합니다.

- 특징

  - 암호화되지 않은 telnet, SMTP 등에 대한 패킷 스니핑 등의 보안 공격을 방지합니다.

  - TCP 통신만 가능합니다. 

 

Git에서 로컬이나 원격 저장소를 만들고 SSH통신을 통해 소스버전을 관리할 수 있습니다.

 

 

728x90

'네트워크' 카테고리의 다른 글

디지털 인증서(Certificate)와 SSL/TLS 기초  (1) 2023.07.11

+ Recent posts