Match exec
그래서 IP에서 일부 일치 항목을 얻기 위해 사용하는 사용자를 위한 SSH 구성 파일이 있습니다 .
Match exec "echo %h | grepcidr 192.168.12.0/20 &>/dev/null "
User ubuntu
ProxyCommand ssh my-bastion -W %h:%
IdentityFile ~/.ssh/target.pem
이것은 내 호스트에서 잘 작동하지만 openssh-client가 설치된 컨테이너에서 실행하려고 시도했지만 명령이 성공한 것으로 간주하기 때문에 ssh 연결이 실패합니다(네트워크를 대상으로 하지 않는 경우에도). , 그래서 요새를 통과하려고 시도할 것입니다.
debug1: Executing command: 'echo my.host.com | grepcidr 192.168.12.0/20 &>/dev/null '
debug3: command returned status 0
내 호스트에서 반환됩니다.
debug1: Executing command: 'echo my.host.com | grepcidr 192.168.12.0/20 &>/dev/null '
debug3: command returned status 1
컨테이너 ssh 명령이 반환하는 내용은 무엇입니까?
조사해본 결과 컨테이너의 ssh 명령은 다음을 사용하여 실행되는 것으로 나타났습니다. sh -c
반면 내 호스트에서 실행된 ssh 명령은 bash -c
명령줄에서 테스트하고 반환 값을 확인하여 이것이 원인임을 확인할 수 있습니다. 명령하다echo $?
ssh 명령에만 사용하도록 지정하는 방법이 있습니까 bash
?
SHELL
명령줄 시작 부분에서 환경 변수를 재정의할 수 있습니다.
SHELL=/bin/bash ssh [email protected]
하지만 내 목표는 그 모든 것 뒤에 ansible을 사용하는 것이므로 모든 SSH에 대해 셸을 검증하고 싶습니다.
답변1
로 시작하는 대체 명령을 지정 bash -c
하거나 Bashism(즉, &>
stdout-and-stderr 리디렉션)을 삭제할 수 있습니다.
Match exec
C 함수 와 같은 것을 사용하므로 어떤 system()
쉘을 제공할지 결정하는 것은 런타임 시스템(C 라이브러리)에 달려 있습니다. 대부분의 Unix 시스템에서는 sh -c
전체 명령줄을 더한 것으로 해석됩니다 . 이 부분은 변경할 수 없습니다.