SSH 로그인이 느린 이유는 무엇입니까?


95

SSH 로그인이 지연되고 있습니다. 구체적으로, 순간에서 수초 지연에 이르는 범위를 볼 수있는 2 개의 지점이 있습니다.

  1. ssh 명령 실행과 로그인 프롬프트 받기 및
  2. 암호 입력과 쉘로드 사이

이제 구체적으로 ssh 세부 사항 만보고 있습니다. 네트워크 지연 시간, 관련 하드웨어 및 OS 속도, 복잡한 로그인 스크립트 등이 지연 될 수 있습니다. 문맥 상 필자는 클라이언트 시스템으로 Ubuntu, CentOS 및 MacOS X를 주로 사용하는 수많은 Linux 배포판과 일부 Solaris 호스트를 사용합니다. 거의 항상 ssh 서버 구성은 OS의 기본 설정과 동일합니다.

어떤 ssh 서버 구성에 관심이 있습니까? 조정할 수있는 OS / 커널 매개 변수가 있습니까? 로그인 쉘 트릭? 기타?


로컬 계정을 사용하고 있습니까? -때때로 pam 인증이 ssh로 로그인하는 데 지연이 발생할 수 있음을 발견했습니다.
Sirex

일반적으로 로컬 계정. 때때로 NIS.
Peter Lyons

답변:


122

설정 시도 UseDNSno있는 /etc/sshd_config/etc/ssh/sshd_config.


7
ssh에 로그인 할 때 가장 일반적인 지연 원인 인 +1
matthias krull

2
"Solaris 11 참고 : Solaris 11에서 UseDNS no 설정을 시도했는데 서비스 시작이 손상되었습니다. 서비스의 친절한 응답이 아닙니다. 다른 * Nix 변형이있는 YMMV이지만 Solaris 11에서는 UseDNS no가 유효한 옵션이 아닌 것 같습니다 "
-Keith

3
IP 주소 (홈 LAN)를 사용하여 로그인 할 때 회의적이지만이 솔루션으로 문제가 해결되었습니다. Google을 위해 지연이 발생했지만 지연은 "key : /home/mylogin/.ssh/id_ecdsa ((nil))"메시지 (실행 중일 때)와 아무 관련이 없습니다 ssh -vvv.
Skippy le Grand Gourou

2
파일을 명시 적으로 만들면 +1 /etc/ssh/sshd_config! 나는 추가 /etc/sshd_config하고 전혀 차이가 보이지 않았습니다!!
vyom

1
@SkippyleGrandGourou : 일부 Solaris 버전은 SunSSH라고하는 수정 된 OpenSSH를 사용하고 있었으며, 이는 성 가시지 않는 비 호환성을 가졌습니다. 솔라리스 11.3이 다시 OpenSSH를 추가하고 결국 SunSSH가 제거 될 것입니다 ...
Gert van den Berg

37

ssh -vvv비슷한 성능의 서버에서 실행했을 때 여기에 중단이 발생했습니다.

debug1: Next authentication method: gssapi-with-mic

/etc/ssh/ssh_config해당 인증 방법 을 편집 하고 주석 처리하여 로그인 성능을 정상으로 되돌 렸습니다. /etc/ssh/ssh_config서버에있는 내용은 다음과 같습니다 .

GSSAPIAuthentication no

서버에서 전역으로 설정할 수 있으므로 GSSAPI가 인증하는 것을 허용하지 않습니다. 그냥 추가 GSSAPIAuthentication no/etc/ssh/sshd_config서버와 서비스를 다시 시작합니다.


winbind / ad 로그인이 구성되면 RHEL5 서버에서 이러한 경우를 발견했습니다.
차드

이것은 Ubuntu 14.04 서버에서 작동합니다.
Penghe Geng

CentOS는 7의 경우 모두 설정해야합니다 GSSAPIAuthentication noUseDNS no/etc/ssh/sshd_config파일을.
Sunry

19

저에게 범인은 IPv6 해상도였습니다. 시간이 초과되었습니다. (내 호스트 공급자의 잘못된 DNS 설정, 나는 추측합니다.)을 수행하여 이것을 발견했습니다 ssh -v.

해결책은 다음 ssh과 같은 -4옵션입니다.

ssh -4 me@myserver.com


2
나는 점점 더 많은 사람들이 시간이 지남에 따라 IPV6을 수용 할 수 있다고 생각합니다. 감사!
세이지

1
...이 답변은 이것이 문제임을 확인하는 디버그 메시지가 없으면 특히 도움이되지 않습니다.
EP

SSH가 듀얼 스택 인터페이스에서 수신 대기 중일 때 가장 일반적인 문제이며 로그인 할 때 가장 먼저 확인해야하는 것은 내 경험이지만 예상보다 시간이 오래 걸립니다.
Mogget

IPv4를 기본값으로 설정하지 않고 IPv6을 수정할 수있는 기회가 있습니까?
msrd0

이것은 아마도 UseDNS 응답이없는 이유 일 것입니다. -vvv를 사용하면 debug2: resolving "thing.net.au" port 22오류없이 일시 중지 만 표시 되지만 -4에서는 발생하지 않으며 DNS IPv6 문제임을 나타냅니다.
pmc

16

systemd를 사용하면 업그레이드 후 로그인과 dbus 통신시 로그인이 중단 될 수 있습니다. 그런 다음 로그인을 다시 시작해야합니다.

systemctl restart systemd-logind

debian 8, arch linx 및 suse list에서 보았습니다.


1
와우, 이제 범인이되었습니다! 무리 감사!
mahatmanich

저도 마찬가지입니다. 가능한 모든 DNS 및 SSH 문제를 먼저 배제하기까지 시간이 걸렸습니다. 참고 : 느린 sudo에도 문제가 적용되는 경우 먼저 시도하십시오.
Michael

RHEL6에서 RHEL7로 전체 업그레이드를 완료했으며이 문제를 발견했습니다. 이 답변은 또한 내 문제를 해결했습니다.
user53029

정말 감사합니다, 그것은 매력처럼 작동합니다.
Bảo Nam

9

항상 현재 수행중인 작업을 표시 ssh하는 -v옵션으로 시작할 수 있습니다 .

$ ssh -v you@host

귀하가 제공 한 정보를 통해 일부 클라이언트 측 구성 만 제안 할 수 있습니다.

  • 암호를 수동으로 입력한다고 작성 했으므로 가능하면 공개 키 인증을 사용하는 것이 좋습니다. 속도 병목 현상을 제거합니다.

  • X 전달 -x및 인증 전달을 -a비활성화 할 수도 있습니다 (기본적으로 이미 비활성화되어 있음). 특히 X 전달을 비활성화하면 클라이언트가 ssh명령을 위해 X 서버를 시작해야하는 경우 (예 : OS X에서) 속도가 크게 향상 될 수 있습니다 .

다른 모든 것은 실제로 언제 어디서 어떤 지연이 발생하는지에 달려 있습니다.


자세한 표시에 대한 힌트, 더 많은 v를 가짐으로써 증가시킬 수도 있습니다. 최대 3 개의 IIRC.
vtest

7

2. 포인트와 관련하여 서버를 수정하거나 루트 / 관리 권한이 필요하지 않은 답변이 있습니다.

"user ssh_config"파일을 편집해야합니다.

vi $HOME/.ssh/config

(주 : $ HOME / .ssh 디렉토리가 없으면 작성해야합니다)

그리고 추가하십시오 :

Host *
  GSSAPIAuthentication no
  GSSAPIDelegateCredentials yes

필요한 경우 호스트별로 수행 할 수 있습니다. :) 예제 :

Host linux-srv
  HostName 192.158.1.1
  GSSAPIAuthentication no
  GSSAPIDelegateCredentials yes

IP 주소가 서버 IP와 일치하는지 확인하십시오. 멋진 장점 중 하나는 ssh가이 서버에 자동 완성 기능을 제공한다는 것입니다. ssh lin+ 를 입력 Tab하면 자동 완성됩니다 ssh linux-srv.


4

확인 /etc/resolv.conf이 파일에 나열된 DNS 서버가 확인 작동하는지 확인하기 위해 서버 및 비 작업 DNS를 삭제합니다.

때로는 매우 도움이됩니다.


2

이미 언급 한 DNS 문제 외에도 NFS 마운트가 많은 서버에 ssh하는 경우 quota명령이로 마운트되지 않은 모든 파일 시스템에서 사용 / 따옴표를 확인할 때 비밀번호와 프롬프트가 지연 될 수 있습니다 noquota. Solaris 시스템에서는 기본값으로 /etc/profile이를보고를 실행하여 건너 뛸 수 touch $HOME/.hushlogin 있습니다.


1

잘 작동합니다.

# uname -a
SunOS oi-san-01 5.11 oi_151a3 i86pc i386 i86pc Solaris
# ssh -V
Sun_SSH_1.5, SSH protocols 1.5/2.0, OpenSSL 0x009080ff
# echo "GSSAPIAuthentication no" >> /etc/ssh/sshd_config
# echo "LookupClientHostnames no" >> /etc/ssh/sshd_config
# svcadm restart ssh

UseDNS는 OpenIndiana와 작동하지 않습니다 !!!

모든 옵션에 대해서는 "man sshd_config"를 읽으십시오

서버가 확인할 수없는 경우 "LookupClientHostnames no"


1

위의 답변 중 어느 것도 작동하지 않고 dns 역방향 조회 문제가 발생하면 nscd(이름 서비스 캐시 데몬)이 설치되어 실행 중인지 확인할 수도 있습니다.

이것이 문제인 경우 dns 캐시가 없기 때문이며, 호스트 파일에없는 호스트 이름을 쿼리 할 때마다 캐시를 ​​찾는 대신 이름 서버로 질문을 보냅니다.

나는 위의 모든 옵션을 시도했고 작동하는 유일한 변경은 시작이었습니다 nscd.

또한 /etc/nsswitch.conf호스트 파일을 먼저 사용하려면 dns 쿼리 확인 순서를 확인해야합니다 .


1

데비안 패키지 관리자 중 하나가 작성한 user-group-modes.patch를 포함하는 데비안 / 우분투 OpenSSH에만 해당됩니다. 이 패치는 ~ / .ssh 파일이 파일과 동일한 gid를 가진 사용자가 한 명인 경우 그룹 쓰기 가능 비트 세트 (g + w)를 갖도록합니다. 패치의 secure_permissions () 함수는이 검사를 수행합니다. 점검 단계 중 하나는 getpwent ()를 사용하여 각 passwd 항목을 살펴보고 항목의 gid와 파일의 gid를 비교하는 것입니다.

항목이 많거나 NIS / LDAP 인증이 느린 시스템에서는이 검사가 느려집니다. nscd는 getpwent () 호출을 캐시하지 않으므로 서버가 로컬이 아닌 경우 모든 passwd 항목을 네트워크를 통해 읽습니다. 내가 찾은 시스템에서 ssh를 호출하거나 시스템에 로그인 할 때마다 약 4 초가 추가되었습니다.

해결 방법은 ~ / .ssh의 모든 파일에서 쓰기 가능한 비트를 제거하여 제거하는 것 chmod g-w ~/.ssh/*입니다.


1

systemd-logind.service를 다시 시작하면 몇 시간 동안 만 문제가 해결되었습니다. sshd_config에서 UsePAM을 yes에서 no로 변경하면 motd가 더 이상 표시되지 않지만 빠른 로그인이 발생했습니다. 보안 문제에 대한 의견?


나는 여기에있는 다른 모든 제안을 겪었으며 이것이 내 Samba4 활성화 서버의 문제를 해결 한 유일한 것입니다 ... 감사합니다!
Deven Phillips

경고 : Red Hat Enterprise Linux에서는 'UsePAM no'가 지원되지 않으며 몇 가지 문제가 발생할 수 있습니다.
bbaassssiiee

1

DNS 확인으로 인해 ssh 로그인이 느려질 수 있음을 보여주는 모든 답변을 완료하기 위해 때로는 방화벽 규칙이 누락되었습니다. 예를 들어, 기본적으로 모든 INPUT paquets를 DROP하면

iptables -t filter -P INPUT DROP

ssh 포트 및 DNS 요청에 대해 INPUT을 수락해야합니다.

iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT

1

ssh -vvv 최소한 20 초 동안 터미널을 가져 오려고 시스템에 연결될 때까지 연결 상태가 양호합니다.

debug1: channel 0: new [client-session]
debug3: ssh_session2_open: channel_new: 0
debug2: channel 0: send open
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
... waiting ... waiting ... waiting

systemctl restart systemd-logind 서버에서 작업을 마친 후 다시 즉시 연결되었습니다!

이것은 debian8있었다 ! 그래서 여기서 체계화되었습니다!

참고 : Bastien Durel은 이미이 문제에 대한 답변을 제공했지만 디버그 정보가 부족합니다. 나는 이것이 누군가에게 도움이되기를 바랍니다.


RHEL7 (CentOS 7)에 "대화식 세션 시작"과 동일한 문제가 있으며 session [default=1] pam_lastlog.so nowtmp showfailed에서 주석을 달아 해결했습니다 /etc/pam.d/postlogin. 컨테이너 기반 OpenVZ VPS에서 lastlog 파일을 업데이트하는 것이 엄청나게 느 렸습니다.
Justin ᚅᚔᚈᚄᚒᚔ

1

최근에 ssh 로그인 속도가 느린 다른 원인을 발견했습니다.

하더라도, 당신은 UseDNS no/etc/sshd_config, SSHD 경우 여전히 역 DNS 조회를 수행 할 수 /etc/hosts.deny같은 항목이 있습니다 :

nnn-nnn-nnn-nnn.rev.some.domain.com

시스템에 DenyHosts가 설치되어있는 경우 발생할 수 있습니다.

누군가 DenyHosts가 이런 종류의 항목을 넣지 않도록하는 방법을 알고 있다면 좋을 것입니다 /etc/hosts.deny.

다음은 항목을 제거하는 방법에 대한 DenyHosts FAQ 링크 입니다. DenyHosts가 차단 한 IP 주소를 제거하려면 어떻게해야합니까?를/etc/hosts.deny 참조하십시오 .


1

선호하는 이름 확인 방법이 호스트 파일이 아닌 DNS임을 알 수 있습니다.

예를 들어 다음은 일반적인 구성입니다.

[root@LINUX1 ~]# cat /etc/nsswitch.conf|grep hosts
#hosts:     db files nisplus nis dns
hosts:      files dns myhostname

먼저 hosts 파일 (옵션 : 파일)에 도달 한 다음 DNS (옵션 : dns)에 도달하지만 다른 이름 확인 시스템이 추가되어 작동하지 않아 역방향 확인을 수행하는 데 속도가 느려지는 것을 알 수 있습니다.

이름 확인 순서가 정확하지 않은 경우 다음 위치에서 변경할 수 있습니다. /etc/nsswitch.conf

http://www.sysadmit.com/2017/07/linux-ssh-login-lento.html 에서 추출


1

나는 모든 대답을 시도했지만 그중 아무것도 효과가 없었습니다. 마침내 나는 내 문제를 발견했다.

먼저 sudo tail -f /var/log/auth.log ssh의 로그를 볼 수 있도록 다른 세션 실행에서 ssh 172.16.111.166대기하고 있음을 알았습니다.

/usr/bin/sss_ssh_knownhostsproxy -p 22 172.16.111.166

검색 후 / etc / ssd / ssh_config 에이 줄을 찾았습니다.

ProxyCommand /usr/bin/sss_ssh_knownhostsproxy -p %p %h

나는 그것을 언급하고 지연이 사라졌다


1

참고 :이 튜토리얼은 "디버깅 방법"으로 시작했지만 결국 Ubuntu 16.04 LTS 서버 에서 도움이되는 솔루션 이었습니다.

TLDR : landscape-sysinfo해당 명령을 실행하는 데 시간이 오래 걸리는지 확인하십시오. 새 SSH 로그인시 시스템 정보가 출력됩니다. 이 명령을 모든 시스템에서 사용할 수있는 것은 아니며 landscape-common패키지가 설치합니다. ( "그러나 더 많은 것이 있습니다 ...")


문제가있는 머신의 다른 포트에서 두 번째 ssh 서버를 시작하고 디버그 모드에서 수행하십시오. 그러면 포크되지 않고 디버그 메시지가 인쇄됩니다.

sudo /usr/sbin/sshd -ddd -p 44321

상세 모드의 다른 머신에서 해당 서버에 연결하십시오.

ssh -vvv -p 44321 username@server

내 클라이언트는 절전 모드를 시작하기 직전에 다음 줄을 출력합니다.

debug1: Entering interactive session.
debug1: pledge: network

인터넷 검색은 실제로 도움이되지 않지만 서버 로그가 더 좋습니다.

debug3: mm_send_keystate: Finished sending state [preauth]
debug1: monitor_read_log: child log fd closed
debug1: PAM: establishing credentials
debug3: PAM: opening session
---- Pauses here ----
debug3: PAM: sshpam_store_conv called with 1 messages
User child is on pid 28051

로 변경 UsePAM yes하면 UsePAM no이 문제가 해결되었습니다.

관련이 UseDNS없거나 다른 설정 UsePAM은 시스템의이 문제 에만 영향을 미칩니다.

내가 왜 단서가 없다, 나는 또한 떠나지 않을거야 UsePAM에서 no나는 부작용이있는 모르기 때문에,하지만,이 날 조사를 계속 할 수 있습니다.

따라서 이것이 답변이라고 생각하지 말고 무엇이 잘못되었는지 알아 내기위한 첫 단계입니다.


그래서 조사를 계속 sshd하고 strace( sudo strace /usr/sbin/sshd -ddd -p 44321)를 실행 했습니다 . 결과는 다음과 같습니다.

sendto(4, "<87>Nov 20 20:35:21 sshd[2234]: "..., 110, MSG_NOSIGNAL, NULL, 0) = 110
close(5)                                = 0
stat("/etc/update-motd.d", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
umask(022)                              = 02
rt_sigaction(SIGINT, {SIG_IGN, [], SA_RESTORER, 0x7f15dce784b0}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGQUIT, {SIG_IGN, [], SA_RESTORER, 0x7f15dce784b0}, {SIG_DFL, [], 0}, 8) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
clone(child_stack=0, flags=CLONE_PARENT_SETTID|SIGCHLD, parent_tidptr=0x7ffde6152d2c) = 2385
wait4(2385, # BLOCKS RIGHT HERE, BEFORE THE REST IS PRINTED OUT # [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 2385

그 줄 /etc/update-motd.d은 나를 의심스럽게 만들었습니다./etc/update-motd.d

그래서 cd'으로 거라고 /etc/update-motd.d하고를 실행 sudo chmod -x *PAM이 동적 생성 된 모든 파일을 실행 억제하기 위해 Message Of The Day시스템 부하를 포함하고 패키지가 필요한 경우 업그레이드,이 문제를 해결할 수있는을.

이 서버는 "에너지 효율이 높은"N3150 CPU를 기반으로 한 24 시간 내내 많은 작업을 수행하는 서버이므로이 모든 motd 데이터를 수집하는 것이 너무 많은 것이라고 생각합니다.

그 폴더에서 스크립트를 선택적으로 활성화하여 덜 해로운 것을 알 수 있지만 특별히 호출하는 landscape-sysinfo것이 매우 느리며 50-landscape-sysinfo해당 명령을 호출합니다. 나는 그것이 가장 큰 지연을 일으키는 것이라고 생각합니다.

대부분의 파일을 다시 사용 후에 나는 결론에 도달 50-landscape-sysinfo하고 99-esm내 문제의 원인이었다. 50-landscape-sysinfo실행하는 데 약 5 초, 99-esm약 3 초가 걸렸습니다. 남은 파일은 모두 약 2 초입니다.

나도 50-landscape-sysinfo하고 99-esm중요하지 않습니다. 50-landscape-sysinfo재미있는 시스템 통계를 인쇄하고 (공간이 부족한 경우에도!) 99-esm관련 메시지를 인쇄합니다.Ubuntu Extended Security Maintenance

마지막으로 스크립트를 작성 echo '/usr/bin/landscape-sysinfo' > info.sh && chmod +x info.sh하여 요청에 따라 출력 할 수 있습니다 .


1

이 스레드는 이미 많은 솔루션을 제공하고 있지만 여기에는 =)가 제공되지 않습니다. 여기 있습니다. 내 문제 (내 라즈베리 파이에 ssh 로그인하는 데 약 1 분이 걸렸습니다)는 손상된 .bash_history 파일로 인해 발생했습니다. 로그인시 파일을 읽었으므로 로그인 지연이 발생했습니다. 파일을 제거하면 로그인 시간이 순식간에 다시 정상으로 돌아갔습니다.

이것이 다른 사람들에게 도움이되기를 바랍니다.


0

나에게 GSSAPI가 필요했고 역 DNS 조회를 끄고 싶지 않았다. 그것은 좋은 생각처럼 보이지 않았으므로 resolv.conf의 메인 페이지를 확인했습니다. 나와 SSH하는 서버 사이의 방화벽은 방화벽이 예상 한 형식이 아니기 때문에 DNS 요청을 방해하는 것으로 나타났습니다. 결국, 내가해야 할 일은 SSH로 연결 한 서버의 resolv.conf 에이 줄을 추가하는 것입니다.

options single-request-reopen


0

놀랍게도 CentOS 7의 바인드 패키지 업데이트는 /etc/named.conf에 권한 문제가 있음을 나타내는 로그에 표시되었습니다. 0640으로 몇 달 동안 잘 작동했습니다. 이제 0644가 필요합니다. 이는 명명 된 데몬이 'named'사용자에게 속하므로 의미가 있습니다.

ssh 로그인에서 로컬 웹 서버의 페이지 서비스, 느린 LAMP 앱 등과 같이 이름이 낮 으면 모든 요청이 구성된 외부 보조 DNS를 조회하기 전에 죽은 로컬 서버에서 시간 초과되기 때문에 모든 것이 느려졌습니다.


0

나에게 로컬 /etc/hosts파일에 문제가있었습니다 . 그래서 ssh시간이 오래 걸리는 두 가지 다른 IP (하나의 잘못)를 시도했습니다.

사용 ssh -v트릭은 여기 않았다

$ ssh -vvv remotesrv
OpenSSH_6.7p1 Debian-5, OpenSSL 1.0.1k 8 Jan 2015
debug1: Reading configuration data /home/mathieu/.ssh/config
debug1: /home/mathieu/.ssh/config line 60: Applying options for remotesrv
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to remotesrv [192.168.0.10] port 22.
debug1: connect to address 192.168.0.10 port 22: Connection timed out
debug1: Connecting to remotesrv [192.168.0.26] port 22.
debug1: Connection established.

/etc/hosts서버?
Daniel F
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.