SSH 암호 없이 자동 로그인 종합 안내

foxiii의 이미지

본문은 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': <암호 입력후 엔터(키 생성시 암호 입력을 안했다면 묻지 않고 바로 접속됨.)>
vanessa의 이미지

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 ~(~_~)~
나 한줄기 바람처럼..

jg의 이미지


Quote:
authorized_key 파일은 퍼미션을 600으로 변경하면 안될 거 같은데요.

sshd가 보통 root권한으로 실행되어서 별다른 문제가 없을겁니다.
man 페이지에도 반드시 비밀로 할 필요는 없다고 하였지 공개하라고 하진 않았습니다.

Quote:
~/.ssh/identity.pub
Contains the protocol version 1 RSA public key for authentica‐
tion. The contents of this file should be added to
~/.ssh/authorized_keys on all machines where the user wishes to
log in using RSA authentication. There is no need to keep the
contents of this file secret.

마찬가지로 ~/.ssh 디렉토리 자체를 700 으로 맞추는 경우도 많습니다.
제가 그걸 더 권장하는 것 같았는데 정확한 링크는 기억나지 않네요.

Quote:
질문1 : root에서 같은 작업을 할 경우, 계정 비밀번호를 묻지 않았는데 user1 계정에서는 비밀번호를 묻네요?? 해결책이 있을까요?

흠.. 설정 잘 하신 것 같은데 이상하네요.
그런데 접속하는 서버의 계정이 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}

foxiii의 이미지

JG 님, 서버/클라이언트 둘다, 일반 계정인 user1 계정이었습니다. (둘다 root 계정일 경우는 문제 없이 접속 되더군요 ^^)
파일 권한 쪽으로 가닥을 잡고 해결해 보는 중입니다. ^^

a287848의 이미지

코드를 수정해서 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.

foxiii의 이미지

컴파일의 권능을 안 타고나서 ㅜㅡ

초보들에게는 권할 수가 없는 방식인 듯 합니다.

foxiii의 이미지

authorized_key 의 퍼미션을 모두 600 또는 644 로 했을때도 마찬가지의 문제점이 발생 했습니다. ^^
다른 방법을 알아보도록 해야겠습니다. ㅎㅎ

SSH 서버의 옵션 문제인가 살펴 보고 있는 중인데... 답이 안 나오네요 ㅜㅡ

익명 사용자의 이미지

일반 계정으로는 별짓을 다해봐도 ssh 비밀번호를 물어보네요-_-

jg의 이미지

그런데 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}

foxiii의 이미지

아고아고.. 너무 바빠서 정신이 없었네요...

물론 세번 물어봅니다. ^^ user1 계정의 패스워드를 입력 하면, 물론 접근이 됩니다. ^^

그리고 다시 접속 하면 도 패스워드를 묻습니다.
Public Key 가 먹히지 않은거죠.. 에효....

IsExist의 이미지

ssh user1@A_server
Enter passphrase for key '/home/user1/.ssh/id_rsa': <암호 입력후 엔터>
user1@A_server's password:?????
Permission denied, please try again.
Permission denied (publickey,gssapi-with-mic,password).

id_rsa 의 암호를 제대로 입력한 듯 한데 user1의 패스워드를 또 물어
보는군요. A서버의 .ssh 경로 퍼미션을 확인하세요.
.ssh 경로 역시 group, others가 0이여야 합니다.

정확한 오류는 sshd의 로그 옵션을 켜고 실행해보세요.

id_rsa 패스워드는 한번만 입력하고 이후 계속 사용하게
하기 위해서 ssh-agent을 실행하고 ssh-agent가 뱉어낸 환경
변수 값을 계속 가지고 있으면 됩니다.

아래의 형태입니다.

SSH_AUTH_SOCK=/tmp/ssh-GUux315550/agent.315550; export SSH_AUTH_SOCK;
SSH_AGENT_PID=319648; export SSH_AGENT_PID;

---------
간디가 말한 우리를 파괴시키는 7가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치

---------
간디가 말한 우리를 파괴시키는 7가지 요소

첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스

이익추구를 위해서라면..

다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치

foxiii의 이미지

요즘 바빠서 정신이 없어 답변이 늦었습니다. ^^ 관심 가져주셔서 감사합니다. ^^

일단, 질문의 요지에서 약간 벗어 난 듯 합니다.~~ 아흑..

일단, 위의 상황은 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의 계정쪽의 문제가 아닐까 판단하고 있습니다. 아, 물론 퍼미션 문제는 아닌 듯 합니다. ^^

academic의 이미지


퍼미션 문제가 맞을 겁니다.

target 쪽의 sshd_config의 설정에서 StrictModes를 no로 설정하고 테스트해보십시오.

authorized_keys 파일의 퍼미션을 필요 이상으로 너무 엄격하게 제한해서 불편한 점이 많더군요.

authorized_keys 파일이나 .ssh 디렉토리 뿐이라면 모르겠는데 홈디렉토리 자체의 퍼미션도 제한해야 제대로 작동합니다.

부득이하게 홈디렉토리 퍼미션을 제한할 수 없는 경우가 있다면 그냥 StrictModes를 no로 설정하고 쓰는 것도 나쁘지 않다고 봅니다.

--
academic은 제 고등학교 때 동아리 이름입니다.
academic, 아주 가끔은 저도 이랬으면 좋겠습니다.

academic은 제 고등학교 때 동아리 이름입니다.
academic, 아주 가끔은 저도 이랬으면 좋겠습니다.

M.W.Park의 이미지

회사 위키에 작성했던 예전 글을 보다가 이 글타래가 생각나서 참고로 올립니다.

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등에서도 쓸수 있는 유용한 스크립트가 된다.

export SSH_AUTH_SOCK=`find /tmp/ssh*/agent*`

ps. 참고로, 위의 스크립트는 ssh-agent가 하나만 떠 있어야 제대로 된 동작을 보증합니다. 여럿이서 사용하는 (ssh-agent가 여러 개 뜰 수 있는) 서버라면 손을 좀 봐야합니다. ^^;

-----
오늘 나의 취미는 끝없는, 끝없는 인내다. 1973 法頂

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

foxiii의 이미지

ssh-agent 또한 중구난방으로 내용이 제자각의 글들이 많아 새로 정리중에 있습니다. ^^
그때 위의 내용을 포함시켜 보겠습니다.
관심 감사합니다. ^^

foxiii의 이미지

내용 정리가 끝나, 최종 내용으로 수정하였습니다.

댓글을 통하여 많은 도움을 주신 분들께 감사의 말씀을 전합니다.

저와 같이 리눅스를 처음 접하시는 모든 초보님들께 많은 도움이 되셨으면 좋겠습니다.

앞으로도 중구난방식으로 정리가 안되는 새로운 주제가 있다면, 동일한 방법을 통하여 고수님들께 도움을 받아 정리를 하고자 합니다. ^^

다시 한번, 많은 도움을 주신 모든 분들께, 감사의 말씀을 전합니다.

이은태의 이미지

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

:-)

:-)

hyosik의 이미지

설정하고 접속을 시도해도 패스워드를 물어 보내요.
그래서 퍼미션을 변경 했더니 잘 되네요.

chmod 600 authorized_keys

익명 사용자의 이미지

좋아요

익명 사용자의 이미지

저도 그랬습니다. 별에 별짓 다해봤는데 root만 되고 일반 계정은 안되더군요.
보니까 퍼미션문제가 99%입니다.
저같은 경우는 .ssh 폴더를 만들때 mkdir 로 만들었거든요.. 그렇게 만드니 안에 파일들 권한은 644일지라도
폴더권한이 744인가 암튼 그렇게되가지고 안되더라구여. .ssh 폴더의 권한은 600으로 주고 해보세여.
그리고.ssh 폴더를 비롯해서 authorized_keys 파일 그룹이 root가 아닌지 살펴보시구여
~~

rhdwnek74의 이미지

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) 이라고 뜨는 경우가 있습니다.
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

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.