SSH 암호 없이 자동 로그인 종합 안내
본문은 SSH를 통하여 여러 서버사이에 암호 입력 없이 자동 접속을 가능하게 하는 내용을 포함 하고 있으며, 많은 분들이 도움을 주셔서 작성 되었습니다. 글타래를 통하여 많은 도움을 주신 분들에게 감사의 말씀을 전합니다.
저 또한 초보이기에 Linux를 처음 접하시는 분들에게 도움을 드리고자 초보 입장에서 작성되었음을 미리 알려 드립니다.
이 글을 참조하시다 궁금한 점이나 문제점이 있을때 글타래를 통하여 알려주시면 성심껏 답변 및 본문을 수정하여 지속적으로 도움을 드리고자 합니다.^^
또한, 다른 주제에 대해서도 너무 글들이 난무하고 있어서 정리가 안 되신 주제가 있으시다면, 연락 주시면 새로운 주제를 정리하는 글을 작성할 예정입니다. ^^
============================================================================================================================
상황 : B 클라이언트에서 일반계정(user1)으로 A 서버로 암호 없이 SSH 접속을 한다.
B클라이언트 작업.
1. user1 계정으로 접속 한다.
2. ssh-keygen 명령으로 passphrase 에 암호를 입력하여 키를 생성한다.
ssh-keygen -t rsa<엔터> 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. The key fingerprint is: XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX <a href="mailto:user1@localhost.localdomain" rel="nofollow">user1@localhost.localdomain</a>
※ 암호는 입력해도 되고, 입력 없이 엔터 치시면 인증서 암호 따로 필요 없이 접근 됩니다.
3. /home/user1/.ssh 폴더의 파일을 확인 후 id_rsa.pub 파일을 다운 받는다.
합계 12 -rw------- 1 user1 user 951 7월 25 15:03 id_rsa -rw-r--r-- 1 user1 user 238 7월 25 15:03 id_rsa.pub -rw-r--r-- 1 user1 user 669 7월 10 11:17 known_hosts
A서버 작업.
1. A서버의 user1 아이디로 로그인 한다. (user1 뿐 아니라 다른 계정에서도 같은 작업을 하면, 그 계정으로 접근 됨.)
2. /home/user1/.ssh/폴더로 접근하여 아까 다운 받은 id_rsa.pub 파일을 업로드 한 후, 파일 명을 authorized_keys로 변경 시킨 후, 권한을 600으로 변경한다.
cat id_rsa.pub >> authorized_keys<엔터> chmod 600 authorized_keys<엔터>
B 클라이언트에서 확인
1. B 클라이언트에 user1으로 접속하여 확인 한다.
ssh <a href="mailto:user1@xxx.xxx.xxx.xxx" rel="nofollow">user1@xxx.xxx.xxx.xxx</a> Enter passphrase for key '/home/user1/.ssh/id_rsa': <암호 입력후 엔터(키 생성시 암호 입력을 안했다면 묻지 않고 바로 접속됨.)>
제가 성공한 방법입니다.
http://tong.nate.com/exchangem/13452969
이곳인데요, 오류없이 잘 되었습니다. 참고해 보시길^^
XD~
관련해서 제가
관련해서 제가 써놨던 글도 --;;
http://b.mytears.org/2005/07/218
더불어 authorized_key 파일은 퍼미션을 600으로 변경하면 안될 거 같은데요. 그렇게 하면 sshd 가 그 파일 내용을 읽을 수 없기 때문에 인증된 유져인지를 확인할 방법이 없어집니다.
그리고 공개키를 구지 지울필요가 있을까 싶네요. 공개키/비밀키 기반의 암호화에서 보안상 공개되면 안되는 쪽은 비밀키 쪽입니다. 공개키는 그냥 마구마구 뿌려주기 위한 키구요. 괜히 public 이 아니죠 ;)
--
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
인용:authorized_key
sshd가 보통 root권한으로 실행되어서 별다른 문제가 없을겁니다.
man 페이지에도 반드시 비밀로 할 필요는 없다고 하였지 공개하라고 하진 않았습니다.
마찬가지로 ~/.ssh 디렉토리 자체를 700 으로 맞추는 경우도 많습니다.
제가 그걸 더 권장하는 것 같았는데 정확한 링크는 기억나지 않네요.
흠.. 설정 잘 하신 것 같은데 이상하네요.
그런데 접속하는 서버의 계정이 root라는 말인가요?
아니면 클라이언트 쪽을 말하는 건가요?
클라이언트 쪽이라면 파일 소유자, 권한을 다시 한 번 살펴 보시는 게 좋을 듯 하네요.
$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}
인용:인용:authorized_key
JG 님, 서버/클라이언트 둘다, 일반 계정인 user1 계정이었습니다. (둘다 root 계정일 경우는 문제 없이 접속 되더군요 ^^)
파일 권한 쪽으로 가닥을 잡고 해결해 보는 중입니다. ^^
코드를 수정해서 ID와
코드를 수정해서 ID와 pass를 직접 넣는 방법은 어떤지....
흠 저는 대학교에서 사용중인 qmail server 로그파일의 속성이 664 로 되어있어서
서버 관리 하는 사람한테 열린 로그 파일의 위험성을 알리고자 한번 수정해본적이 있네요.
전체적으로는 qmail dump 파일을 읽고 이중에서 id 만 추출한다음에
id 와 pass가 같은 사람이 존재 할 수 있다는걸 보여주기 위한 프로그램이였습니다.
ssh client 에서 id 와 pass 없이 login 하기 위해서는
다음 두 함수만 수정하면 되더군요
1. int userauth_passwd(Authctxt *authctxt) // sshconnect2.c
2. void ssh_userauth2(const char *local_user, const char *server_user, char *host,
Sensitive *sensitive)
1번 함수에서 read_passphrase 대신에 password 직접 string 으로 넣고
2번 함수에서 authctxt.server_user 에 id 를 직접 string 으로 넣으면 됩니다.
그리고 ssh 파일에 UID 와 GID setting해 놓으면 역어셈도 걱정 안해도 되지 않을까요...
知之者 는 不如好之者 이고
好之者 는 不如樂之者 다
Dig it.
허억 어려운 방식이네요...
컴파일의 권능을 안 타고나서 ㅜㅡ
초보들에게는 권할 수가 없는 방식인 듯 합니다.
파일 퍼미션을 풀었을때...
authorized_key 의 퍼미션을 모두 600 또는 644 로 했을때도 마찬가지의 문제점이 발생 했습니다. ^^
다른 방법을 알아보도록 해야겠습니다. ㅎㅎ
SSH 서버의 옵션 문제인가 살펴 보고 있는 중인데... 답이 안 나오네요 ㅜㅡ
저도 그러네요
일반 계정으로는 별짓을 다해봐도 ssh 비밀번호를 물어보네요-_-
그런데 rsa 키를
그런데 rsa 키를 물어볼 때 딱 한 번만 물어보는 건가요?
아니면 줄여서 쓰신건가요? 보통 세 번은 물어보니까 좀 이상해 보이네요.
/var/log/auth.log 를 살펴보시는 것은 어떨까요?
다른 로그 파일은 떠오르지 않네요.
$Myoungjin_JEON=@@=qw^rekcaH lreP rehtonA tsuJ^;$|++;{$i=$like=pop@@;unshift@@,$i;$~=18-length$i;print"\r[","~"x abs,(scalar reverse$i),"~"x($~-abs),"]"and select$good,$day,$mate,1/$~for 0..$~,-$~+1..-1;redo}
예.. 3번 물어봅니다. ^^
아고아고.. 너무 바빠서 정신이 없었네요...
물론 세번 물어봅니다. ^^ user1 계정의 패스워드를 입력 하면, 물론 접근이 됩니다. ^^
그리고 다시 접속 하면 도 패스워드를 묻습니다.
Public Key 가 먹히지 않은거죠.. 에효....
ssh user1@A_server Enter
id_rsa 의 암호를 제대로 입력한 듯 한데 user1의 패스워드를 또 물어
보는군요. A서버의 .ssh 경로 퍼미션을 확인하세요.
.ssh 경로 역시 group, others가 0이여야 합니다.
정확한 오류는 sshd의 로그 옵션을 켜고 실행해보세요.
id_rsa 패스워드는 한번만 입력하고 이후 계속 사용하게
하기 위해서 ssh-agent을 실행하고 ssh-agent가 뱉어낸 환경
변수 값을 계속 가지고 있으면 됩니다.
아래의 형태입니다.
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
^^
요즘 바빠서 정신이 없어 답변이 늦었습니다. ^^ 관심 가져주셔서 감사합니다. ^^
일단, 질문의 요지에서 약간 벗어 난 듯 합니다.~~ 아흑..
일단, 위의 상황은 Public Key 의 암호를 통과한 상황입니다. ^^
Enter passphrase for key '/home/user1/.ssh/id_rsa': <암호 입력후 엔터>
그러나 다시 user1 계정의 암호를 물어보게 되어 문제죠 ㅜㅡ
물론 root@B_Client 에서 root@A_Server 로의 접근은 문제가 없었습니다.
하지만, user1@B_Client 에서 user1@A_Server로의 접근에서 위와 같은 문제가 나타나더군요..
재미있는 것은.
user1@B_Client 에서 root@A_Server로의 접근이 또 된다는 것입니다. ㅜㅡ
이에 현재 분석하고 있는 부분은, user1@A_Server의 계정쪽의 문제가 아닐까 판단하고 있습니다. 아, 물론 퍼미션 문제는 아닌 듯 합니다. ^^
퍼미션 문제가 맞을
퍼미션 문제가 맞을 겁니다.
target 쪽의 sshd_config의 설정에서 StrictModes를 no로 설정하고 테스트해보십시오.
authorized_keys 파일의 퍼미션을 필요 이상으로 너무 엄격하게 제한해서 불편한 점이 많더군요.
authorized_keys 파일이나 .ssh 디렉토리 뿐이라면 모르겠는데 홈디렉토리 자체의 퍼미션도 제한해야 제대로 작동합니다.
부득이하게 홈디렉토리 퍼미션을 제한할 수 없는 경우가 있다면 그냥 StrictModes를 no로 설정하고 쓰는 것도 나쁘지 않다고 봅니다.
--
academic은 제 고등학교 때 동아리 이름입니다.
academic, 아주 가끔은 저도 이랬으면 좋겠습니다.
----
academic은 제 고등학교 때 동아리 이름입니다.
academic, 아주 가끔은 저도 이랬으면 좋겠습니다.
회사 위키에
회사 위키에 작성했던 예전 글을 보다가 이 글타래가 생각나서 참고로 올립니다.
ssh-agent는 ssh, scp등의 관련 유틸리티들과 unix domain socket을 통해 통신한다. socket id는 /tmp/ssh-iTISI17320/agent.17320등의 형태로 실행시킬 때마다 바뀐다.
실제로, ssh-agent의 실행을 추적해보면 ssh-agent는 자신을 실행시키고 자신의 pid를 환경변수 SSH_AGENT_PID에, 도메인 소켓의 경로를 SSH_AUTH_SOCK에 저장한다.
실험결과, SSH_AUTH_SOCK만 제대로 설정되어있으면, 다른 세션(프로세스?)에서도 ssh, scp가 제대로 동작했다. 다른 세션의 환경 변수를 읽어오는 것이 이젠 관건이다. 매번 /tmp를 뒤지는 것보다는 다음과 같이 하면, crontab등에서도 쓸수 있는 유용한 스크립트가 된다.
ps. 참고로, 위의 스크립트는 ssh-agent가 하나만 떠 있어야 제대로 된 동작을 보증합니다. 여럿이서 사용하는 (ssh-agent가 여러 개 뜰 수 있는) 서버라면 손을 좀 봐야합니다. ^^;
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂
^^
ssh-agent 또한 중구난방으로 내용이 제자각의 글들이 많아 새로 정리중에 있습니다. ^^
그때 위의 내용을 포함시켜 보겠습니다.
관심 감사합니다. ^^
내용 정리가 끝났습니다. ^^
내용 정리가 끝나, 최종 내용으로 수정하였습니다.
댓글을 통하여 많은 도움을 주신 분들께 감사의 말씀을 전합니다.
저와 같이 리눅스를 처음 접하시는 모든 초보님들께 많은 도움이 되셨으면 좋겠습니다.
앞으로도 중구난방식으로 정리가 안되는 새로운 주제가 있다면, 동일한 방법을 통하여 고수님들께 도움을 받아 정리를 하고자 합니다. ^^
다시 한번, 많은 도움을 주신 모든 분들께, 감사의 말씀을 전합니다.
master-server --> cd /root;
master-server --> cd /root; ssh-keygen -d -t rsa
master-server --> scp /root/.ssh/id_rsa.pub root@slave01:/root/.ssh/authorized_keys
master-server --> scp /root/.ssh/id_rsa.pub root@slave02:/root/.ssh/authorized_keys
master-server --> ssh slave01, ssh slave02 <-- login OK
:-)
:-)
퍼미션
설정하고 접속을 시도해도 패스워드를 물어 보내요.
그래서 퍼미션을 변경 했더니 잘 되네요.
chmod 600 authorized_keys
좋아요
좋아요
경험담
저도 그랬습니다. 별에 별짓 다해봤는데 root만 되고 일반 계정은 안되더군요.
보니까 퍼미션문제가 99%입니다.
저같은 경우는 .ssh 폴더를 만들때 mkdir 로 만들었거든요.. 그렇게 만드니 안에 파일들 권한은 644일지라도
폴더권한이 744인가 암튼 그렇게되가지고 안되더라구여. .ssh 폴더의 권한은 600으로 주고 해보세여.
그리고.ssh 폴더를 비롯해서 authorized_keys 파일 그룹이 root가 아닌지 살펴보시구여
~~
putty 로 접속 하기
putty 윈도우 bat 파일로 여러서버 한번에 접속 하기
접속은 잘되는대 서버순서가 문자열 순서대로 열리지 않네요
서버 상태에따라 먼저 열리는것도 있고 나중에 열리는것도 있습니다..
여기에 delay 를 둬서 원하는 순서대로 열리면 더 좋은거 같습니다.
@echo off
set uname=xxxx
set pword=xxxxx
start /d "d:\myback\program\" /b putty.exe -load "server1" -l %uname% -pw %pword%
start /d "d:\myback\program\" /b putty.exe -load "server2" -l %uname% -pw %pword%
start /d "d:\myback\program\" /b putty.exe -load "server3" -l %uname% -pw %pword%
start /d "d:\myback\program\" /b putty.exe -load "server4" -l %uname% -pw %pword%
start /d "d:\myback\program\" /b putty.exe -load "server5" -l %uname% -pw %pword%
start /d "d:\myback\program\" /b putty.exe -load "server6" -l %uname% -pw %pword%
start /d "d:\myback\program\" /b putty.exe -load "server7" -l %uname% -pw %pword%
start /d "d:\myback\program\" /b putty.exe -load "server8" -l %uname% -pw %pword%
start /d "d:\myback\program\" /b putty.exe -load "server9" -l %uname% -pw %pword%
start /d "d:\myback\program\" /b putty.exe -load "server10" -l %uname% -pw %pword%
start /d "d:\myback\program\" /b putty.exe -load "server11" -l %uname% -pw %pword%
start /d "d:\myback\program\" /b putty.exe -load "server12" -l %uname% -pw %pword%
start /d "d:\myback\program\" /b putty.exe -load "server13" -l %uname% -pw %pword%
Putty Unable to use key file (OpenSSH SSH-2 private key)
Putty에서 Unable to use key file (OpenSSH SSH-2 private key) 이라고 뜨는 경우가 있습니다.
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
PuTTYgen을 받으셔서 해당 key를 load 했다가 다시 private key로 저장해서 쓰시면 됩니다.
See Also. http://www.violato.net/blog/others/145-unable-to-use-key-file-qxxxq-openssh-ssh-2-private-key
댓글 달기