如题,今天遇到了,ssd 没法连接我内网一台服务器的问题。linux
ping 该服务器可以正常ping通。算法
在内网服务器登录也没问题。shell
可是用本机ssh登录服务器缺有问题。apache
排查思路天然就落到服务器的ssh相关设置中缓存
一、排查sshd服务器是否启动,发现已经正常启动,排除安全
二、排查/etc/pam.d/sshd 中配置,将以前限制登录用户配置注释,问题依旧,排除服务器
三、排查/etc/sudoers 中配置,看是否限制root等用户登录,发现没有限制用户登录,排除cookie
四、排查/etc/ssh/ssh_config ,看到 #AllowUsers root@192.168.65.138 test 这句明显有问题,注释之后问题解决网络
附:sshd_config配置详解 ssh
sshd_config限制某ip访问
linux中/etc/hosts.deny文件能够配置限制访问ip等信息,它同apache中order deny,allow 差很少,不过写法有些不一样。只容许192.168.1.1访问,这样写:
sshd: ALL EXCEPT 192.168.1.1
同理在/etc/下有个hosts.allow,一样能够进行配置。
sshd_config配置详解
sshd_config是OpenSSH SSH服务器守护进程配置文件。sshd默认是从/etc/ssh/sshd_config(也能够经过-f命令行选项指定配置文件:/etc/init.d/sshd -f filename start)读取配置信息。
sshd_config配置文件由”指令 值”对组成的,每行一个。空行和以’#'开头的行都将被忽略。若是值中含有空白符或者其余特殊符号,那么能够经过在两边加上双引号(”)进行界定。[注意]值是大小写敏感的,但指令是大小写无关的。
当前全部可使用的配置指令以下:
指定客户端发送的哪些环境变量将会被传递到会话环境中。[注意]只有SSH-2协议支持环境变量的传递。细节能够参考 ssh_config(5) 中的 SendEnv 配置指令。指令的值是空格分隔的变量名列表(其中可使用’*'和’?'做为通配符)。也可使用多个 AcceptEnv 达到一样的目的。须要注意的是,有些环境变量可能会被用于绕过禁止用户使用的环境变量。因为这个缘由,该指令应当当心使用。默认是不传递任何环境变量。
指定 sshd(8) 应当使用哪一种地址族。取值范围是:”any”(默认)、”inet”(仅IPv4)、”inet6″(仅IPv6)。
这个指令后面跟着一串用空格分隔的组名列表(其中可使用”*”和”?”通配符)。默认容许全部组登陆。若是使用了这个指令,那么将仅容许这些组中的成员登陆,而拒绝其它全部组。这里的”组”是指”主组”(primary group),也就是/etc/passwd文件中指定的组。这里只容许使用组的名字而不容许使用GID。相关的 allow/deny 指令按照下列顺序处理:DenyUsers, AllowUsers, DenyGroups, AllowGroups。
是否容许TCP转发,默认值为”yes”。禁止TCP转发并不能加强安全性,除非禁止了用户对shell的访问,由于用户能够安装他们本身的转发器。
这个指令后面跟着一串用空格分隔的用户名列表(其中可使用”*”和”?”通配符)。默认容许全部用户登陆。若是使用了这个指令,那么将仅容许这些用户登陆,而拒绝其它全部用户。若是指定了 USER@HOST 模式的用户,那么 USER 和 HOST 将同时被检查。这里只容许使用用户的名字而不容许使用UID。相关的 allow/deny 指令按照下列顺序处理: DenyUsers, AllowUsers, DenyGroups, AllowGroups。
存放该用户能够用来登陆的 RSA/DSA 公钥。该指令中可使用下列根据链接时的实际状况进行展开的符号:%% 表示’%'、%h 表示用户的主目录、%u 表示该用户的用户名。通过扩展以后的值必需要么是绝对路径,要么是相对于用户主目录的相对路径。默认值是”.ssh/authorized_keys”。
将这个指令指定的文件中的内容在用户进行认证前显示给远程用户。这个特性仅能用于SSH-2,默认什么内容也不显示。”none”表示禁用这个特性。
是否容许质疑-应答(challenge-response)认证。默认值是”yes”。全部 login.conf(5) 中容许的认证方式都被支持。
指定SSH-2容许使用的加密算法。多个算法之间使用逗号分隔。可使用的算法以下:”aes128-cbc”, “aes192-cbc”, “aes256-cbc”, “aes128-ctr”, “aes192-ctr”, “aes256-ctr”,”3des-cbc”, “arcfour128″, “arcfour256″, “arcfour”, “blowfish-cbc”, “cast128-cbc”。默认值是可使用上述全部算法。
sshd(8) 在未收到任何客户端回应前最多容许发送多少个”alive”消息。默认值是 3 。到达这个上限后,sshd(8) 将强制断开链接、关闭会话。须要注意的是,”alive”消息与 TCPKeepAlive 有很大差别。alive”消息是经过加密链接发送的,所以不会被欺骗;而 TCPKeepAlive 倒是能够被欺骗的。若是 ClientAliveInterval 被设为 15 而且将 ClientAliveCountMax 保持为默认值,那么无应答的客户端大约会在45秒后被强制断开。这个指令仅能够用于SSH-2协议。
设置一个以秒记的时长,若是超过这么长时间没有收到客户端的任何数据,sshd(8) 将经过安全通道向客户端发送一个”alive”消息,并等候应答。默认值 0 表示不发送”alive”消息。这个选项仅对SSH-2有效
是否对通讯数据进行加密,仍是延迟到认证成功以后再对通讯数据加密。可用值:”yes”, “delayed”(默认), “no”。
这个指令后面跟着一串用空格分隔的组名列表(其中可使用”*”和”?”通配符)。默认容许全部组登陆。若是使用了这个指令,那么这些组中的成员将被拒绝登陆。这里的”组”是指”主组”(primary group),也就是/etc/passwd文件中指定的组。这里只容许使用组的名字而不容许使用GID。相关的 allow/deny 指令按照下列顺序处理:DenyUsers, AllowUsers, DenyGroups, AllowGroups。
这个指令后面跟着一串用空格分隔的用户名列表(其中可使用”*”和”?”通配符)。默认容许全部用户登陆。若是使用了这个指令,那么这些用户将被拒绝登陆。若是指定了 USER@HOST 模式的用户,那么 USER 和 HOST 将同时被检查。这里只容许使用用户的名字而不容许使用UID。相关的 allow/deny 指令按照下列顺序处理:DenyUsers, AllowUsers, DenyGroups, AllowGroups。
强制执行这里指定的命令而忽略客户端提供的任何命令。这个命令将使用用户的登陆shell执行(shell -c)。这能够应用于 shell 、命令、子系统的完成,一般用于 Match 块中。这个命令最初是在客户端经过 SSH_ORIGINAL_COMMAND 环境变量来支持的。
是否容许远程主机链接本地的转发端口。默认值是”no”。sshd(8) 默认将远程端口转发绑定到loopback地址。这样将阻止其它远程主机链接到转发端口。GatewayPorts 指令可让 sshd 将远程端口转发绑定到非loopback地址,这样就能够容许远程主机链接了。 “no”表示仅容许本地链接,”yes”表示强制将远程端口转发绑定到统配地址(wildcard address),”clientspecified”表示容许客户端选择将远程端口转发绑定到哪一个地址。
是否容许使用基于 GSSAPI 的用户认证。默认值为”no”。仅用于SSH-2。
是否在用户退出登陆后自动销毁用户凭证缓存。默认值是”yes”。仅用于SSH-2。
这个指令与 RhostsRSAAuthentication 相似,可是仅能够用于SSH-2。推荐使用默认值”no”。推荐使用默认值”no”禁止这种不安全的认证方式。
在开启 HostbasedAuthentication 的状况下,指定服务器在使用 ~/.shosts ~/.rhosts /etc/hosts.equiv 进行远程主机名匹配时,是否进行反向域名查询。”yes”表示 sshd(8) 信任客户端提供的主机名而不进行反向查询。默认值是”no”。
主机私钥文件的位置。若是权限不对,sshd(8) 可能会拒绝启动。SSH-1默认是 /etc/ssh/ssh_host_key 。SSH-2默认是 /etc/ssh/ssh_host_rsa_key 和 /etc/ssh/ssh_host_dsa_key 。一台主机能够拥有多个不一样的私钥。”rsa1″仅用于SSH-1,”dsa”和”rsa”仅用于SSH-2。
是否在 RhostsRSAAuthentication 或 HostbasedAuthentication 过程当中忽略 .rhosts 和 .shosts 文件。不过 /etc/hosts.equiv 和 /etc/shosts.equiv 仍将被使用。推荐设为默认值”yes”。
是否在 RhostsRSAAuthentication 或 HostbasedAuthentication 过程当中忽略用户的 ~/.ssh/known_hosts 文件。默认值是”no”。为了提升安全性,能够设为”yes”。
是否要求用户为 PasswordAuthentication 提供的密码必须经过 Kerberos KDC 认证,也就是是否使用Kerberos认证。要使用Kerberos认证,服务器须要一个能够校验 KDC identity 的 Kerberos servtab 。默认值是”no”。
若是使用了 AFS 而且该用户有一个 Kerberos 5 TGT,那么开启该指令后,将会在访问用户的家目录前尝试获取一个 AFS token 。默认为”no”。
若是 Kerberos 密码认证失败,那么该密码还将要经过其它的认证机制(好比 /etc/passwd)。默认值为”yes”。
是否在用户退出登陆后自动销毁用户的 ticket 。默认值是”yes”。
在SSH-1协议下,短命的服务器密钥将以此指令设置的时间为周期(秒),不断从新生成。这个机制能够尽可能减少密钥丢失或者黑客攻击形成的损失。设为 0 表示永不从新生成,默认为 3600(秒)。
指定 sshd(8) 监听的网络地址,默认监听全部地址。可使用下面的格式:
ListenAddress host|IPv4_addr|IPv6_addr
ListenAddress host|IPv4_addr:port
ListenAddress [host|IPv6_addr]:port
若是未指定 port ,那么将使用 Port 指令的值。可使用多个 ListenAddress 指令监听多个地址。
限制用户必须在指定的时限内认证成功,0 表示无限制。默认值是 120 秒。
指定 sshd(8) 的日志等级(详细程度)。可用值以下:QUIET, FATAL, ERROR, INFO(默认), VERBOSE, DEBUG, DEBUG1, DEBUG2, DEBUG3 DEBUG 与 DEBUG1 等价;DEBUG2 和 DEBUG3 则分别指定了更详细、更罗嗦的日志输出。比 DEBUG 更详细的日志可能会泄漏用户的敏感信息,所以反对使用。
指定容许在SSH-2中使用哪些消息摘要算法来进行数据校验。可使用逗号分隔的列表来指定容许使用多个算法。默认值(包含全部可使用的算法)是:hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-sha1-96,hmac-md5-96。
引入一个条件块。块的结尾标志是另外一个 Match 指令或者文件结尾。若是 Match 行上指定的条件都知足,那么随后的指令将覆盖全局配置中的指令。Match 的值是一个或多个”条件-模式”对。可用的”条件”是:User, Group, Host, Address 。只有下列指令能够在 Match 块中使用:AllowTcpForwarding, Banner,ForceCommand, GatewayPorts, GSSApiAuthentication,KbdInteractiveAuthentication, KerberosAuthentication,PasswordAuthentication, PermitOpen, PermitRootLogin,RhostsRSAAuthentication, RSAAuthentication, X11DisplayOffset,X11Forwarding, X11UseLocalHost。
指定每一个链接最大容许的认证次数。默认值是 6 。若是失败认证的次数超过这个数值的一半,链接将被强制断开,且会生成额外的失败日志消息。
最大容许保持多少个未认证的链接。默认值是 10 。到达限制后,将再也不接受新链接,除非先前的链接认证成功或超出 LoginGraceTime 的限制。
是否容许使用基于密码的认证。默认为”yes”。
是否容许密码为空的用户远程登陆。默认为”no”
指定TCP端口转发容许的目的地,可使用空格分隔多个转发目标。默认容许全部转发请求。合法的指令格式以下:
PermitOpen host:port
PermitOpen IPv4_addr:port
PermitOpen [IPv6_addr]:port
“any”能够用于移除全部限制并容许一切转发请求。
是否容许 root 登陆。可用值以下:
“yes”(默认) 表示容许。”no”表示禁止。
“without-password”表示禁止使用密码认证登陆。
“forced-commands-only”表示只有在指定了 command 选项的状况下才容许使用公钥认证登陆。
同时其它认证方法所有被禁止。这个值经常使用于作远程备份之类的事情。
是否容许 tun(4) 设备转发。可用值以下:
“yes”, “point-to-point”(layer 3), “ethernet”(layer 2), “no”(默认)。
“yes”同时蕴含着”point-to-point”和”ethernet”。
指定是否容许 sshd(8) 处理 ~/.ssh/environment 以及 ~/.ssh/authorized_keys 中的 environment= 选项。默认值是”no”。若是设为”yes”可能会致使用户有机会使用某些机制(好比 LD_PRELOAD)绕过访问控制,形成安全漏洞。
指定在哪一个文件中存放SSH守护进程的进程号,默认为 /var/run/sshd.pid 文件。
指定 sshd(8) 守护进程监听的端口号,默认为 22 。可使用多条指令监听多个端口。默认将在本机的全部网络接口上监听,可是能够经过 ListenAddress 指定只在某个特定的接口上监听
指定 sshd(8) 是否在每一次交互式登陆时打印最后一位用户的登陆时间。默认值是”yes”。
指定 sshd(8) 是否在每一次交互式登陆时打印 /etc/motd 文件的内容。默认值是”yes”。
指定 sshd(8) 支持的SSH协议的版本号。’1′和’2′表示仅仅支持SSH-1和SSH-2协议。”2,1″表示同时支持SSH-1和SSH-2协议。
是否容许公钥认证。仅能够用于SSH-2。默认值为”yes”。
是否使用强可信主机认证(经过检查远程主机名和关联的用户名进行认证)。仅用于SSH-1。这是经过在RSA认证成功后再检查 ~/.rhosts 或 /etc/hosts.equiv 进行认证的。出于安全考虑,建议使用默认值”no”。
是否容许使用纯 RSA 公钥认证。仅用于SSH-1。默认值是”yes”。
指定临时服务器密钥的长度。仅用于SSH-1。默认值是 768(位)。最小值是 512 。
指定是否要求 sshd(8) 在接受链接请求前对用户主目录和相关的配置文件进行宿主和权限检查。强烈建议使用默认值”yes”来预防可能出现的低级错误。
配置一个外部子系统(例如,一个文件传输守护进程)。仅用于SSH-2协议。值是一个子系统的名字和对应的命令行(含选项和参数)。好比”sft /bin/sftp-server”。
指定 sshd(8) 将日志消息经过哪一个日志子系统(facility)发送。有效值是:DAEMON, USER, AUTH(默认), LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL。
指定系统是否向客户端发送 TCP keepalive 消息。默认值是”yes”。这种消息能够检测到死链接、链接不当关闭、客户端崩溃等异常。能够设为”no”关闭这个特性。
指定 sshd(8) 是否应该对远程主机名进行反向解析,以检查此主机名是否与其IP地址真实对应。默认值为”yes”。
是否在交互式会话的登陆过程当中使用 login(1) 。默认值是”no”。若是开启此指令,那么 X11Forwarding 将会被禁止,由于 login(1) 不知道如何处理 xauth(1) cookies 。须要注意的是,login(1) 是禁止用于远程执行命令的。
是否让 sshd(8) 经过建立非特权子进程处理接入请求的方法来进行权限分离。默认值是”yes”。认证成功后,将以该认证用户的身份建立另外一个子进程。这样作的目的是为了防止经过有缺陷的子进程提高权限,从而使系统更加安全。
指定 sshd(8) X11 转发的第一个可用的显示区(display)数字。默认值是 10 。这个能够用于防止 sshd 占用了真实的 X11 服务器显示区,从而发生混淆。
是否容许进行 X11 转发。默认值是”no”,设为”yes”表示容许。若是容许X11转发而且sshd(8)代理的显示区被配置为在含有通配符的地址(X11UseLocalhost)上监听。么将可能有额外的信息被泄漏。因为使用X11转发的可能带来的风险,此指令默认值为”no”。须要注意的是,禁止X11转发并不能禁止用户转发X11通讯,由于用户能够安装他们本身的转发器。若是启用了 UseLogin ,那么X11转发将被自动禁止。
sshd(8) 是否应当将X11转发服务器绑定到本地loopback地址。默认值是”yes”。sshd 默认将转发服务器绑定到本地loopback地址并将 DISPLAY 环境变量的主机名部分设为”localhost”。这能够防止远程主机链接到 proxy display 。不过某些老旧的X11客户端不能在此配置下正常工做。为了兼容这些老旧的X11客户端,你能够设为”no”。
指定 xauth(1) 程序的绝对路径。默认值是 /usr/X11R6/bin/xauth。