12.04 시스템을 교체하기 위해 새 Ubuntu 14.04.4 서버를 설정했지만 새 서버에 이전 SSH 구성에 문제가 있습니다. 구성 없이도 SSH를 사용할 수 있으며 명령줄에서도 배스천 서버를 통해 문제 없이 연결할 수 있습니다. 예를 들어,
ssh -o ProxyCommand="ssh -W %h:%p bastion.my.company.com" lab123.my.company.com
그런데 /home/myname/.ssh/config
아래와 같은 설정으로 파일을 생성하면 문제가 발생합니다.
ServerAliveInterval 150
ServerAliveCountMax 6
ControlMaster auto
ControlPath /tmp/ssh_%h_%p_%r
Host *.my.company.com
User myname
IdentityFile /home/myname/.ssh/mykey.pem
ProxyCommand ssh bastion -W %h:%p
ForwardAgent yes
Host bastion
Hostname bastion.my.company.com
User myname
IdentityFile /home/myname/.ssh/mykey.pem
위의 구성으로 ssh를 사용하려고 하면 다음과 같은 수백 개의 ssh 프로세스가 나타납니다.
myname 29855 29854 0 12:24 pts/6 00:00:00 ssh bastion -W bastion.my.company.com:22
myname 29856 29855 0 12:24 pts/6 00:00:00 ssh bastion -W bastion.my.company.com:22
myname 29857 29856 0 12:24 pts/6 00:00:00 ssh bastion -W bastion.my.company.com:22
myname 29858 29857 0 12:24 pts/6 00:00:00 ssh bastion -W bastion.my.company.com:22
ssh
Ctrl+를 클릭할 때까지 멈춘 C다음 모든 SSH 프로세스가 종료됩니다.
각 프로세스의 마지막 몇 줄에 대한 추적은 다음과 같습니다.
....
write(4, "SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2"..., 43) = 43
read(5, 0xbfe08efc, 1) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGINT {si_signo=SIGINT, si_code=SI_KERNEL} ---
+++ killed by SIGINT +++
추적을 자세히 조사해 보면 파일 핸들이 다음에서 온 것으로 나타났습니다.
...
socket(PF_LOCAL, SOCK_STREAM, 0) = 3
connect(3, {sa_family=AF_LOCAL, sun_path="/tmp/ssh_bastion.my.company.com_22_myname"}, 57) = -1 ENOENT (No such file or directory)
close(3) = 0
pipe([3, 4]) = 0
pipe([5, 6]) = 0
..
/tmp에 소켓 파일이 없고 추적에 바인딩이 없다는 것이 이상해 보입니다.
답변1
Steeldriver는 댓글에서 솔루션을 제공했으며 와일드카드 호스트 일치에서 bastion.my.company.com을 제외하라고 제안했습니다.
예를 들어,
ServerAliveInterval 150
ServerAliveCountMax 6
ControlMaster auto
ControlPath /tmp/ssh_%h_%p_%r
Host *.my.company.com !bastion.my.company.com
User myname
IdentityFile /home/myname/.ssh/mykey.pem
ProxyCommand ssh bastion -W %h:%p
ForwardAgent yes
Host bastion
Hostname bastion.my.company.com
User myname
IdentityFile /home/myname/.ssh/mykey.pem
답변2
ControlPath /tmp/ssh_%h_%p_%r
제어 소켓을 "공개적으로 접근 가능" 상태로 두는 것은 매우 나쁜 생각입니다 /tmp
. 다른 사용자가 접근할 수 없는 보안 디렉터리에 있어야 합니다.
동작은 기본값이 변경된 것처럼 보입니다 CanonicalizeHostname
. 시스템에서 이 옵션의 기본값은 무엇입니까? 비활성화해 보세요: CanonicalizeHostname no
.
설정은 LogLevel DEBUG3
문제 디버깅을 위한 훌륭한 시작이기도 합니다 ssh
. 구성에서 이 옵션을 설정하고 로그를 게시할 수 있나요?