Ubuntu 12.04의 SSH 구성이 14.04.4에서 작동하지 않습니다.

Ubuntu 12.04의 SSH 구성이 14.04.4에서 작동하지 않습니다.

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

sshCtrl+를 클릭할 때까지 멈춘 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. 구성에서 이 옵션을 설정하고 로그를 게시할 수 있나요?

관련 정보