이상한 일이다. 어제 내 PC의 Cygwin bash shell에서 개발서버에 좀 더 편하게 접속하기 위하여 암호를 입력하지 않는 방식으로 ssh를 사용하여 서버에 로그인할 수 있도록 설정하였다. 그런데 오늘 출근해서 다시 서버에 로그인하려고 하니 암호를 입력하라고 묻는다. 그래서 혹시 서버에서 public key를 저장해 놓는 authorized_keys 파일에 어떤 변경이 가해졌는지 살펴 보았더니 이상이 없다. 이번에는 내 PC에 저장해 놓은 key pair가 정상인지 확인해 보기 위하여 아래와 같은 명령을 실행해 보았다.
$ cd .ssh
$ ls -l
어라! 어제 ssh-keygen으로 생성해 놓았던 key pair가 보이지 않는다. 이게 어찌된 일인가? 정상이라면 다음 두 개의 파일이 있어야 한다.
id_rsa
id_rsa.pub
나중에 발견하게 된 일이지만, 특이하게도 Cygwin bash shell을 실행할 때 사용자의 홈 디렉토리 위치가 일정하지 않았다. 이를 확인해 보기 위하여 다음과 같은 순서로 bash shell을 실행해 보자. 참고로 내 PC의 환경은 아래와 같다.
Cygwin 설치 디렉토리 - C:\Apps\cygwin
Windows 사용자 홈 디렉토리 - D:\Profiles\myid
1) 시스템에서 첫번째 bash 프로세스가 실행될 때에는 아래 위치를 사용자의 홈 디렉토리로 사용한다.
C:\Apps\cygwin\home\myid
2) 이번에는 다른 DOS창을 열어서 bash shell을 실행해 보았다. 이것은 두 번째의 bash 프로세스를 생성하는 것이다. 이 bash shell은 아래 디렉토리를 홈 디렉토리로 사용한다.
D:\Profiles\myid
3) 계속해서 bash shell을 실행하고 홈 디렉토리를 확인해 보면 2)번의 결과와 같음을 알 수 있다.
4) 현재 실행중인 모든 bash shell을 닫고 1) ~ 3)의 과정을 실행하면 동일한 현상이 발생한다.
결국 내가 생성해 놓았던 key pair는 Windows 사용자 홈 디렉토리 아래의 .ssh 디렉토리에 있었던 것이다. 당연하게도 첫번째로 실행된 bash shell을 제외한 다른 bash shell에서는 암호 입력 과정 없이 서버에 로그인할 수 있었다.
Cygwin에서 왜 첫번째 bash shell의 홈 디렉토리가 이후에 실행된 bash shell의 홈 디렉토리와 다른지에 대해서는 관련 내용을 찾을 수 없었지만 이 문제를 간단하게 해결할 수 있는 방법으로 아래 두 가지가 있다.
1. /etc/fstab 파일을 열고 아래와 같이 한 줄을 추가하여 Windows 사용자 홈 디렉토리의 상위 디렉토리를 /home으로 마운트한다. 이렇게 하면 Cygwin bash shell 입장에서는 Windows 경로 C:\Apps\cygwin\home/myid이 D:\Profiles/myid를 가리키는 것이 된다.
D:/Profiles /home ntfs binary 0 0
2. /etc/passwd 파일에서 사용자의 홈 디렉토리를 Windows 사용자 홈 디렉토리로 지정한다.
....:/cygdrive/d/Profiles/myid:...
$ cd .ssh
$ ls -l
어라! 어제 ssh-keygen으로 생성해 놓았던 key pair가 보이지 않는다. 이게 어찌된 일인가? 정상이라면 다음 두 개의 파일이 있어야 한다.
id_rsa
id_rsa.pub
나중에 발견하게 된 일이지만, 특이하게도 Cygwin bash shell을 실행할 때 사용자의 홈 디렉토리 위치가 일정하지 않았다. 이를 확인해 보기 위하여 다음과 같은 순서로 bash shell을 실행해 보자. 참고로 내 PC의 환경은 아래와 같다.
Cygwin 설치 디렉토리 - C:\Apps\cygwin
Windows 사용자 홈 디렉토리 - D:\Profiles\myid
1) 시스템에서 첫번째 bash 프로세스가 실행될 때에는 아래 위치를 사용자의 홈 디렉토리로 사용한다.
C:\Apps\cygwin\home\myid
2) 이번에는 다른 DOS창을 열어서 bash shell을 실행해 보았다. 이것은 두 번째의 bash 프로세스를 생성하는 것이다. 이 bash shell은 아래 디렉토리를 홈 디렉토리로 사용한다.
D:\Profiles\myid
3) 계속해서 bash shell을 실행하고 홈 디렉토리를 확인해 보면 2)번의 결과와 같음을 알 수 있다.
4) 현재 실행중인 모든 bash shell을 닫고 1) ~ 3)의 과정을 실행하면 동일한 현상이 발생한다.
결국 내가 생성해 놓았던 key pair는 Windows 사용자 홈 디렉토리 아래의 .ssh 디렉토리에 있었던 것이다. 당연하게도 첫번째로 실행된 bash shell을 제외한 다른 bash shell에서는 암호 입력 과정 없이 서버에 로그인할 수 있었다.
Cygwin에서 왜 첫번째 bash shell의 홈 디렉토리가 이후에 실행된 bash shell의 홈 디렉토리와 다른지에 대해서는 관련 내용을 찾을 수 없었지만 이 문제를 간단하게 해결할 수 있는 방법으로 아래 두 가지가 있다.
1. /etc/fstab 파일을 열고 아래와 같이 한 줄을 추가하여 Windows 사용자 홈 디렉토리의 상위 디렉토리를 /home으로 마운트한다. 이렇게 하면 Cygwin bash shell 입장에서는 Windows 경로 C:\Apps\cygwin\home/myid이 D:\Profiles/myid를 가리키는 것이 된다.
D:/Profiles /home ntfs binary 0 0
2. /etc/passwd 파일에서 사용자의 홈 디렉토리를 Windows 사용자 홈 디렉토리로 지정한다.
....:/cygdrive/d/Profiles/myid:...