이것은 나의 이전 질문 의 확장입니다 . ssh 로그인시 원격 컴퓨터 에서 로컬로 저장된 명령 (즉 mount /home
) 을 실행해야합니다 . 현재 다음을 사용하고 있습니다.
ssh -t mymachine.example.com 'mount /home ; /bin/bash'
잘 작동하지만 .ssh/config
매번 입력 할 필요가 없도록 이 명령을 내 명령에 넣을 수 있는지 궁금합니다 . LocalCommand
옵션을 찾았 지만 옵션이 표시되지 않습니다 RemoteCommand
.
그것은이 있다는 importand이다 command-to-be-executed
는 암호화 된 디스크를 열려면 암호를 포함하므로, 로컬 컴퓨터에 저장 될 수있다. 이것이 .profile
원격 컴퓨터에 명령을 넣을 수없는 이유 입니다.
답변
이 질문은 수퍼 유저에게 이전에 요청되었습니다. 첫 번째 대답은 요구 사항에 맞지 않는 원격 파일을 사용하지만 로컬 별칭 사용을 제안하는 두 번째 대답은 문제의 해결책 일 수 있습니다.
암호화 된 디스크를 열기위한 비밀번호를 포함하므로 가져 오기 및 실행할 명령을 로컬 시스템에 저장해야합니다. 이것이 원격 컴퓨터의 .profile에 명령을 넣을 수없는 이유입니다.
이것은 아마 안전하지 않습니다. 내가 사용하는 경우 echo
SSH를 명령과 명령을, 그것은에 표시 ps
원격 서버 :
martin@martin ~ % ssh dev2 "echo hello; ps aux|grep echo"
hello
root 25358 0.0 0.0 5848 1296 ? Ss 11:27 0:00 bash -c echo hello; ps aux|grep echo
root 25362 0.0 0.0 5012 828 ? S 11:27 0:00 grep echo
답변
이것은 OpenSSH 7.6에서 추가되었습니다 :
RemoteCommand 옵션을 추가하여 클라이언트의 명령 행에 명령을 제공하는 대신 ssh 구성 파일에 명령을 지정하십시오. 이를 통해 구성 파일이 원격 호스트에서 실행될 명령을 지정할 수 있습니다.
답변
RequestTTY yes
RemoteCommand screen -UDr
답변
다음과 같이 원격 시스템의 협력으로이를 수행 할 수 있습니다.
로컬 머신에서 환경 변수에서 실행할 명령을 입력하십시오 LC_SSH_INITIAL_COMMAND
. SSH는 일반적 LC_*
으로 로케일 설정이므로 양식의 모든 환경 변수를 전달하도록 구성됩니다 .
원격 시스템 에서 키별 eval "$LC_SSH_INITIAL_COMMAND"
설정을 통해~/.ssh/authorized_keys
실행 하거나 파일에서 실행 ~/.ssh/rc
합니다 ( ~/.ssh/rc
파일 이있는 경우 xauth
X11 전달을 위해 수동으로 실행 해야합니다).
이 authorized_keys
방법을 사용하면 SSH 세션이 종료 될 때 유사하게 명령을 실행할 수 있습니다 (쉘 프로세스가 갑자기 종료되지 않는 한, 최소한 HUP 신호를 트랩하여 연결이 끊어 지더라도 명령이 실행되도록해야합니다).
그러나 이것은 파일 시스템 마운트와 같은 전역 작업을 수행 하기에 좋은 배열 은 아닙니다 . 파일 시스템이 이미 마운트 된 경우 (예 : 동시 실행 SSH 명령으로 인해) 다시 마운트하지 않도록주의해야하며 로그 아웃시 마운트 해제하지 않아야합니다. 이 사용 사례에 대한 권장 사항은 여전히 명시 적으로 마운트를 수행 한 다음 특별한 작업을 수행하지 않고 원격 명령을 실행하고 더 이상 해당 파일 시스템에 액세스하지 않으려면 마운트 해제하는 것입니다.
답변
나는 그것을 시도하지 않았지만 접근 방식은
- env vars를 읽어 원하는 명령을 실행
Subsystem
하는 리모컨에 a 를 선언하십시오 .sshd_config
- 이러한 키를 원격 서버에 전달하기
SendEnv
위해 로컬.ssh/config
에서 사용