问题:
ssh登录服务器慢,超时
排错:
ssh -vvv hostip -l username -p port
定位卡在哪个位置,根据信息进一步排错,例如:
debug1:pledge: network #出现输入密码后在这个位置卡几秒或者十几秒
查看系统登录日志
tail -fn 100 /var/log/auth.log #Ubuntu的是/var/log/auth.log
tail -fn 100 /var/log/secure.log #CentOS的是/var/log/secure.log
#可以重新ssh登录一下,出现如下报错
sshd[20026]: pam_unix(sshd:session): session opened for user jack by (uid=0)
sshd[20026]: pam_systemd(sshd:session): Failed to create session: Connection timed out
dbus-daemon[1798]: [system] Failed to activate service 'org.freedesktop.systemd1': timed out (service_start_timeout=25000ms)
systemd-logind[1839]: Failed to start session scope session-10539.scope: Failed to activate service 'org.freedesktop.systemd1': timed out (service_start_timeout=25000ms)
解决:
systemctl restart systemd-logind
systemctl restart dbus
当然有可能重启不成功,这个时候我们就需要重启机器。
如果不能重启机器还有另外一种方式,如下:
vim /etc/pam.d/common-session #注释掉session optional pam_systemd.so
# session optional pam_systemd.so
关于systemd-logind
systemd-logind是一个管理用户登录的系统服务,职责如下:
1、持续跟踪用户的会话、进程、空闲状态。 这将在 user.slice 之下,为每个用户分配一个 slice 单元、为每个用户的当前会话分配一个 scope 单元。 同时,针对每个已登录的用户,将会启动一个专属的服务管理器(作为user@.service 模版的一个实例)。
2、生成并管理"session ID"。如果启用了审计并且已经为一个会话设置了审计"session ID", 那么该ID也将同时被用作"session ID", 否则将会使用一个独立的会话计数器(也就是独立生成一个"session ID")。
3、为用户的特权操作(例如关闭或休眠系统) 提供基于 polkit 的认证与授权
4、为应用程序实现 阻止关闭/休眠系统的逻辑
5、处理 硬件关机/休眠按钮的动作
6、多席位(Multi-Seat)管理
7、会话切换管理
8、管理 用户对设备的访问
9、在启动虚拟终端时 自动启动文本登录程序(agetty), 并管理用户的运行时目录。
ssh登录时,systemd-logind负责为这个登录用户创建一个Session ID,并进行管理。上面的报错主要就是阻塞在了这里。
值得一提的是systemd-login的用户会话是通过PAM模块注册的,而PAM模块pam_systemd中有一个desktop选项,因此,如果你的服务器是桌面版的,重启systemd-logind,这个用户桌面上的一切程序都会被关闭(包括桌面上的开启的终端与程序)