답변:
Cygwin 1.7.34부터이 작업을 수행하는 권장 방법은에 사용자 지정 db_home
설정을 추가하는 것 /etc/nsswitch.conf
입니다. 이 작업을 수행 할 때 일반적인 소원은 Cygwin 홈 디렉토리를 Windows 사용자 프로필 디렉토리와 동일하게 만드는 것입니다. 이 설정은 다음을 수행합니다.
db_home: windows
또는 동등하게 :
db_home: /%H
Cygwin 홈 파일을 Windows 사용자 프로필 디렉토리 의 하위 디렉토리 로 분리하는 것과 같이이 체계에 약간의 변형을 원하면 후자의 형식을 사용해야합니다 .
db_home: /%H/cygwin
windows
옵션에 대한 몇 가지 다른 대체 체계 와 %
대신 %H
또는 추가로 사용할 수있는 몇 가지 다른 토큰이 있습니다 . 참조 구문 설명 에서 Cygwin에서 사용 설명서 자세한 내용입니다.nsswitch.conf
1.7.34 이전에 Cygwin을 설치했거나 파일 을 가지도록 mkpasswd
유틸리티를 실행 한 경우 해당 /etc/passwd
파일에서 사용자 항목을 편집하여 Cygwin 홈 디렉토리를 변경할 수 있습니다. 홈 디렉토리는 사용자 행의 마지막에서 두 번째 요소입니다./etc/passwd
.¹
어떤 방법을 사용하든 HOME
셸 시작 중에 환경 변수가 설정됩니다 .²
주제에 대한 자세한 내용은 이 FAQ 항목 을 참조하십시오 .
각주 :
이동을 고려 /etc/passwd
하고 /etc/group
사용하기 위해 길에서 새로운 SAM / AD 기반 메커니즘을 대신.
%HOME%
제어판을 통해 간단히 설정할 수 있지만 공식적으로는 권장하지 않습니다 . 위의 메커니즘을 무의식적으로 재정의 할뿐만 아니라 .NET을 통해 셸 스크립트를 실행할 때와 같이 항상 작동하는 것은 아닙니다 cron
.
ssh
편집 할 때까지 제대로 작동하지 않습니다 /etc/passwd
.
/etc/passwd
파일 을 다시 생성하여 해결 됩니다. 이러한 문제를 방지하려면 여기 에서 내 대답을 참조하십시오 .
db_home: /%H
도메인 사용자 이름 (로컬 사용자 이름 대신)을 확인할 수 있지만 원하는 것이 아닐 수 있습니다. db_home: /cygdrive/c/Users/%U
내가하고 싶은 일을했습니다.
db_home: windows
하는 데 sh
2.5 초에서 3.5 초 정도 걸립니다 . 를 사용하면 시작 db_home: /cygdrive/c/Users/%U
하는 데 sh
약 0.9 ~ 1.0 초가 걸립니다 . db_home
줄을 삭제 하거나 Windows 홈 디렉토리에 하드 코딩하면 sh
시작하는 데 약 0.2 ~ 0.3 초가 걸립니다. 예를 들어 db_home: /cygdrive/c/Users/susam
명령을 사용하여 sh
명령 프롬프트에서 쉘 스크립트를 실행하는 경우가 많기 때문에 하드 코딩 된 솔루션을 사용합니다 . 예를 들어 sh foo.sh
2 초 이상 기다리면 불편 해집니다.
Cygwin 1.7.34 이상을 사용 하는 사용자를 위해 Cygwin은 .NET에서 홈 디렉토리, 로그인 셸 및 gecos 정보를 가져 오는 방법 구성을 지원합니다 /etc/nsswitch.conf
. 이것은 Cygwin 사용자 가이드 섹션에 자세히 설명되어 있습니다.
이전에 /etc/passwd
또는 /etc/group
파일을 생성 한 경우 이를 제거하고 POSIX 매핑에 대한 새로운 Windows 보안 모델을 사용하여 Cygwin을 구성 할 수 있습니다.
[[ -f /etc/passwd ]] && mv /etc/passwd /etc/passwd.bak
[[ -f /etc/group ]] && mv /etc/group /etc/group.bak
/etc/nsswitch.conf
파일이있어 db_home:
Cygwin에서 사용자의 홈 디렉토리를 가져 오는 방법을 정의하는 설정. 의 기본 설정 db_home:
은 다음과 같습니다.
db_home: /home/%U
따라서 기본적으로 Cygwin은 홈 디렉토리를 /home/$USERNAME
. 원하는 다른 사용자 지정 경로를 가리 키도록 변경할 수 있습니다. 지원되는 와일드 카드 문자는 다음과 같습니다.
%u
Cygwin 사용자 이름 (소문자 u).%U
Windows 사용자 이름 (대문자 U).%D
NetBIOS 스타일의 Windows 도메인.%H
POSIX 스타일의 Windows 홈 디렉토리. 그 참고에 대한 db_home:
설정, 이것은 단지에서와 같이 선행 슬래시 후 감지 권리를 만든다db_home: /%H/cygwin
%_
스키마를 구분하기 위해 공백과 TAB 문자가 사용되기 때문에 파일 이름에 공백을 %_
(밑줄)로 지정해야합니다.%%
백분율 문자입니다.경로 대신 미리 정의 된 네 개의 명명 된 경로 스키마 중 하나를 지정할 수 있습니다.
windows
사용자의 홈 디렉토리는 Windows 홈 디렉토리로 사용되는 것과 동일한 디렉토리로 설정되며, 일반적으로 %USERPROFILE%
또는 라인을 따라 C:\Users\$USERNAME
있습니다. 물론 Windows 디렉토리는 Cygwin에 의해 POSIX 스타일로 변환됩니다.
cygwin
AD 전용 : 사용자의 홈 디렉토리는 cygwinUser 보조 클래스의 cygwinHome 속성에 제공된 POSIX 경로로 설정됩니다. "cygwin 스키마"섹션을 참조하십시오 .
unix
AD 전용 : 사용자의 홈 디렉토리가 posixAccount 보조 클래스의 unixHomeDirectory 속성에 제공된 POSIX 경로로 설정됩니다. "Unix 스키마"섹션을 참조하십시오 .
desc
사용자의 홈 디렉토리는 SAM 또는 AD의 사용자 설명 속성에있는 home = "..."XML 유사 설정에 지정된 POSIX 경로로 설정됩니다. 자세한 설명은 "desc 스키마"섹션을 참조하십시오.
다음은 Cygwin의 사용자 홈 디렉토리를 Windows 홈 디렉토리에 사용되는 것과 동일하게 만듭니다.
db_home: windows
사용하는 사람들을 위해 Cygwin에서 1.7.33 로, 이전의 갱신 또는 Cygwin에서 최신 버전 및 이전에 사용 제거 /etc/passwd
및/etc/group
파일이 다음 위의 단계를 참조하십시오.
그렇지 않으면 아래의 이전 단계를 따르십시오.
먼저 사용자 프로필을 가리키는 HOME에 대한 Windows 환경 변수를 설정합니다.
HOME
%USERPROFILE%
이제 방금 만든 /etc/passwd
Windows %HOME%
변수로 Cygwin 파일 을 업데이트 하겠습니다. 를 통한 셸 로그인 및 원격 로그인 은 사용자의 위치를 알려주 ssh
는 데 의존 /etc/passwd
합니다.$HOME
경로 합니다.
Cygwin bash 명령 프롬프트에서 다음을 입력하십시오.
cp /etc/passwd /etc/passwd.bak
mkpasswd -l -p $(cygpath -H) > /etc/passwd
mkpasswd -d -p $(cygpath -H) >> /etc/passwd
-d
스위치는 동안, 도메인 사용자를 포함하는 경우 mkpasswd 알려줍니다-l
만 출력 로컬 컴퓨터 사용자입니다. 이는 Windows 도메인 컨트롤러에서 사용자 정보를 얻는 직장에서 PC를 사용하는 경우 중요합니다.
이제 그룹에 대해서도 동일한 작업을 수행 할 수 있지만 Windows 도메인의 일부인 컴퓨터를 사용하지 않는 한이 작업은 필요하지 않습니다. Cygwin은 Windows 계정 데이터베이스에서 그룹 정보를 읽지 만/etc/group
컴퓨터가 도메인 컨트롤러에서 자주 연결이 끊어지는 경우 파일을 .
Cygwin bash 프롬프트에서 다음을 입력하십시오.
cp /etc/group /etc/group.bak
mkgroup -l > /etc/group
mkgroup -d >> /etc/group
이제 Cygwin을 종료하고 다시 시작하십시오. 홈 경로가 Windows 사용자 프로필과 동일한 위치를 가리켜 야합니다./cygdrive/c/Users/username
mkgroup
위 의 목적을 명확히하기 위해 설명을 추가했습니다 .
저는 아주 간단한 일을했습니다. Windows 7 환경 변수를 변경하고 싶지 않았습니다. 그래서 Cygwin.bat 파일을 직접 편집했습니다.
@echo off
SETLOCAL
set HOME=C:\path\to\home
C:
chdir C:\apps\cygwin\bin
bash --login -i
ENDLOCAL
이것은이 홈 디렉토리로 로컬 쉘을 시작합니다. 그것이 내가 원했던 것입니다. 나는 이것을 원격으로 액세스하지 않을 것이므로 이것은 나를 위해 일했습니다.
%HOME%
위치 에서 별도의 vim 구성을 유지하는 반면 Cygwin vim은 $HOME
사용자가 선언 한 새 경로를 사용합니다 .
Cygwin은 mount
이제 디렉토리를 마운트 할 수있는 bind 메소드를 지원 합니다. 따라서에 다음 줄을 추가 한 다음 /etc/fstab
셸을 다시 시작할 수 있습니다.
c:/Users /home none bind 0 0
HOME 환경 변수를 변경하십시오.
XP에서는 내 컴퓨터 >> 속성 >> 고급 >> 환경 변수 >> 사용자 변수 >> [변수 선택 HOME] >> 편집을 마우스 오른쪽 버튼으로 클릭합니다.
$ HOME 우선 순위에 대한 수정 / 업데이트를 추가하고 싶습니다. / etc / passwd의 홈 디렉토리가 모든 것보다 우선합니다.
저는 오랫동안 Cygwin 사용자이고 방금 Windows 7 x64 및 Cygwin V1.126을 새로 설치했습니다. 나는 왜 내가 ssh를 실행할 때마다 내가 계속 얻는 지 알아 내려고 미친 듯이 가고 있었다.
e:\>ssh foo.bar.com
Could not create directory '/home/dhaynes/.ssh'.
The authenticity of host 'foo.bar.com (10.66.19.19)' can't be established.
...
Windows 환경에 HOME = c : \ users \ dhaynes 정의를 추가했지만 여전히 '/ home / dhaynes'를 만들려고 시도했습니다. 나는 HOME을 / cygdrive / c / users / dhaynes로 설정하는 것을 포함하여 모든 콤보를 시도했습니다. 오류 메시지를 검색했지만 아무것도 찾을 수 없었고 cygwin 사이트에서 아무것도 찾을 수 없었습니다. bash.exe가 아닌 cmd.exe의 cygwin을 사용하지만 문제는 둘 다에 존재합니다.
마침내 / etc / passwd의 홈 디렉토리가 $ HOME 환경 변수보다 우선한다는 것을 깨달았습니다. 간단히 'mkpasswd -l> / etc / passwd'를 다시 실행하고 홈 디렉토리를 업데이트했습니다. 이제 모두 ssh로 잘 작동합니다.
sysadmin 경험이있는 Linux 유형에게는 분명 할 수 있지만 주로 Windows를 사용하는 우리에게는 약간 모호합니다.
나는 cygwin이 번들로 제공되는 cwRsync (Cygwin + Rsync for Windows)를 사용하고 있으며 / etc / passwd를 찾을 수 없습니다.
그리고 계속해서
Could not create directory '/home/username/.ssh'.
...
Failed to add the host to the list of known hosts (/home/username/.ssh/known_hosts).
그래서 rsync를 실행하기 전에 HOME 변수를 변경 한 배치 파일을 작성했습니다. 다음과 같은 것 :
set HOME=.
rsync /path1 user@host:/path2
그리고 비올라! .ssh 폴더가 현재 작업 디렉토리에 나타나고 rsync는 rsa 지문으로 성가신 것을 멈췄습니다.
빠른 핫픽스이지만 나중에 홈을보다 안전한 위치로 변경해야합니다.
db_home:
인용을 해제하고 작동하도록 하기 전에 #을 제거하는 것을 잊지 마십시오 .