~/.profile
ssh somecommand
대화식 ssh 세션 (또는 대화식 세션을 시작하는 다른 로그인 방법)과 달리 일반적으로 실행시 읽지 않습니다 .
Ssh는 환경 변수 전송을 지원합니다. OpenSSH에서의 SendEnv
지시문을 사용하십시오 ~/.ssh/config
. 그러나 특정 환경 변수는 서버 구성AcceptEnv
에서 지시문 으로 활성화해야 하므로 제대로 작동하지 않을 수 있습니다.
OpenSSH를 사용하면 서버 측에서 환경 변수를 설정할 수도 있습니다. 여기서도 PermitUserEnvironment
지시어 와 함께 서버 구성에서 활성화해야합니다 . 변수는 파일에서 설정할 수 있습니다 ~/.ssh/environment
. 공개 키 인증을 사용한다고 가정하면 관련 행의 시작 부분 에 ~/.ssh/authorized_keys
: 키를 추가 할 수 있습니다 environment="FOO=bar"
.
공개 키 인증을 사용하는command=
한 항상 authorized_keys
파일 에서 옵션 을 사용하는 것이 이상하게 작동한다고 생각 합니다. command
옵션이 있는 키 는 지정된 명령을 실행할 때만 적합합니다. 그러나 authorized_keys
파일 의 명령 은 환경 변수 SSH_ORIGINAL_COMMAND
가 사용자가 지정한 명령으로 설정되어 실행됩니다 (대화식 세션의 경우 비어 있음). 따라서 다음과 같은 것을 사용할 수 있습니다 ~/.ssh/authorized_keys
(물론 인증 에이 키를 사용하지 않으면 적용되지 않습니다).
command="export LD_LIBRARY_PATH=\"$HOME\"/lib;
if [ -n \"$SSH_ORIGINAL_COMMAND\" ]; then
eval \"$SSH_ORIGINAL_COMMAND\";
else exec \"$SHELL\"; fi" ssh-rsa …
가독성을 위해 줄 바꿈을 사용하지만 실제로는 모두 한 줄에 있어야합니다.
또 다른 가능성은 ~/bin/rsync-wrapper
서버에 래퍼 스크립트를 작성하는 것입니다.
#!/bin/sh
. ~/.profile
exec rsync "$@"
그런 다음 명령 행을 전달 --rsync-path='bin/rsync-wrapper'
하십시오 rsync
. 에 대한 인수 --rsync-path
는 쉘에 의해 확장되므로 원하는 경우 rsync 명령 행을 다음과 같이 전달하여 자체 포함시킬 수 있습니다 --rsync-path='. ~/.profile; rsync'
.
로그인 쉘이 bash 또는 zsh인지에 따라 다른 방법이 있습니다. Bash ~/.bashrc
는 rshd 또는 sshd에 의해 호출 될 때 항상 대화식이 아니더라도 (로 호출되지는 않더라도) 읽습니다 sh
. Zsh는 항상 읽습니다 ~/.zshenv
.
## ~/.bashrc
if [[ $- != *i* ]]; then
# Either .bashrc was sourced explicitly, or this is an rsh/ssh session.
. ~/.profile
fi
## ~/.zshenv
if [[ $(ps -p $PPID -o comm=) = [rs]shd && $- != *l* ]]; then
# Not a login shell, but this is an rsh/ssh session
. ~/.profile
fi