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

 

scp

- Secure Copy의 줄임말입니다.

- SSH 통신을 이용해 네트워크로 연결된 호스트 간에 파일을 주고받는 명령어입니다.

- 원격 저장소에 있는 파일과 디렉토리를 보내거나 가져올 수 있습니다.

원격 저장소에서 폴더 받아오기
$ scp git@192.168.000.000:/myrepo.git /home/repos
$ scp 옵션 [저장소아이디]@[저장소주소]:[폴더위치] [저장위치]

로컬에서 원격 저장소로 파일보내기
$ scp test.txt git@192.168.000.000:/myrepo.git
$ scp [옵션] [파일 또는 디렉토리] [저장소아이디]@[저장소주소]:[저장위치]

 

 

cp

- copy 명령어입니다.

- 파일 또는 디렉토리를 복사하는데 이용합니다.

$ cp test.text test2.txt
test 파일을 복사하여 test2 파일을 생성합니다.

 

cat

- 파일의 내용을 텍스트로 출력합니다.

$ cat /home/user/test.txt

home/user 경로 안에 있는 test 파일을 읽어 쉘에 보여줍니다.

사용방법은 훨씬 많지만 저는 파일을 읽어 안의 내용을 확인할 때만 사용하고 있습니다.

 

su

- Substitute User의 줄임말입니다.

- 다른 계정으로 전환하는 명령어입니다.

$ su git
$ su otheruser

계정에 비밀번호를 만들어 뒀을 경우 명령어를 사용하면 비밀번호를 입력하라고 나옵니다.

계정 생성은 useradd 명령어 혹은 adduser를 사용하면 됩니다.

개인적으로는 adduser가 편한 것 같습니다.

 

chmod

- Change Mode의 줄임말입니다.

- 파일의 사용 권한을 변경할 때 사용합니다.

$ chmod [option] [mode] [file]

- 읽고, 쓰고, 실행하는 것에 대한 권한을 지정할 수 있습니다.

- 이는 rwx와 8진수 형식으로 지정할 수 있습니다.

$ chmod 700 .ssh
$ chmod 600 .ssh/authorized_keys

 

728x90

'OS' 카테고리의 다른 글

Linux(Ubuntu) adduser 사용자 계정 추가와 SSH 설정  (0) 2022.11.22

+ Recent posts