SSH를 통해 명령을 실행할 때 도트 파일을 가져오지 않습니다.

SSH를 통해 명령을 실행할 때 도트 파일을 가져오지 않습니다.

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

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

SSH를 통해 직접 프로그램을 실행하면 작동하지 않습니다. 소스가 없기 때문에 변수 PYTHONPATH가 설정되지 않았습니다 ..bashrc

ssh somehost ~/some/path/somescript.py

실행하면 ssh somehost 'source ~/.bashrc; ~/some/path/somescript.py'훌륭하게 작동합니다.

~/.bashrc그러나 후자는 tcsh를 사용하고 tcsh를 전혀 사용하지 않는 등 일부 다른 경우에는 작동하지 않습니다 .

무엇인가요이것모든 쉘에서 작동하는 다른 호스트에서 SSH를 통해 무언가를 실행하는 명령이 있습니까?

답변1

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

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

다음 위치에 환경 변수를 설정하면 안 됩니다 .bashrc. 이 파일은 대화형 셸용이며 모든 bash 인스턴스에서 읽혀집니다. 환경 변수는 설정되어 있어야 하며 .profile로그인할 때 읽혀집니다. .profilebash나 zsh를 사용하거나 대화식으로 csh나 Fish를 사용하든 상관없이 Bourne 스타일 쉘을 로그인 쉘로 사용하지 않는 극소수를 제외한 모든 사람에게 작동합니다 . 당신은 또한 볼 수 있습니다 .bashrc와 .bash_profile의 차이점, Bash를 사용하여 환경 변수를 설정하려면 어떤 설정 파일을 사용해야 합니까?.

즉, 특정 키를 사용하여 SSH를 통해 로그인할 때마다 스크립트를 얻는 방법이 있습니다. 바라보다호스트에 SSH로 연결할 때 셸 구성 정보를 푸시하는 방법이 있습니까?,SSH를 통한 sh 시작 파일.

답변2

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

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

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

관련 정보