ssh를 통해 명령을 실행할 때 도트 파일이 제공되지 않습니다


11

프로그램을 대화식으로 실행하면 정상적으로 작동합니다.

ssh somehost
$ ~/some/path/somescript.py

ssh를 통해 직접 프로그램을 실행하면 작동하지 않습니다. 소스 PYTHONPATH가 아니므로 변수 가 설정 .bashrc되지 않았습니다.

ssh somehost ~/some/path/somescript.py

내가 실행하면 ssh somehost 'source ~/.bashrc; ~/some/path/somescript.py'정상적으로 작동합니다.

그러나 후자는 tcsh를 사용하고 전혀없는 다른 사람들에게는 효과가 없습니다 ~/.bashrc.

무엇 모든 쉘 작동 다른 호스트에 SSH를 통해 일을 실행하는 명령은?


1
여기에 대답하십시오. stackoverflow.com/questions/820517/bashrc-at-ssh-login 기본적으로 ssh는 .bashrc를 제공하지 않으므로 .bash_profile 또는 기타 옵션을 통해 .bashrc를 제공해야합니다.
EightBitTony

1
@EightBitTony : 아니요, 다른 문제입니다. bzdjamboo의 질문은 비 대화식 세션에 관한 것입니다.
Gilles 'SO- 악의를 멈춰라'

실제로 내가 게시 한 링크의 마지막 답변은 가치가있는 것으로 보이며 ssh는 .bashrc 소스를 수행하지만 대화 형 검사로 인해 실행되지 않습니다. 그러나 귀하의 답변이 모든 기반을 다루고 있음에 감사드립니다.
EightBitTony

3
@EightBitTony : 그 질문에서, 수용된 대답은 asker에게 좋은 해결책이지만 그 대답은 전체 이야기를 말하지는 않습니다. SSH 자체는 아무것도 소스하지 않습니다. 로그인 쉘은 bash는은으로 호출되면 bash다음, 소스 .bash_profile또는 .profile대화 형 로그인에 대한, 그리고 .bashrc비 대화식 로그인에. 로그인 쉘이 bash sh또는 ash 또는 ksh 로 호출 된 .profile경우 대화식 로그인의 소스 이며 비 대화식 로그인의 소스 는 없습니다.
Gilles 'SO- 악마 그만'

답변:


12

비 대화식 로그인에 대해 실행되는 표준 사용자 별 파일은 없습니다. 기본이 아닌 환경 변수에 의존하지 않고 의존성을 찾거나 일반적으로 다음과 같이 환경을 명시 적으로 설정하려면 프로그램을 독립적으로 만들어야합니다.

ssh somehost '. ~/.profile; exec ~/some/path/somescript.py'

환경 변수를 설정해서는 안됩니다 .bashrc.이 파일은 대화식 쉘용이며 각 bash 인스턴스에서 읽습니다. .profile로그인 할 때 읽히는 환경 변수는로 설정해야합니다 . Bourne 스타일 쉘을 로그인 쉘로 사용하지 않는 소수의 사람들 외에 .profilebash 또는 zsh 또는 대화식으로 csh 또는 물고기. 참조 의 .bashrc와 .bash_profile에 차이를 , 어떤 설정 파일은 떠들썩한 파티와 환경 변수를 설정하는 데 사용되어야 하는가? .

즉, 특정 키로 ssh를 통해 로그인 할 때마다 스크립트를 소싱하는 방법이 있습니다. 호스트에 SSH로 연결할 때 쉘 구성 정보를 푸시하는 방법이 있습니까?를 참조하십시오 . , sh ssh를 통한 sh 시작 파일 .


이제 "답변"으로 표시하려면 어떻게해야합니까? :-)
bzdjamboo

이 답변 섹션의 왼쪽에는 위쪽 및 아래쪽 투표 화살표와 투표 카운터가 있어야합니다. 바로 아래에는 확인란의 개요가 있어야합니다. 이를 클릭하여 응답 수락 기능을 활성화 할 수 있습니다.
Caleb

다시 한 번 감사드립니다. 그러나 당신의 대답은 내 문제를 해결하지 못했습니다.
bzdjamboo

여기에 문제의 조금 더 새로운 공식화와 그 뿌리에 대한 나의 현재 이해가 있습니다.
bzdjamboo

여기에 60 자 이상을 추가 할 수없는 것 같아서 다시 질문을해야합니다. 미안 ab. 그. 다시 말하지만, 이것은 해결되지 않았으며 며칠 동안 훨씬 더 파는 것이 도움이되지 않았습니다.
bzdjamboo

0

나는 같은 문제가 있었지만 해결책은 달랐다. 내 사용자는 bash를 셸로 사용하도록 구성되지 않았으며 대신 zsh를 셸로 사용했기 때문에 bash 도트 파일은 로그인시 실행되지 않았습니다. 텍스트 편집기로 / etc / passwd를 열고 사용자 이름과 사용하는 쉘을 찾으십시오.

root:x:0:0:root:/root:/bin/zsh

이것이 내 사용자 항목의 모습입니다. / bin / bash 대신 / bin / zsh라고 표시되어 있습니다. zsh의 경우 올바른 도트 파일은 ~ / .zprofile입니다. ssh를 사용하여 로그인 할 때마다 그 내용이 실행됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.