원격으로 관리되는 장치가 있습니다.이 설명, 따라서 내 서버에서 연결하려면 다음을 입력합니다.
ssh localhost -p 2870
저는 많은 호스트를 관리하므로 다음과 같이 입력할 수 있도록 이를 단순화하고 싶습니다.
ssh 2870
나는 bash 별칭을 사용하고 싶지 않았기 때문에(그 이후로는 SCP와 Ansible을 사용할 수 없습니다) 다음을 시도했습니다 ~/.ssh/config
.
Host 28??
HostName localhost
Port %h
어떤 이유로든 %h가 포트 행에서 확장되지 않았기 때문에 실패합니다(호스트 이름 및 기타 이름에서 확장됩니다). 그래서 이것을 시도했습니다 :
Host 28??
ProxyCommand ssh -v localhost -p %h
여기서 %h는 잘 확장되고 공개 키를 통해 정상적으로 서버에 로그인하는 것을 볼 수 있지만 프롬프트가 표시되지 않습니다.
SSH 구성에서 이 "앨리어싱"을 수행하는 방법에 대한 아이디어가 있습니까?
답변1
Port 지시문에서 %h 확장이 작동하지 않는 것 같습니다. .ssh/config에 많은 항목을 채워도 괜찮다면 동적으로 생성하는 것이 어렵지 않습니다(특히 목록이 있거나 연속된 경우).
$(for port in `seq 2000 2900`
do
echo Host $port
echo " Hostname localhost"
echo " Port ${port}"
echo ""
done) >> ~/.ssh/config
SSH의 소스 코드를 볼 수 있으므로 포트가 확장되지 않았음을 확인할 수 있습니다.
conf.c 읽기:https://github.com/openssh/openssh-portable/blob/dc664d1bd0fc91b24406a3e9575b81c285b8342b/readconf.c
백분율_expand 함수는 호스트 및 exec 옵션에 대해 호출됩니다. 이는 %h를 호스트 이름으로 변환하는 함수인 것으로 보입니다. 동일한 함수가 ssh.c에서 호출됩니다. 흥미롭게도 ProxyCommand는 이러한 변수의 확장을 나중에까지 연기하는 것 같습니다. Port 지시문은 이를 호출하지 않습니다.
https://github.com/openssh/openssh-portable/blob/ed877ef653847d056bb433975d731b7a1132a979/misc.c