SSH 协议:安全外壳协议。为 Secure Shell 的缩写。SSH 为建立在应用层和传输层基础上的安全协议。
sshd服务使用SSH协议可以用来进行远程控制,或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议)都是极为不安全的,并且会使用明文传送密码。
OpenSSH软件包,提供了服务端后台程序和客户端工具,用来加密远程控件和文件传输过程中的数据,并由此来代替原来的类似服务。
安装包:
OpenSSH 服务需要4个软件包
[root@xuegod63 Packages]#ls openssh*
openssh-5.3p1-94.el6.x86_64.rpm openssh-clients-5.3p1-94.el6.x86_64.rpm
openssh-askpass-5.3p1-94.el6.x86_64.rpm openssh-server-5.3p1-94.el6.x86_64.rpm
每个软件包的作用:
openssh-5.3p1-94.el6.x86_64.rpm:包含OpenSSH服务器及客户端需要的核心文件
openssh-clients-5.3p1-94.el6.x86_64.rpm:OpenSSH客户端软件包
openssh-server-5.3p1-94.el6.x86_64.rpm:OpenSSH服务器软件包
[root@xuegod63 Packages]#rpm -qpi openssh-5.3p1-94.el6.x86_64.rpm
OpenSSH 配置文件
OpenSSH 常用配置文件有两个/etc/ssh/ssh_config 和 /etc/ssh/sshd_config
ssh_config 为客户端配置文件
sshd_config 为服务器端配置文件
服务启动和关闭
方法1:
[root@xuegod63 ~]#service sshd restart | start | stop | status | reload
方法2:
[root@xuegod63 ~]#/etc/init.d/sshd start | stop | restart | status | reload
开机自动启动服务:
[root@xuegod63 ~]#chkconfig sshd on
[root@xuegod63 ~]#chkconfig --list sshd
sshd 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
[root@xuegod63 ~]#chkconfig sshd off
[root@xuegod63 ~]#chkconfig --list sshd
sshd 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
SSH运程登录:身份验证
(1)口令验证
ssh [远程主机用户名] @[远程服务器主机名或IP地址]
如果用root进程登录远程主机可以省略用户名:
普通用户
[root@xuegod64 ~]#useradd rm
[root@xuegod64 ~]# echo123456 | passwd --stdin rm
更改用户 rm 的密码。
passwd: 所有的身份验证令牌已经成功更新。
[root@xuegod63 ~]# sshrm@192.168.1.64
第一次登录服务器时系统没有保存远程主机的信息,为了确认该主机身份会提示用户是否继续连
接,输入yes 后登录,这时系统会将远程服务器信息写入用户主目录下的$HOME/.ssh/known_hosts 文件中,下次再进行登录时因为保存有该主机信息就不会再提示了
或:
ssh -l [远程主机用户名] [远程服务器主机名或IP 地址]
例:[root@xuegod63~]# ssh -l rm 192.168.1.64
-l login_name
先整体看一下服务器端的配置文件
注:参数前面有#,表示是默认值。 当然#号也表示注释。
/etc/ssh/sshd_config配置文件
Port 22
# SSH 预设使用 22 这个port,也可以使用多个port,即重复使用 port 这个设定项目!
# 例如想要开放 sshd 端口为 22和 222 ,则多加一行内容为:Port 222 即可
# 然后重新启动 sshd 这样就好了。 建议大家修改 port number 为其它端口。防止别人暴力破解。
例:修改sshd服务默认监听的端口为22和222
[root@xuegod63 ~]#netstat -anptu | grep ssh
修改完端口默认端口后,登录方法:
[root@xuegod64 ~]# ssh -p222 192.168.1.63
ListenAddress 0.0.0.0
设置sshd 服务器绑定的IP 地址,0.0.0.0 表示侦听所有地址
例:虚拟机,添加一块网卡。让sshd服务器只在192.168.2.63 网络接口上监听
关机Linux机器,添加一块网卡。
通过setup命令生成配置eth1配置文件。
重启网络
service network restart
ifup eth1
[root@xuegod163 ~]# vim/etc/ssh/sshd_config
改:
15 #ListenAddress 0.0.0.0
为:15 ListenAddress 192.168.2.63
[root@localhost network-scripts]# servicesshd restart
测试:[root@xuegod163 ~]# netstat -anptu | grep22
tcp 0 0 192.168.2.163:22 0.0.0.0:* LISTEN 3024/sshd
tcp 0 64 192.168.1.163:22 192.168.1.3:52978 ESTABLISHED 2459/sshd
[root@xuegod64 ~]# ssh -p222 192.168.1.63
ssh: connect to host192.168.1.63 port 222: Connection refused
rotocol 2
# 选择的 SSH 协议版本,可以是 1 也可以是 2 ,CentOS 5.x 预设是仅支援 V2。 # 如果想要支持旧版 V1 , 改: Protocol 2 为: Protocol 2,1 |
SyslogFacility AUTHPRIV
# 当有人使用 SSH 登入系统的时候,SSH 会记录信息,这个信息要记录的类型为AUTHPRIV。
互动:默认日志存放在哪?
sshd服务日志存放在: /var/log/secure。
例: 为什么sshd配置文件中没有指定日志,但日志却存放在了: /var/log/secure?
[root@xuegod ssh]# vim/etc/rsyslog.conf 查看:
#ServerKeyBits 1024
定义服务器密匙长度
安全设定项
# PermitRootLogin yes |
|
#是否允许 root 登入!预设是允许的,但是建议设定成 no ! |
#PermitEmptyPasswords no
# 若上面那一项如果设定为 yes 的话,这一项就最好设定为 no ,
# 这个项目在是否允许以空的密码登入!当然不许!
#PasswordAuthenticationyes
#是否允许使用密码验证,默认为允许
#LoginGraceTime 2m #grace优雅
# 当使用者连上 SSHserver 之后,会出现输入密码的画面,在该画面中,
# 在多久时间内没有成功连上 SSH server 就强迫断线!若无单位则默认时间为秒!
LoginGraceTime 5
改:LoginGraceTime 2m 为:LoginGraceTime 5 ,重启后
测试:
[root@xuegod64 ~]# ssh 192.168.1.63
停留5秒后,再次输入,结果断开
# PrintMotd yes
# 打印出 /etc/motd 这个文档的内容。
[root@xuegod ~]# cat/etc/motd
[root@xuegod ~]# echo "警告!从现在开始,你所有的操作已经被记录!" > /etc/motd
# PrintLastLog yes
# 显示上次登入的信息!预设也是 yes !
Last login: Wed Mar 2322:12:58 2016 from 192.168.1.100
改:PrintLastLog yes
为:PrintLastLog no
就不显示这个信息
UsePrivilegeSeparation yes # 是否权限较低的程序来提供用户操作。我们知道 sshd 启动在 port 22 , # 因此启动的程序是属于 root 的身份。那么当 student 登入后,这个设定值 |
|
# 会让 sshd 产生一个属于 sutdent 的 sshd 程序来使用,对系统较安全 |
[root@xuegod64 ~]# sshrm@192.168.1.63
这样,当这个进程sshd被缓存区溢出等手段,得到登录的权限后,还是rm普通用户。不会得到root身份。
# UseDNS yes |
|
#一般来说,为了要判断客户端来源是正常合法的,因此会使用 DNS 去反查客户端的主机名 # 不过如果是在内网互连,这项目设定为 no 会让联机速度比较快。 |
改:UseDNS yes
为:UseDNS no
改:GSSAPIAuthentication yes
为:GSSAPIAuthentication no
# PidFile /var/run/sshd.pid
# 可以放置 SSHD 这个 PID 的文档!上述为默认值
描述 sshd(8) 默认从 /etc/ssh/sshd_config 文件(或通过 -f 命令行选项指定的文件)读取配置信息。 配置文件是由"指令 值"对组成的,每行一个。空行和以'#'开头的行都将被忽略。 如果值中含有空白符或者其他特殊符号,那么可以通过在两边加上双引号(")进行界定。 [注意]值是大小写敏感的,但指令是大小写无关的。 当前所有可以使用的配置指令如下: AcceptEnv 指定客户端发送的哪些环境变量将会被传递到会话环境中。[注意]只有SSH-2协议支持环境变量的传递。 细节可以参考 ssh_config(5) 中的 SendEnv 配置指令。 指令的值是空格分隔的变量名列表(其中可以使用'*'和'?'作为通配符)。也可以使用多个 AcceptEnv 达到同样的目的。 需要注意的是,有些环境变量可能会被用于绕过禁止用户使用的环境变量。由于这个原因,该指令应当小心使用。 默认是不传递任何环境变量。 AddressFamily 指定 sshd(8) 应当使用哪种地址族。取值范围是:"any"(默认)、"inet"(仅IPv4)、"inet6"(仅IPv6)。 AllowGroups 这个指令后面跟着一串用空格分隔的组名列表(其中可以使用"*"和"?"通配符)。默认允许所有组登录。 如果使用了这个指令,那么将仅允许这些组中的成员登录,而拒绝其它所有组。 这里的"组"是指"主组"(primary group),也就是/etc/passwd文件中指定的组。 这里只允许使用组的名字而不允许使用GID。相关的 allow/deny 指令按照下列顺序处理: DenyUsers, AllowUsers, DenyGroups, AllowGroups AllowTcpForwarding 是否允许TCP转发,默认值为"yes"。 禁止TCP转发并不能增强安全性,除非禁止了用户对shell的访问,因为用户可以安装他们自己的转发器。 AllowUsers 这个指令后面跟着一串用空格分隔的用户名列表(其中可以使用"*"和"?"通配符)。默认允许所有用户登录。 如果使用了这个指令,那么将仅允许这些用户登录,而拒绝其它所有用户。 如果指定了 USER@HOST 模式的用户,那么 USER 和 HOST 将同时被检查。 这里只允许使用用户的名字而不允许使用UID。相关的 allow/deny 指令按照下列顺序处理: DenyUsers, AllowUsers, DenyGroups, AllowGroups AuthorizedKeysFile 存放该用户可以用来登录的 RSA/DSA 公钥。 该指令中可以使用下列根据连接时的实际情况进行展开的符号: %% 表示'%'、%h 表示用户的主目录、%u 表示该用户的用户名。 经过扩展之后的值必须要么是绝对路径,要么是相对于用户主目录的相对路径。 默认值是".ssh/authorized_keys"。 Banner 将这个指令指定的文件中的内容在用户进行认证前显示给远程用户。 这个特性仅能用于SSH-2,默认什么内容也不显示。"none"表示禁用这个特性。 ChallengeResponseAuthentication 是否允许质疑-应答(challenge-response)认证。默认值是"yes"。 所有 login.conf(5) 中允许的认证方式都被支持。 Ciphers 指定SSH-2允许使用的加密算法。多个算法之间使用逗号分隔。可以使用的算法如下: "aes128-cbc", "aes192-cbc", "aes256-cbc", "aes128-ctr", "aes192-ctr", "aes256-ctr", "3des-cbc", "arcfour128", "arcfour256", "arcfour", "blowfish-cbc", "cast128-cbc" 默认值是可以使用上述所有算法。 ClientAliveCountMax sshd(8) 在未收到任何客户端回应前最多允许发送多少个"alive"消息。默认值是 3 。 到达这个上限后,sshd(8) 将强制断开连接、关闭会话。 需要注意的是,"alive"消息与 TCPKeepAlive 有很大差异。 "alive"消息是通过加密连接发送的,因此不会被欺骗;而 TCPKeepAlive 却是可以被欺骗的。 如果 ClientAliveInterval 被设为 15 并且将 ClientAliveCountMax 保持为默认值, 那么无应答的客户端大约会在45秒后被强制断开。这个指令仅可以用于SSH-2协议。 ClientAliveInterval 设置一个以秒记的时长,如果超过这么长时间没有收到客户端的任何数据, sshd(8) 将通过安全通道向客户端发送一个"alive"消息,并等候应答。 默认值 0 表示不发送"alive"消息。这个选项仅对SSH-2有效。 Compression 是否对通信数据进行加密,还是延迟到认证成功之后再对通信数据加密。 可用值:"yes", "delayed"(默认), "no"。 DenyGroups 这个指令后面跟着一串用空格分隔的组名列表(其中可以使用"*"和"?"通配符)。默认允许所有组登录。 如果使用了这个指令,那么这些组中的成员将被拒绝登录。 这里的"组"是指"主组"(primary group),也就是/etc/passwd文件中指定的组。 这里只允许使用组的名字而不允许使用GID。相关的 allow/deny 指令按照下列顺序处理: DenyUsers, AllowUsers, DenyGroups, AllowGroups DenyUsers 这个指令后面跟着一串用空格分隔的用户名列表(其中可以使用"*"和"?"通配符)。默认允许所有用户登录。 如果使用了这个指令,那么这些用户将被拒绝登录。 如果指定了 USER@HOST 模式的用户,那么 USER 和 HOST 将同时被检查。 这里只允许使用用户的名字而不允许使用UID。相关的 allow/deny 指令按照下列顺序处理: DenyUsers, AllowUsers, DenyGroups, AllowGroups ForceCommand 强制执行这里指定的命令而忽略客户端提供的任何命令。这个命令将使用用户的登录shell执行(shell -c)。 这可以应用于 shell 、命令、子系统的完成,通常用于 Match 块中。 这个命令最初是在客户端通过 SSH_ORIGINAL_COMMAND 环境变量来支持的。 GatewayPorts 是否允许远程主机连接本地的转发端口。默认值是"no"。 sshd(8) 默认将远程端口转发绑定到loopback地址。这样将阻止其它远程主机连接到转发端口。 GatewayPorts 指令可以让 sshd 将远程端口转发绑定到非loopback地址,这样就可以允许远程主机连接了。 "no"表示仅允许本地连接,"yes"表示强制将远程端口转发绑定到统配地址(wildcard address), "clientspecified"表示允许客户端选择将远程端口转发绑定到哪个地址。 GSSAPIAuthentication 是否允许使用基于 GSSAPI 的用户认证。默认值为"no"。仅用于SSH-2。 GSSAPICleanupCredentials 是否在用户退出登录后自动销毁用户凭证缓存。默认值是"yes"。仅用于SSH-2。 HostbasedAuthentication 这个指令与 RhostsRSAAuthentication 类似,但是仅可以用于SSH-2。推荐使用默认值"no"。 推荐使用默认值"no"禁止这种不安全的认证方式。 HostbasedUsesNameFromPacketOnly 在开启 HostbasedAuthentication 的情况下, 指定服务器在使用 ~/.shosts ~/.rhosts /etc/hosts.equiv 进行远程主机名匹配时,是否进行反向域名查询。 "yes"表示 sshd(8) 信任客户端提供的主机名而不进行反向查询。默认值是"no"。 HostKey 主机私钥文件的位置。如果权限不对,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。 IgnoreRhosts 是否在 RhostsRSAAuthentication 或 HostbasedAuthentication 过程中忽略 .rhosts 和 .shosts 文件。 不过 /etc/hosts.equiv 和 /etc/shosts.equiv 仍将被使用。推荐设为默认值"yes"。 IgnoreUserKnownHosts 是否在 RhostsRSAAuthentication 或 HostbasedAuthentication 过程中忽略用户的 ~/.ssh/known_hosts 文件。 默认值是"no"。为了提高安全性,可以设为"yes"。 KerberosAuthentication 是否要求用户为 PasswordAuthentication 提供的密码必须通过 Kerberos KDC 认证,也就是是否使用Kerberos认证。 要使用Kerberos认证,服务器需要一个可以校验 KDC identity 的 Kerberos servtab 。默认值是"no"。 KerberosGetAFSToken 如果使用了 AFS 并且该用户有一个 Kerberos 5 TGT,那么开启该指令后, 将会在访问用户的家目录前尝试获取一个 AFS token 。默认为"no"。 KerberosOrLocalPasswd 如果 Kerberos 密码认证失败,那么该密码还将要通过其它的认证机制(比如 /etc/passwd)。 默认值为"yes"。 KerberosTicketCleanup 是否在用户退出登录后自动销毁用户的 ticket 。默认值是"yes"。 KeyRegenerationInterval 在SSH-1协议下,短命的服务器密钥将以此指令设置的时间为周期(秒),不断重新生成。 这个机制可以尽量减小密钥丢失或者黑客攻击造成的损失。 设为 0 表示永不重新生成,默认为 3600(秒)。 ListenAddress 指定 sshd(8) 监听的网络地址,默认监听所有地址。可以使用下面的格式: ListenAddress host|IPv4_addr|IPv6_addr ListenAddress host|IPv4_addr:port ListenAddress [host|IPv6_addr]:port 如果未指定 port ,那么将使用 Port 指令的值。 可以使用多个 ListenAddress 指令监听多个地址。 LoginGraceTime 限制用户必须在指定的时限内认证成功,0 表示无限制。默认值是 120 秒。 LogLevel 指定 sshd(8) 的日志等级(详细程度)。可用值如下: QUIET, FATAL, ERROR, INFO(默认), VERBOSE, DEBUG, DEBUG1, DEBUG2, DEBUG3 DEBUG 与 DEBUG1 等价;DEBUG2 和 DEBUG3 则分别指定了更详细、更罗嗦的日志输出。 比 DEBUG 更详细的日志可能会泄漏用户的敏感信息,因此反对使用。 MACs 指定允许在SSH-2中使用哪些消息摘要算法来进行数据校验。 可以使用逗号分隔的列表来指定允许使用多个算法。默认值(包含所有可以使用的算法)是: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-sha1-96,hmac-md5-96 Match 引入一个条件块。块的结尾标志是另一个 Match 指令或者文件结尾。 如果 Match 行上指定的条件都满足,那么随后的指令将覆盖全局配置中的指令。 Match 的值是一个或多个"条件-模式"对。可用的"条件"是:User, Group, Host, Address 。 只有下列指令可以在 Match 块中使用:AllowTcpForwarding, Banner, ForceCommand, GatewayPorts, GSSApiAuthentication, KbdInteractiveAuthentication, KerberosAuthentication, PasswordAuthentication, PermitOpen, PermitRootLogin, RhostsRSAAuthentication, RSAAuthentication, X11DisplayOffset, X11Forwarding, X11UseLocalHost MaxAuthTries 指定每个连接最大允许的认证次数。默认值是 6 。 如果失败认证的次数超过这个数值的一半,连接将被强制断开,且会生成额外的失败日志消息。 MaxStartups 最大允许保持多少个未认证的连接。默认值是 10 。 到达限制后,将不再接受新连接,除非先前的连接认证成功或超出 LoginGraceTime 的限制。 PasswordAuthentication 是否允许使用基于密码的认证。默认为"yes"。 PermitEmptyPasswords 是否允许密码为空的用户远程登录。默认为"no"。 PermitOpen 指定TCP端口转发允许的目的地,可以使用空格分隔多个转发目标。默认允许所有转发请求。 合法的指令格式如下: PermitOpen host:port PermitOpen IPv4_addr:port PermitOpen [IPv6_addr]:port "any"可以用于移除所有限制并允许一切转发请求。 PermitRootLogin 是否允许 root 登录。可用值如下: "yes"(默认) 表示允许。"no"表示禁止。 "without-password"表示禁止使用密码认证登录。 "forced-commands-only"表示只有在指定了 command 选项的情况下才允许使用公钥认证登录。 同时其它认证方法全部被禁止。这个值常用于做远程备份之类的事情。 PermitTunnel 是否允许 tun(4) 设备转发。可用值如下: "yes", "point-to-point"(layer 3), "ethernet"(layer 2), "no"(默认)。 "yes"同时蕴含着"point-to-point"和"ethernet"。 PermitUserEnvironment 指定是否允许 sshd(8) 处理 ~/.ssh/environment 以及 ~/.ssh/authorized_keys 中的 environment= 选项。 默认值是"no"。如果设为"yes"可能会导致用户有机会使用某些机制(比如 LD_PRELOAD)绕过访问控制,造成安全漏洞。 PidFile 指定在哪个文件中存放SSH守护进程的进程号,默认为 /var/run/sshd.pid 文件。 Port 指定 sshd(8) 守护进程监听的端口号,默认为 22 。可以使用多条指令监听多个端口。 默认将在本机的所有网络接口上监听,但是可以通过 ListenAddress 指定只在某个特定的接口上监听。 PrintLastLog 指定 sshd(8) 是否在每一次交互式登录时打印最后一位用户的登录时间。默认值是"yes"。 PrintMotd 指定 sshd(8) 是否在每一次交互式登录时打印 /etc/motd 文件的内容。默认值是"yes"。 Protocol 指定 sshd(8) 支持的SSH协议的版本号。 '1'和'2'表示仅仅支持SSH-1和SSH-2协议。"2,1"表示同时支持SSH-1和SSH-2协议。 PubkeyAuthentication 是否允许公钥认证。仅可以用于SSH-2。默认值为"yes"。 RhostsRSAAuthentication 是否使用强可信主机认证(通过检查远程主机名和关联的用户名进行认证)。仅用于SSH-1。 这是通过在RSA认证成功后再检查 ~/.rhosts 或 /etc/hosts.equiv 进行认证的。 出于安全考虑,建议使用默认值"no"。 RSAAuthentication 是否允许使用纯 RSA 公钥认证。仅用于SSH-1。默认值是"yes"。 ServerKeyBits 指定临时服务器密钥的长度。仅用于SSH-1。默认值是 768(位)。最小值是 512 。 StrictModes 指定是否要求 sshd(8) 在接受连接请求前对用户主目录和相关的配置文件进行宿主和权限检查。 强烈建议使用默认值"yes"来预防可能出现的低级错误。 Subsystem 配置一个外部子系统(例如,一个文件传输守护进程)。仅用于SSH-2协议。 值是一个子系统的名字和对应的命令行(含选项和参数)。比如"sft /bin/sftp-server"。 SyslogFacility 指定 sshd(8) 将日志消息通过哪个日志子系统(facility)发送。有效值是: DAEMON, USER, AUTH(默认), LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7 TCPKeepAlive 指定系统是否向客户端发送 TCP keepalive 消息。默认值是"yes"。 这种消息可以检测到死连接、连接不当关闭、客户端崩溃等异常。 可以设为"no"关闭这个特性。 UseDNS 指定 sshd(8) 是否应该对远程主机名进行反向解析,以检查此主机名是否与其IP地址真实对应。默认值为"yes"。 UseLogin 是否在交互式会话的登录过程中使用 login(1) 。默认值是"no"。 如果开启此指令,那么 X11Forwarding 将会被禁止,因为 login(1) 不知道如何处理 xauth(1) cookies 。 需要注意的是,login(1) 是禁止用于远程执行命令的。 如果指定了 UsePrivilegeSeparation ,那么它将在认证完成后被禁用。 UsePrivilegeSeparation 是否让 sshd(8) 通过创建非特权子进程处理接入请求的方法来进行权限分离。默认值是"yes"。 认证成功后,将以该认证用户的身份创建另一个子进程。 这样做的目的是为了防止通过有缺陷的子进程提升权限,从而使系统更加安全。 X11DisplayOffset 指定 sshd(8) X11 转发的第一个可用的显示区(display)数字。默认值是 10 。 这个可以用于防止 sshd 占用了真实的 X11 服务器显示区,从而发生混淆。 X11Forwarding 是否允许进行 X11 转发。默认值是"no",设为"yes"表示允许。 如果允许X11转发并且sshd(8)代理的显示区被配置为在含有通配符的地址(X11UseLocalhost)上监听。 那么将可能有额外的信息被泄漏。由于使用X11转发的可能带来的风险,此指令默认值为"no"。 需要注意的是,禁止X11转发并不能禁止用户转发X11通信,因为用户可以安装他们自己的转发器。 如果启用了 UseLogin ,那么X11转发将被自动禁止。 X11UseLocalhost sshd(8) 是否应当将X11转发服务器绑定到本地loopback地址。默认值是"yes"。 sshd 默认将转发服务器绑定到本地loopback地址并将 DISPLAY 环境变量的主机名部分设为"localhost"。 这可以防止远程主机连接到 proxy display 。不过某些老旧的X11客户端不能在此配置下正常工作。 为了兼容这些老旧的X11客户端,你可以设为"no"。 XAuthLocation 指定 xauth(1) 程序的绝对路径。默认值是 /usr/X11R6/bin/xauth 时间格式 在 sshd(8) 命令行参数和配置文件中使用的时间值可以通过下面的格式指定:time[qualifier] 。 其中的 time 是一个正整数,而 qualifier 可以是下列单位之一: <无> 秒 s | S 秒 m | M 分钟 h | H 小时 d | D 天 w | W 星期 可以通过指定多个数值来累加时间,比如: 1h30m 1 小时 30 分钟 (90 分钟) 文件 /etc/ssh/sshd_config sshd(8) 的主配置文件。这个文件的宿主应当是root,权限最大可以是"644"。 参见 sshd(8) 作者 OpenSSH is a derivative of the original and free ssh 1.2.12 release by Tatu Ylonen. Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos, Theo de Raadt and Dug Song removed many bugs, re-added newer features and cre- ated OpenSSH. Markus Friedl contributed the support for SSH protocol versions 1.5 and 2.0. Niels Provos and Markus Friedl contributed support for privilege separation. OpenBSD 4.2 January 1, 2008 9
Vbird网络篇里的说明:
# 1. 关于 SSH Server 的整体设定,包含使用的 port 啦,以及使用的密码演算方式
# 先留意一下,在预设的文件内,只要是被批注的设定值(#),即为『默认值!』
Port 22
# SSH 预设使用 22 这个 port,也可以使用多个 port,即重复使用 port 这个设定项目! # 例如想要开放 sshd 在 22 与 443 ,则多加一行内容为:
# Port 443
# 这样就好了!不过,不建议修改 port number
rotocol 1,2
# 选择的 SSH 协议版本,可以是 1 也可以是 2 ,
# 如果要同时支持两者,就必须要使用 2,1 这个分隔了(Protocol 1,2)! # 目前我们会建议您,直接使用 Protocol 2 即可!
#ListenAddress 0.0.0.0
# 监听的主机适配卡!举个例子来说,如果您有两个 IP,
# 分别是 192.168.0.100 及 192.168.2.20 ,那么只想要
# 开放 192.168.0.100 时,就可以写如同下面的样式:
ListenAddress 192.168.0.100
# 只监听来自 192.168.0.100 这个 IP 的 SSH 联机。
# 如果不使用设定的话,则预设所有接口均接受 SSH
#PidFile /var/run/sshd.pid
# 可以放置 SSHD 这个 PID 的文件!左列为默认值
LoginGraceTime 2m
# 当使用者连上 SSH server 之后,会出现输入密码的画面,在该画面中,
# 在多久时间内没有成功连上 SSH server ,就断线!若无单位则预设时间为秒!
Compression yes
# 是否可以使用压缩指令?当然可以
# 2. 说明主机的 Private Key 放置的档案,预设使用下面的档案即可!
HostKey /etc/ssh/ssh_host_key # SSH version 1 使用的私钥
HostKey /etc/ssh/ssh_host_rsa_key # SSH version 2 使用的 RSA 私钥
HostKey /etc/ssh/ssh_host_dsa_key # SSH version 2 使用的 DSA 私钥
# 还记得我们在主机的 SSH 联机流程里面谈到的,这里就是 Host Key
# 2.1 关于 version 1 的一些设定!
KeyRegenerationInterval 1h
# 由前面联机的说明可以知道, version 1 会使用 server 的 Public Key ,
# 那么如果这个 Public Key 被偷的话,岂不完蛋?所以需要每隔一段时间
# 来重新建立一次!这里的时间为秒!不过我们通常都仅使用 version 2 ,
# 所以这个设定可以被忽略喔!
ServerKeyBits 768
# 没错!这个就是 Server key 的长度!用默认值即可。
# 3. 关于登录文件的讯息数据放置与 daemon 的名称!
SyslogFacility AUTHPRIV
# 当有人使用 SSH 登入系统的时候,SSH 会记录信息,这个信息要记录在什么 daemon name
# 底下?预设是以 AUTH 来设定的,即是 /var/log/secure 里面!
# 其它可用的 daemon name 为:DAEMON,USER,AUTH,LOCAL0,LOCAL1,LOCAL2,LOCAL3,LOCAL4,LOCAL5,
LogLevel INFO
# 登录记录的等级!注意登机信息可参照vbird基础篇详解。
# 4. 安全设定项目!极重要!
# 4.1 登入设定部分
PermitRootLogin no
# 是否允许 root 登入!预设是允许的,但是建议设定成 no!
UserLogin no
# 在 SSH 底下本来就不接受 login 这个程序的登入!
StrictModes yes
# 当使用者的 host key 改变之后,Server 就不接受联机,可以抵挡部分的木马程序!
RSAAuthentication yes
# 是否使用纯的 RSA 认证!?仅针对 version 1 !
PubkeyAuthentication yes
# 是否允许 Public Key ?当然允许啦!仅针对 version 2
AuthorizedKeysFile .ssh/authorized_keys
# 上面这个在设定若要使用不需要密码登入的账号时,那么那个账号的存放密码所在文件名!
# 这个设定值很重要喔!文件名记一下!
# 4.2 认证部分
RhostsAuthentication no
# 本机系统不使用 .rhosts,因为仅使用 .rhosts 太不安全了,所以这里一定要设定为 no
IgnoreRhosts yes
# 是否取消使用 ~/.ssh/.rhosts 来做为认证!当然是!
RhostsRSAAuthentication no
# 这个选项是专门给 version 1 用的,使用 rhosts 文件在 /etc/hosts.equiv
# 配合 RSA 演算方式来进行认证!不要使用啊!
HostbasedAuthentication no
# 这个项目与上面的项目类似,不过是给 version 2 使用的!
IgnoreUserKnownHosts no
# 是否忽略家目录内的 ~/.ssh/known_hosts 这个文件所记录的主机内容?
# 当然不要忽略,所以这里就是 no 啦!
PasswordAuthentication yes
# 密码验证当然是需要的!所以这里写 yes 啰!
PermitEmptyPasswords no
# 若上面那一项如果设定为 yes 的话,这一项就最好设定为 no
# 这个项目在是否允许以空的密码登入!当然不许!
ChallengeResponseAuthentication no
# 允许任何的密码认证!所以,任何 login.conf 规定的认证方式,均可适用!
# 但目前我们比较喜欢使用 PAM 模块帮忙管理认证,因此这个选项可以设定为 no 喔! UsePAM yes
# 利用 PAM 管理使用者认证有很多好处,可以记录与管理。
# 所以这里我们建议您使用 UsePAM 且 ChallengeResponseAuthentication 设定为 no
# 4.3 与 Kerberos 有关的参数设定!因为我们没有 Kerberos 主机,所以底下不用设定!
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosTgtPassing no# 4.4 底下是有关在 X-Window 底下使用的相关设定!
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
# 4.5 登入后的项目:
PrintMotd no
# 登入后是否显示出一些信息呢?例如上次登入的时间、地点等等,预设是 yes
# 亦即是打印出 /etc/motd 这个档案的内容。但是,如果为了安全,可以考虑改为 no !
PrintLastLog yes
# 显示上次登入的信息!可以啊!预设也是 yes !
KeepAlive yes
# 一般而言,如果设定这项目的话,那么 SSH Server 会传送 KeepAlive 的讯息给
# Client 端,以确保两者的联机正常!在这个情况下,任何一端死掉后,SSH 可以立刻知道!而不会有僵尸程序的发生!
UsePrivilegeSeparation yes
# 使用者的权限设定项目!就设定为 yes 吧!
MaxStartups 10
# 同时允许几个尚未登入的联机画面?当我们连上 SSH ,但是尚未输入密码时,
# 这个时候就是我们所谓的联机画面啦!在这个联机画面中,为了保护主机,
# 所以需要设定最大值,预设最多十个联机画面,而已经建立联机的不计算在这十个当中
# 4.6 关于使用者抵挡的设定项目:
DenyUsers *
# 设定受抵挡的使用者名称,如果是全部的使用者,那就是全部挡吧!
# 若是部分使用者,可以将该账号填入!例如下列!
DenyUsers test
DenyGroups test
# 与 DenyUsers 相同!仅抵挡几个群组而已!
# 5. 关于 SFTP 服务的设定项目!
Subsystem sftp /usr/lib/ssh/sftp-server
在多宿主主机上,使用ListenAddress xxx.xxx.xxx.xxx来限制SSH只监听一个网络接口。
空闲连接时间,IdleTimeout xx 如果是0代表什么都不做,保持连接。否则,超时就断开连
接,可以用s,m,h,d,w表示。
KeepAlive YES/NO 可以断开失效的连接,比如客户端崩溃。
失败的登录
LogingGraceTime 60 限定用户必须在60秒内成功进行认证。 0值表禁用。命令行选项用
-g
PasswordGuesses 5 如果连接请求使用密码认证,那么sshd2就只允许客户端尝试五次。
(SSH2)
限制并发连接
MaxConnections 32 最大32个连接(SSH2)
逆向IP映射
SSH2服务器可以根据客户端地址进行逆向DNS查询,以确保客户端的地址就是这个地址。
如果检查失败,连接拒绝。
RequireReverseMapping yes (ssh2)
转发
AllowTcp-Forwarding yes
X11Forwarding yes
服务器密钥生成
该密钥用来对客户端/服务器之间的通信进行保护。是临时的,永远不会保存在磁盘上。服
务器在启动时生成这个密钥。并以固定的周期重新生成。缺省长度是768位,最小为512,
可以ServerKeyBits 2048 指定长度。用KeyRegenerationInterval 1200指定周期。 命令行选
项:-k
加密算法
Ciphers any 允许所有支持算法。其它算法包括
3des-cbc,blowfish-cbc,twofish-cbc,arcfour,none
mac算法
MAC关键字可以让用户选择sshd2进行完整性检测所使用的算法,称为消息认证代码。用
于sshd2的有hmac-sha1,hmac-md5,hmac-md5-96。
在OPENSSH中,用户可以用Protocol关键字选择支持SSH-1 AND SSH-2,1 代表SSH-1,2 代
表SSH-2, 1,2 代表都支持。
允许用户登录:认证和访问控制
1、认证负责对发起连接请求的用户的身份进行验证。
密码认证
PasswordAuthentication yes AllowedAuthentications password (ssh2)
公钥认证
RSAAuthentication yes (ssh1,openssh/1)
AllowedAuthentications publickey (ssh2)
DEAAuthentication yes (openssh/2)
Rhosts认证,可信主机认证通过检查远程主机名和相关用户名来实现对客户端的身份认证。
RhostsAuthentication yes (ssh1,openssh)
IgnoreRhosts yes (ssh1,ssh2,openssh)不使用系统的hosts.equiv and ~/.rhosts,使用SSH专用
的/etc/shosts.equiv and ~/.shosts
强可信主机认证。
RhostsRSAAuthentication yes ssh1,openssh
AllowedAuthentications hostbased ssh2
提取已知名主机的公钥
UserKnownHosts no ssh2
IgnoreUserKnownHosts yes openssh
PGP认证
Kerberos认证
S/key认证
SecurID认证
PAM认证
2、访问控制负责允许或禁止来自特定用户、机器在或INTERNET域的SSH连接到服务器
上。
通常,只要设置正确,任何账号都可以接收SSH连接,这种访问权限可以使用服务器关键
字AllowUsers and DenyUsers覆盖。
AllowUsers smith
如果配置文件中单独出现一个AllowUsers,后面没有任何内容,就表示禁止所有没提到的用
户连接,如果没有AllowUsers这个关键字,则所有用户都可连接。DenyUsers表示禁止连接。
可用通配符,
可以用组访问控制AllowGroups DenyGroups
主机名访问控制
AllowHosts hostname
DenyHosts hostname
超级用户的访问控制
sshd对超级用户专门使用一种特殊的访问机制,PermiRootLogin来允许或禁止使用SSH来
访问root账号。
显示用户的欢迎信息
PrintMotd yes/no default is yes
显示邮件信息
CheckMail yes/no default is yes
空密码
PermitEmptyPasswords yes/no 如果使用密码认证,并且有个账号没有设定密码,那么服务
器就可以拒绝访问这个账号
如果系统中存在/etc/nologin,那么sshd就只允许root用户登录,其它都不能登录。因此,touch
/etc/nologin是把访问权只授给系统管理员的一种快速方法。这样并不需要重新配置ssh。也
不需要重启ssh。
子系统
定义和调用远程命令的一个抽象层,用户可以通过在客户端命令行中给出命令来调用远程命
令,如:ssh server.examply.com /bin/tar c /home 这个命令调用tar,远程把/home拷贝到磁带上。
子系统是服务器机器上预定义的一组远程命令,这样就可以方便地执行。在服务器配置文档
中定义:subsystem backups /bin/tar c /home,要在服务器上运行该命令,可以使用 -s 选项。
ssh -s backups server.example.com。缺省情况下,sshd_config中定义了一个子系统,subsystem
sftp 。不要删除这个子系统,这是scp2和sftp必须的。
日志
Fascisl Logging mode 把调试信息打印到系统日志文件中,可以使用FascistLogging关键字
启用。
调试模式 可以使用-d命令选项启用
安静模式 只能输出严重错误,而不能输出 普通日志,可以使用QuietMode关键字或-q
命令行启用。
openssh中的日志配置关键字是SyslogFacility and LogLevel。SyslogFacility设置syslog的
facility(KERN,DAEMON,USER,AUTH,MAIL等),LogLevel记录日志提供的详细程度,该
值从低到高顺序是:QUIET,FATAL,ERROR,INFO,VERBOSE,DEBUG,使用DEBUG会侵犯用
户的隐私权,这个级别只能用于诊断,而不能用于普通操作。
服务器范围配置
1、禁用其它访问方式。
关掉r-命令,方法如下:删除/etc/hosts.equiv文件,或改为只读空文件。禁用rshd,rlogind and
rexecd,通过修改inetd.conf文件。
2、/etc/sshd_config配置
HostKey /etc/ssh_host_key
PidFile /etc/sshd.pid
RandomSeed /etc/ssh_random_seed
StrictModes yes 要求用户保护其与SSH有关的文件及目录
Umask 0077 保证所有SSHD1创建是文件和目录都只能由其所有者(SSHD 运行的
UID)读取
port 22
ListenAddress 0.0.0.0
IdleTimeout 15m 15分钟空闲超时
KeepAlive yes 客户机死机时连接将会终止,而不会长期挂起。
LoginGraceTime 30 登录时成功认证的时限为30秒。
ServerKeyBits 768 服务器密钥长度
KeyRegenerationInterval 3600 服务器密钥一小时重新生成一次
PasswordAuthentication no 禁用密码认证
RhostsAuthentication no 禁用可信主机认证
RhostsRSAAuthentication no 禁用增强可信主机认证
RSAAuthentication yes 启用公钥认证
IgnoreRhosts yes 完全禁止SSHD使用.rhosts文件
IgnoreRootRhosts yes
UseLogin no 禁用UseLogin,防止万一使用了其它登录程序
AllowHosts xxx 根据需要设置
SilentDeny yes 任何被DenyHosts拒绝的连接都不会向用户返回消息,不必告诉攻击
者发生了什么,可以增加了排错的难度。
PermitRootLogin nopwd 允许超级用户通过SSH连接,但不能用密码认证
FascistLogging no 禁用FascistLogging日志方式,因为它会在日志中记录用户特定信息,对
攻击者有用。
QuietMode no 禁用QuietMode日志方式,使用日志更详细,敏感度更低
AllowTcpForwarding yes 允许tcp端口转发和X转发,保护其它的tcp连接
X11Forwarding yes
3、/etc/ssh2/sshd2_config配置
HostKeyFile /etc/ssh2/hostkey
PublicHostKeyFile /etc/ssh2/hostkey.pub
RandmoSeedFile /etc/ssh2/random_seed
UserConfigDirectory
IdentityFile
AuthorizstionFile
StrictModes yes
port 22
listenAddress 0.0.0.0
KeepAlive yes
RequireReverseMapping no
LoginGraceTime 30
由于sshd2没有设置服务器密钥的位数的关键字,用户得在启动时使用 -b 选项 $ sshd2 -b
1024 ....
AllowedAuthentications publickey
RequiredAuthentications publickey
IgnoreRhosts yes
UserKnownHosts no 禁用该项可防止用户给未知主机提供信任权限。
PermitRootLogin nopwd
Ciphers any 不能选none
QuietMode no
VerboseMode yes
Ssh1Compatibility no 禁用SSH-1兼容模式
#Ssh1Path /usr/local/ssh1/sshd1 出于实用原因,也可以启用此模式,之前要指明ssh1服
务器可执行文件位置
4、每账号配置
对于SSH1 AND OPENSSH,~/.ssh/authorized_keys中的每一个密钥都必须用适当的选项进
行限制,from选项限制只能从特定的主机访问特定的密钥。例如,假设文件中包含你家那
台pc(myhome.isp.net)的公钥,而其它机器根本不可能用那个密钥来认证,我们就可以明确
限定这一关系:from = "myhome.isp.net" ...key...。还要对适当的密钥设置空闲超时时间:from
= "myhome.isp.net" ,idle-timeout=5m ...key...。
最后,考虑每一个密钥是否需要对到达的连接使用端口转发,代理转发以及分配tty等,如
果不需要,就可以分别用no-port-forwarding,no-agent-forwarding and no-pty禁用这些特性。
5、密钥管理
至少创建1024位长的用户密钥,并用好的口令对密钥进行保护。
6、客户端配置
离开正在运行的ssh客户端时,一定要用密码保护。
在客户端配置文件中启用某些安全功能,并将其设置为最强
Host *
FallBackToRsh no 禁止使用不安全的r-命令(ssh2)没有这个问题。
UseRsh no
GatewayPorts no 禁止远程客户端连接本地的转发端口
StrictHostKeyChecking ask 在主机密钥发生变化时提醒你。请求你的处理意见。
配置“/etc/ssh/ssh_config”文件
“/etc/ssh/ssh_config”文件是OpenSSH系统范围的配置文件,允许你通过设置不同的选项
来改变客户端程序的运行方式。这个文件的每一行包含“关键词-值”的匹配,其中“关键
词”是忽略大小写的。下面列出来的是最重要的关键词,用man命令查看帮助页(ssh (1))
可以得到详细的列表。
编辑“ssh_config”文件(vi /etc/ssh/ssh_config),添加或改变下面的参数:
# Site-wide defaults for various options
Host *
ForwardAgent no
ForwardX11 no
RhostsAuthentication no
RhostsRSAAuthentication no
RSAAuthentication yes
PasswordAuthentication yes
FallBackToRsh no
UseRsh no
BatchMode no
CheckHostIP yes
StrictHostKeyChecking no
IdentityFile ~/.ssh/identity
Port 22
Cipher blowfish
EscapeChar ~
下面逐行说明上面的选项设置:
Host *
选项“Host”只对能够匹配后面字串的计算机有效。“*”表示所有的计算机。
ForwardAgent no
“ForwardAgent”设置连接是否经过验证代理(如果存在)转发给远程计算机。
ForwardX11 no
“ForwardX11”设置X11连接是否被自动重定向到安全的通道和显示集(DISPLAY set)。
RhostsAuthentication no
“RhostsAuthentication”设置是否使用基于rhosts的安全验证。
RhostsRSAAuthentication no
“RhostsRSAAuthentication”设置是否使用用RSA算法的基于rhosts的安全验证。
RSAAuthentication yes
“RSAAuthentication”设置是否使用RSA算法进行安全验证。
PasswordAuthentication yes
“PasswordAuthentication”设置是否使用口令验证。
FallBackToRsh no
“FallBackToRsh”设置如果用ssh连接出现错误是否自动使用rsh。
UseRsh no
“UseRsh”设置是否在这台计算机上使用“rlogin/rsh”。
BatchMode no
“BatchMode”如果设为“yes”,passphrase/password(交互式输入口令)的提示将被禁止。
当不能交互式输入口令的时候,这个选项对脚本文件和批处理任务十分有用。
CheckHostIP yes
“CheckHostIP”设置ssh是否查看连接到服务器的主机的IP地址以防止DNS欺骗。建议设
置为“yes”。
StrictHostKeyChecking no
“StrictHostKeyChecking”如果设置成“yes”,ssh就不会自动把计算机的密匙加入
“$HOME/.ssh/known_hosts”文件,并且一旦计算机的密匙发生了变化,就拒绝连接。
IdentityFile ~/.ssh/identity
“IdentityFile”设置从哪个文件读取用户的RSA安全验证标识。
Port 22
“Port”设置连接到远程主机的端口。
Cipher blowfish
“Cipher”设置加密用的密码。
EscapeChar ~
“EscapeChar”设置escape字符。
配置“/etc/ssh/sshd_config”文件
“/etc/ssh/sshd_config”是OpenSSH的配置文件,允许设置选项改变这个daemon的运行。
这个文件的每一行包含“关键词-值”的匹配,其中“关键词”是忽略大小写的。下面列出
来的是最重要的关键词,用man命令查看帮助页(sshd (8))可以得到详细的列表。
编辑“sshd_config”文件(vi /etc/ssh/sshd_config),加入或改变下面的参数:
# This is ssh server systemwide configuration file.
Port 22
ListenAddress 192.168.1.1
HostKey /etc/ssh/ssh_host_key
ServerKeyBits 1024
LoginGraceTime 600
KeyRegenerationInterval 3600
PermitRootLogin no
IgnoreRhosts yes
IgnoreUserKnownHosts yes
StrictModes yes
X11Forwarding no
PrintMotd yes
SyslogFacility AUTH
LogLevel INFO
RhostsAuthentication no
RhostsRSAAuthentication no
RSAAuthentication yes
PasswordAuthentication yes
PermitEmptyPasswords no
AllowUsers admin
下面逐行说明上面的选项设置:
Port 22
“Port”设置sshd监听的端口号。
ListenAddress 192.168.1.1
“ListenAddress”设置sshd服务器绑定的IP地址。
HostKey /etc/ssh/ssh_host_key
“HostKey”设置包含计算机私人密匙的文件。
ServerKeyBits 1024
“ServerKeyBits”定义服务器密匙的位数。
LoginGraceTime 600
“LoginGraceTime”设置如果用户不能成功登录,在切断连接之前服务器需要等待的时间(以
秒为单位)。
KeyRegenerationInterval 3600
“KeyRegenerationInterval”设置在多少秒之后自动重新生成服务器的密匙(如果使用密匙)。
重新生成密匙是为了防止用盗用的密匙解密被截获的信息。
PermitRootLogin no
“PermitRootLogin”设置root能不能用ssh登录。这个选项一定不要设成“yes”。
IgnoreRhosts yes
“IgnoreRhosts”设置验证的时候是否使用“rhosts”和“shosts”文件。
IgnoreUserKnownHosts yes
“IgnoreUserKnownHosts”设置ssh daemon是否在进行RhostsRSAAuthentication安全验证
的时候忽略用户的“$HOME/.ssh/known_hosts”
StrictModes yes
“StrictModes”设置ssh在接收登录请求之前是否检查用户家目录和rhosts文件的权限和所
有权。这通常是必要的,因为新手经常会把自己的目录和文件设成任何人都有写权限。
X11Forwarding no
“X11Forwarding”设置是否允许X11转发。
PrintMotd yes
“PrintMotd”设置sshd是否在用户登录的时候显示“/etc/motd”中的信息。
SyslogFacility AUTH
“SyslogFacility”设置在记录来自sshd的消息的时候,是否给出“facility code”。
LogLevel INFO
“LogLevel”设置记录sshd日志消息的层次。INFO是一个好的选择。查看sshd的man帮
助页,已获取更多的信息。
RhostsAuthentication no
“RhostsAuthentication”设置只用rhosts或“/etc/hosts.equiv”进行安全验证是否已经足够了。
RhostsRSAAuthentication no
“RhostsRSA”设置是否允许用rhosts或“/etc/hosts.equiv”加上RSA进行安全验证。
RSAAuthentication yes
“RSAAuthentication”设置是否允许只有RSA安全验证。
PasswordAuthentication yes
“PasswordAuthentication”设置是否允许口令验证。
PermitEmptyPasswords no
“PermitEmptyPasswords”设置是否允许用口令为空的帐号登录。
AllowUsers admin
“AllowUsers”的后面可以跟着任意的数量的用户名的匹配串(patterns)或user@host这样
的匹配串,这些字符串用空格隔开。主机名可以是DNS名或IP地址。