2012-04-30 4 views
8

질문오류 "가 아닌 절대 집"SSH

Net::SSH.start('server name', 'user') 

이 "비 절대 집"을 반환의 코드. 실제로 '사용자'는 홈 디렉토리를 가지고 있습니다. 한 가지 제안 된 방법은 ~/.ssh/config를 IdentityFile에 대한 전체 경로로 수정하는 것입니다. 이것은 문제를 해결하지 못했습니다.

이 미친 부분은 irb 또는 console을 통해 호출하면 코드가 제대로 작동한다는 것입니다. 클래스 메소드 (같은 코드) 내에서 호출하려고하면 "절대적이지 않은"오류가 반환됩니다.

'사용자'는 문제없이 명령 줄을 통해 서버로 ssh 할 수도 있습니다. 서버가 우분투를 실행 중입니다.

UPDATE @Phrogz에

감사 - 이것에 대한 수정 된 설정 ENV [ 'HOME']에 '/ 홈/배포'. 그러나 $ HOME이 "."으로 설정되는 이유를 알지 못했습니다. 서버에. 그래서, 나는 다른 사람이 알아낼 때까지 "대답"없이이 질문을 떠날 것입니다. 수동으로 HOME을 설정하면 적절한 해결책보다 "해킹"과 같은 느낌이 들지만 작동합니다.

+1

'HOME' 환경 변수가 있습니까? 'echo $ HOME' – Phrogz

+1

@Phrogz - irb, 콘솔, 명령 줄을 통해 출력 할 경우 경로가 표시됩니다. 그러나, 클래스 (home = % x [echo $ HOME])에 변수를 설정하면 (Rails_Root/lib/class_obj) 그 값이 "."로 되돌아갑니다. – Jadon

+1

인터프리터가 다른 경로의 쉘에서 실행중인 것 같습니다.스크립트의 절대 경로로 설정하거나 완전히 설정을 해제하면 문제가 해결됩니까? – Phrogz

답변

0

리눅스는 /etc/passwd 파일을 기반으로이 정보를 설정합니다.

deployer 사용자의 경우 /etc/passwd에있는 내용을 확인하십시오. 목록 맨 아래에 있어야합니다.

항목은 콜론으로 구분됩니다. ENV['HOME']의 값은 해당 행의 두 번째 항목이어야합니다.

공백입니까, 즉 2 개의 콜론을 사용합니까?

HOME 변수가 /etc/passwd에없고, 기본 도트 파일 중 하나 (예 : .bashrc)에 설정되어 있다고 생각됩니다. 그런 다음 .bashrc은 귀하의 앱이 점 파일을 소싱하지 않는 init.d 스크립트를 통해 실행중인 경우 단락됩니다. (비 대화식 쉘을 통해 실행되는 경우 많은 .bashrc 파일이 나머지 명령로드를 중지합니다).

희망이 있으면 도움이되고 결과와 함께 게시하시기 바랍니다.

+0

나는/etc/passwd에 제대로 설정된 가정과 비슷한 문제를 겪고있다. – trimbletodd

1

홈 환경 변수가 설정되지 않은 경우이를 올바르게 설정하여 작동합니다.

2

방금 ​​같은 문제가 발생하여 근본 원인을 발견했습니다. 스크립트를 서비스로 실행하고 맨페이지에서 서비스를 확인하면 HOME을 포함하여 스크립트를 실행하기 전에 대부분의 env 변수를 제거합니다. 귀하의 시나리오가 같은지 모르지만 HOME은 설정되지 않았습니다.

net-ssh는 사용자 홈 폴더에서 ssh config를 검색하려고하므로 ENV [ 'HOME']를 (를) 강제로 "." 그것이 설정되지 않았다면. 그러나 File.expand_path가 "~/.ssh"를 확장하려고하면 ArgumentError가 발생합니다.

이것은 2 개월 전 (https://github.com/net-ssh/net-ssh/pull/98) 수정되었으므로 net-ssh 젬을 업데이트하면이 문제를 해결할 수 있습니다.