2009-06-02 3 views
112

ssh [email protected] command을 통해 명령을 실행할 때 새 $ PATH를 설정하는 것처럼 보이지 않습니다. 원격 컴퓨터의 ~/.bashrc와 ~/.profile에 export PATH=$PATH:$HOME/new_path을 추가하려고 시도했지만 ssh [email protected] "echo \$PATH"을 실행하면 변경 사항이 선택되지 않은 것으로 나타납니다 (/ usr/local/sbin :/usr/local/bin :/usr/sbin :/usr/bin :/sbin :/bin :/usr/games). 원격 컴퓨터는 Ubuntu 8.04를 실행 중입니다.

나는/etc/profile에 해킹 할 수 있다고 확신하지만, 이는 깨끗한 해결책이 아니며 root 권한이있는 경우에만 작동합니다.

+0

다음 행하기 전에 수출을 추가해야합니다 : –

+0

나의 특별한 경우에는 ssh에게 보낸 명령을 수정하는 것이 쉽지 않습니다. 나는 stfufs (http://www.guru-group.fi/too/sw/stfufs/)를 사용하고 있는데, 이는 ssh 명령 자체를 구성한다. 그 방법은 훌륭한 해결책은 아니지만 stfufs를 수정하지 않고 수정하는 것이 좋을 것 같습니다. –

+0

stfufs의 방법으로 ssh 래퍼를 넣을 수 있습니다. 수정 된 args를 사용하여 실제 ssh를 호출 할 수 있습니다. – Hasturkun

답변

152

설정을 사용자의 PATH를 추가 할 수 있습니다 : 당신은 그러나 다음과 같은 옵션이 있습니까 , ~/.bashrc는 비대화 형 비 로그인 셸에 의해 제공되므로 원하는 것입니다.

당신이 가지고있는 문제는 기본 우분투 ~/.bashrc 파일과 관련이 있습니다.보통 이런 식으로 뭔가 시작 :

# If not running interactively, don't do anything 
[ -z "$PS1" ] && return 

당신은 이 라인 전에 (non-interactive) 형 모드 쉘에 물건을 올려 싶습니다.

가 @signpolyma 대답에 추가
ssh [email protected] PATH=\$HOME/bin:\$PATH\; remote-command 
+1

네, 그 줄 위에'export PATH = $ PATH : $ HOME/new_path'을 옮겼습니다. 감사! –

+2

.bashrc는 신뢰할 수 없습니다. man bash : "Bash는 네트워크 연결에 연결된 표준 입력으로 실행될 때를 결정하려고 시도합니다." 이것은 RHEL에서는 작동하지만 Archlinux에서는 작동하지 않습니다. 나는/etc/환경을 편집하여 기본 경로를 변경해야만했습니다. – basin

6

당신은 항상 말할 수 있습니다 :

ssh remotemachine 'export PATH=wedontneedastinkingpath; echo $PATH' 
+0

이 솔루션은 원격 컴퓨터에서 어떤 변경도 필요하지 않습니다. 이는 좋은 일입니다. –

29

것은 당신이 ~/.bash_login 또는 ~/.bash_profile이 있습니까? 그래서

  1. ~/.bash_profile
  2. ~/.bash_login
  3. ~/.profile

당신 같은 경우

이러한 파일에 대한 대화 형 모드 검사에서 배쉬, 그리고 순서로, 기존첫 사용 ~/.bash_profile이면 어떤 변경을해도이됩니다.은 보이지 않습니다. 아주 이상한하는이 : 가끔는 "가끔"나는 그것이 유통에 의존하는 것을 의미하여 (. 종종 대화 형 스크립트에서 source'd되는) 파일 ~/.bashrc을 읽고 비 대화식 모드에서

배쉬 이것을 가능하게하는 컴파일 타임 옵션. 데비안을 사용하면 ~/.bashrc 수치를 표시 할 수 있습니다. 아치는 그렇지 않습니다.

ssh은 비 대화 형 모드 인 을 사용하는 것으로 보이므로 ~/.bashrc이면 충분합니다. 이런 문제가 생길 때, 나는 보통 어떤 파일이 실행되는지보기 위해 몇 개의 에코를 추가한다.

+0

에코 추가는 도움이되었지만 여전히 'ssh -X remotemachine "xterm"을 실행하고/etc/profile과 ~/home/username/.bash_profile에서 전체 시스템/사용자 경로를 가져 오는 방법을 쫓고 있습니다. . 명령에서 두 파일을 모두 가져 오면 작동하지만 .. 추한 것입니다.). – Jess

+0

"비대화 형 모드에서 Bash가 파일'~/.bashrc"를 읽는다는 것을 어떻게 알 수 있습니까? 맨페에이 진술이 보이지 않습니다. 감사합니다. – nknight

+3

비 대화식 비 로그인 셸에서'~/.bashrc '소스를 원한다면 환경 변수'BASH_ENV'를 추가로 설정해야합니다. http://superuser.com/a/585699/100843을 참조하십시오. 비 대화식 로그인 셸의 경우 언급 한 세 가지 시작 스크립트 중 하나를 수정해야 할 것입니다. – nknight

18

SSH 문서는 말한다 : 명령을 지정하면

, 그 대신 로그인 쉘의 원격 호스트에서 실행됩니다.

이는 bashrc 파일에 추가가 작동하지 않는 이유입니다. PermitUserEnvironment 옵션이 SSHD의 설정에 설정되어있는 경우

  1. , 당신은 grawity 말했듯이 ~/.ssh/environment

  2. ssh remotemachine 'bash -l -c "somecommand"'

+0

1. 내 sshd config에 설정되어 있지 않고'man sshd_config'는 기본적으로 꺼져 있기 때문에이 솔루션이 대부분의 사람들에게 유용 할 것 같지 않습니다. 2.이 작업은 가능하지만 ssh로 보낸 명령을 쉽게 수정할 수 없습니다 (내 질문에 대한 두 번째 설명 참조). –

+1

1. ~/.ssh/environment에서 PATH에 pathes를 추가 할 수 없으므로 예상대로 작동하지 않습니다. $ PATH가 해결되지 않기 때문입니다. – not2savvy

2

그냥 그것을 해결, 같은 문제를 자신했다 (이전에 시도한 ~/.bashrc와 ~/.profile 이외에) ~/.bash_login과 ~/.bash_profile 모두에 $ PATH : $ PATH : $ HOME/new_path`를 export하십시오. 둘 다 작동하지 않습니다. 두 경우 모두 파일을 만들어야했습니다.
2

, 당신은 내가`추가 시도

# If not running interactively, don't do anything 
case $- in 
    *i*) ;; 
     *) return;; 
esac 
+0

실제로이 줄을 모두 주석 처리했습니다. ~/.bashrc in Ubuntu 16.04 LTS desktop에서 찾았습니다. 어떤 것도 작동하지 않습니다. 또한 PermitUserEnvironment를 yes로 설정하십시오. – Ernie