SSH를 통해 연결할 때 다양한 호스트 접미사를 시도했습니다.

SSH를 통해 연결할 때 다양한 호스트 접미사를 시도했습니다.

SSH를 통해 호스트에 연결할 때 간단히 입력하고 연결할 수 있기를 원합니다 ssh hostname.

그러나 현재 설정에서는 연결하려면 hostname.hosts.companyname.com.

호스트 파일에 호스트 이름을 추가하지 않고 연결을 포기하기 전에 여러 호스트 이름을 반복하도록 SSH를 설정할 수 있습니까? 예를 들어. 을 입력하면 ssh hostnameSSH에서 다음을 수행할 수 있게 됩니다.

  1. hostname짧은 시간 초과 후에 실패하면 SSH를 통해 액세스해 보십시오.
  2. hostname.hosts.companyname.com짧은 시간 초과 후에 실패하면 SSH를 통해 액세스해 보십시오.
  3. SSH를 통해 연결을 시도합니다 hostname.companyname.com. 실패하면 오류가 인쇄됩니다.

그러나 우리는 1000개가 넘는 호스트를 보유하고 있으며 모든 호스트에 별칭을 추가하고 싶지는 않습니다. 이것이 기본 동작이기를 바랍니다.

위는 간단한 예입니다. 나는 이 목록에 30개의 잠재적 도메인 범위를 추가할 수 있기를 원합니다. resolv.conf search이것이 옵션이 아닌 이유입니다(도메인이 6개로 제한되어 있기 때문입니다).

답변1

/etc/resolv.confDNS를 업데이트하려면 다음 두 단계를 따르세요.

  1. domain또는 줄이 있을 수 있습니다 search. 있는 경우 파일에서 로 바꾸고 domain다음 search단계를 계속합니다.
  2. hosts.companyname.com companyname.com검색 목록에 추가합니다 . search(또는 ) 지시문이 없으면 domain이 두 값을 사용하여 지시문을 만듭니다.

결과의 예

nameserver 192.168.1.254
nameserver 192.168.2.254
search hosts.companyname.com companyname.com

/etc/hosts이렇게 하면 귀하의 기준에 따라 DNS를 통해 자격이 없는 이름을 확인할 수 있습니다.

답변2

최소한 두 가지 옵션이 있습니다:

구성 파일

~/.ssh/config별칭을 사용하여 파일을 생성합니다 .

Host hostname
    HostName hostname.hosts.companyname.com

올바른 호스트 이름이 정적이라고 가정합니다. 물론 이는 파일을 변경하는 것과 다소 유사합니다 /etc/hosts.

쉘 기능

ssh명령 이름이나 명시적으로 호출해야 하는 항목(예: )에 대해 쉘 함수를 정의 할 수 있습니다 ssh-hosts.

ssh () {
        hostname="$1"
        test -z "$hostname" && return 128

        for suffix in "" .hosts.companyname.com .companyname.com ; do
                test_hostname="$hostname$suffix"
                if [ -n "$(ssh-keyscan "$test_hostname" 2>/dev/null)"; then
                        ssh "$test_hostname"
                        return $?
                fi
        done
}

물론 config이 방법을 사용하여 파일을 생성할 수도 있습니다. 모든 호스트 이름 목록이 없는 경우 쉘 기능을 사용하여 파일에 새 Host블록을 추가 config하고 파일을 실행하기 전에 확인할 수도 있습니다 ssh-keyscan.

관련 정보