여러 SSH 버전이 포함된 SSH 구성 파일

여러 SSH 버전이 포함된 SSH 구성 파일

저는 OpenSSH 버전 6.5에 추가된 "Match" 키워드를 정말 좋아하고 이를 .ssh/config 파일에서 많이 사용합니다.

하지만 프로필은 내 NFS 홈에 있으므로 LAN에 있는 여러 컴퓨터에 로그인할 때 참조됩니다.

이러한 시스템 중 상당수는 여전히 SSH 버전이 6.5보다 낮습니다.

따라서 이러한 시스템 중 하나에서 ssh(또는 scp/rsync)를 시도하면 "match"가 "잘못된 구성 옵션"이라는 불만이 표시되고 ssh가 종료됩니다.

전혀 작동하지 않는 것보다는 구성 파일에서 사용자 정의하지 않고 ssh를 계속하는 편이 낫습니다. 그러나 최신 버전이 최신 옵션을 사용할 수 있도록 구성 파일을 작성하는 방법을 찾을 수 없는 것 같지만 이전 버전은 해당 옵션 없이도 작동합니다. 누군가 좋은 아이디어가 있다면 공유해주세요.

나는 이전 버전에서 "ssh -F /dev/null"을 수행할 수 있다는 것을 알아냈습니다. 꼭 필요하고 귀찮을 뿐이라고 생각해요. "자동" 솔루션을 선호합니다.

답변1

불행하게도 이것은 불가능합니다. 새 버전에 새로운 선택적 구문이 도입된 일부 애플리케이션은 "조건부 컴파일" 주석을 사용했으며, 주목할만한 예는 MySQL입니다.

그러나 다행스럽게도 OpenSSH는 아직 그 단계에 이르지 않았습니다.

가능한 해결 방법: 전체 홈 디렉터리가 다른 OS에 설치된 경우 SSH 버전을 확인하는 스크립트를 .profile에 추가할 수 있으며 프로필을 로드하기에 충분하지 않은 경우 별칭을 ssh.profile에 추가합니다 ssh -F /dev/null. 예를 들어:

if [ "$(bc -l <<<"$(ssh -V 2> >(sed 's,^[^0-9]*,,;s,[^\.0-9].*,,')) < 6.5")" == 1 ]
then
    alias ssh="/usr/bin/ssh -F/dev/null"
fi

또는 @derobert의 의견에 따르면 rsyncOpenSSH 또는 sshOpenSSH를 전송으로 사용하고 프로그램을 직접 호출하는(셸에서 별칭을 확인하지 않고) 다른 응용 프로그램을 사용하는 등 일부 사용 사례에서는 별칭이 충분하지 않을 수 있습니다. 이것이 실제로 문제가 되는 경우 ssh로컬 bin 디렉터리(일반적 ~/bin으로 또는 )에서 호출되는 스크립트를 생성해야 할 수도 있습니다 ~/.local/bin. 애플리케이션이 바이너리에 대한 경로를 확인하면 ssh경로 초기에 로컬 bin 디렉터리가 표시되고 스크립트가 실행되어 필요한 논리가 수행됩니다.

어쩌면 다음과 같은 것일 수도 있습니다.

#!/bin/bash
if [ "$(bc -l <<<"$(ssh -V 2> >(sed 's,^[^0-9]*,,;s,[^\.0-9].*,,')) < 6.5")" == 1 ]
then
    /usr/bin/ssh -F/dev/null "$@"
else
    /usr/bin/ssh "$@"
fi

관련 정보