ssh 명령으로 ssh 세션을 시작할 때 기본 env를 사용하는 기본 대화 형 세션과 홈 디렉토리에서 시작하는 두 가지 옵션이 있거나 임의의 명령을 실행하지만 비 대화식으로 실행하는 ssh "command; command; bash -i -l"
것처럼 보입니다 (심지어도 좋지 않은 것처럼 보입니다). 나는 종종 대화식 세션을 원하지만 그 전에는 일반적으로 디렉토리 변경 또는 시스템 환경 조정과 같은 일이 발생합니다. 이러한 것들은 세션마다 다를 수 있으므로, 나는 단지 그것들을 붙일 수는 없습니다 .bashrc
.
그렇게 할 수있는 방법이 있습니까?
답변
나는 마침내 비밀을 알게 되었기 때문에 스스로 대답하고 있습니다. 둘 -t
에 대한 옵션 ssh
, 나 -l
에 대한 옵션을 bash
하지만 그들은 작동 조합 – 자신에 로그인 쉘로 이어질 것입니다.
ssh user@host.com -t 'cd /some/where; FOO=BAR NUMBER=42 bash -l'
디렉토리 설정 환경 변수를 변경 한 다음 적절한 로그인 쉘 (즉, 내가 지금까지 발견 한 유일한 차이점 시작 /etc/motd
정상적으로입니다 – 이런 식으로 표시되지 않습니다 ssh
의 또는 login
의 책임,하지 bash
의 – 모든 것이 아닌 것 같습니다 완벽하게 작동하고 모든 환경 변수는 동일합니다).
그들은 제한하지 않는 때문에 이러한 환경 / 디렉토리 변경, SSH 후 발생 PermitUserEnvironment
과 관련된 설정을 (정확히 같은 계획)하지만 전 .bashrc
/ .profile
실행하세요. 여기에는 장점과 단점이 있습니다. bash init 스크립트에서 설정 한 내용을 무시하는 것이 더 어렵지만 PS1
, 올바른 값을 ssh
명령 행에 정확하게 패킹하기가 쉬우 며 .profile
모든 노력 이 필요합니다.
실제로 필요한 경우 bash .profile
가 명령 줄 을 사용하여 무언가를 실행하는 것은 실제로 매우 쉽습니다. ssh user@foo.com -t 'cd /mnt; echo ". ~/.bash_profile; PS1=\"\\h-\w \"" >~/xxx; bash --init-file ~/xxx'
그런 식으로 넣을 때 매우 추악하지만 이러한 대체 .profile
파일은 이전에 준비 할 수 있습니다. (내가 알 수 bash
있는 한 .profile
스크립트에 대한 후보 위치가 몇 개 있고 처음 발견 된 위치를 실행합니다- . file
자동 폴 백이 없으므로 profile
원하는 경우 정상적인 위치를 확인 해야합니다)
답변
.bashrc를 편집하고 SSH 관련 환경 설정을 다음으로 묶으십시오.
if [ $SSH_TTY ]; then
...
fi
이를 통해 SSH 세션에 대한 설정을 추가 할 수 있습니다. ‘코스, 당신이 원하는 모든 것이 세션마다 다른 임의의 환경 변수를 처음부터 바로 설정하는 것이라면, 나는 당신이 기계를 입력하는 것 외에도 당신을 위해 추측 할 수있는 방법을 모르겠습니다 … 설정 선택을 기반으로 테스트 할 수있는 조건이 필요합니다.
답변
로부터 ssh
매뉴얼 페이지
또한 ssh는 ~ / .ssh / environment를 읽고 파일이 존재하고 사용자가 환경을 변경할 수있는 경우“VARNAME = value”형식의 행을 환경에 추가합니다. 자세한 내용은 sshd_config (5)의 PermitUserEnvironment 옵션을 참조하십시오.
그것은 말합니다 :
허가 사용자 환경
~ / .ssh / authorized_keys의 ~ / .ssh / environment 및 environment = 옵션이 sshd (8)에 의해 처리되는지 여부를 지정합니다. 기본값은 “아니오”입니다. 환경 처리를 활성화하면 LD_PRELOAD와 같은 메커니즘을 사용하여 일부 구성에서 액세스 제한을 무시할 수 있습니다.
이 기능은 Mickey가 제안한 구조를 ~/.bashrc
사용 하여 원격에서 명령문을 조건부로 실행하는 데 사용될 수 있습니다 .if
답변
다음과 같이 간단하게 실행하십시오. ssh -t yourdomain 'cd /yourpath; bash'
-t
: 프롬프트가 표시되도록; bash
: 명령을 실행하고cd
ssh 세션을 종료 하더라도 컨트롤을 다시 반환합니다.