目录
SSH 登入认证:
1、基于公钥的认证:
使用非对称加密秘钥对传输认证信息摘要
鉴权方式:RSAAuthentication 是否允许使用纯 RSA 公钥认证。仅用于SSH-1。默认值是"yes"。
PubkeyAuthentication是否允许公钥认证。仅可以用于SSH-2。默认值为"yes"
服务端:使用公钥 加密随机数+session key#Digest2 得到Digest1 ,哈希解密对比一样鉴权通过
客户端:使用私钥 解密随机数+session key# Digest1 发服务端。
结论:只要客户端秘钥对没有变化,服务端anthorized_key没有变化,主机就能连接。
2、基于口令的认证:
使用非对称加密秘钥对传输密码
鉴权方式:PasswordAuthentication yes
查看ssh 登入信息:
w [选项] #显示登陆系统的用户列表,并显示用户执行的指令,读取/var/run/utmp文件。
-i #显示地址,此为预设值
-h #不显示各栏位的标题信息列
-s #使用简洁格式列表
-f #显示FROM项,也就是远程主机名
last #显示用户最近登录信息读取/var/run/wtmp文件
last -10 #显示最近10条
lastb #登陆失败信息列表,读取/var/run/btmp文件
lastb -10 #显示最近10条
sshd 服务配置详解:
#####SSH Server 的整体设定############
Port 22 #port用来设置sshd监听的端口
ListenAddress 0.0.0.0 #监听的主机IP地址
Protocol 2 #设置协议版本为SSH1或SSH2,SSH1存在漏洞与缺陷,选择SSH2
#HostKey /etc/ssh/ssh_host_key #设置SSHversion 1使用的私钥
#HostKey /etc/ssh/ssh_host_rsa_key #设置SSHversion 2 使用的 RSA 私钥
#HostKey /etc/ssh/ssh_host_dsa_key #设置SSHversion 2 使用的 DSA 私钥
#KeyRegenerationInterval 1h #秘钥再生的间隔时间
#ServerKeyBits 1024 #服务器秘钥位
#LogLevel INFO #LogLevel用来设定sshd日志消息的级别
#############安全认证方面的设定##################
#Authentication #限制用户必须在指定的时限内认证成功,0表示无限制。默认值120 秒。
#LoginGraceTime 2m #LoginGraceTime用来设定如果用户登录失败,在切断连接前服务器需要等待的时间,单位为妙
#PermitRootLogin yes #PermitRootLogin用来设置能不能直接以超级用户ssh登录,root远程登录Linux很危险,建议注销或设置为no
#StrictModes yes #StrictModes用来设置ssh在接收登录请求之前是否检查用户根目录和rhosts文件的权限和所有权,建议开启
#MaxAuthTries 6 #只允许输错几次密码
#MaxSessions 1000 # MaxStartups 默认设置是 10:30:60,意思是从第10个连接开始以30%的概率(递增)拒绝新连接,直到连接数达到60为止,建议大于等于1000。
#RSAAuthentication yes #RSAAuthentication用来设置是否开启RSA密钥验证,只针对SSH1
#PubkeyAuthentication yes #PubkeyAuthentication用来设置是否开启公钥验证,如果使用公钥验证的方式登录时,则设置为yes
#AuthorizedKeysFile .ssh/authorized_keys #AuthorizedKeysFile用来设置公钥验证文件的路径,与PubkeyAuthentication配合使用,默认值是".ssh/authorized_keys"。
#RhostsRSAAuthentication no #是否使用强可信主机认证(通过检查远程主机名和关联的用户名进行认证)。仅用于SSH-1。这是通过在RSA认证成功后再检查 ~/.rhosts 或 /etc/hosts.equiv进行认证的。出于安全考虑,建议使用默认值"no"。
#HostbasedAuthentication no #这个指令与 RhostsRSAAuthentication 类似,但是仅可以用于SSH-2。
#IgnoreUserKnownHosts no #IgnoreUserKnownHosts用来设置ssh在进行RhostsRSAAuthentication安全验证时是否忽略用户的“/$HOME/.ssh/known_hosts”文件
#IgnoreRhosts yes #IgnoreRhosts用来设置验证的时候是否使用“~/.rhosts”和“~/.shosts”文件
#PasswordAuthentication yes #PasswordAuthentication用来设置是否开启密码验证机制,如果用密码登录系统,则设置yes
#PermitEmptyPasswords no #PermitEmptyPasswords用来设置是否允许用口令为空的账号登录系统,设置no
PasswordAuthentication yes #是否开启挑战响应身份验证
#ChallengeResponseAuthentication no #是否允许质疑-应答(challenge-response)认证
#KerberosAuthentication no #是否要求用户为PasswdAuthentication提供的密码必须通过Kerberos KDC认证,要使用Kerberos认证,服务器必须提供一个可以校验KDC identity的Kerberos servtab。默认值为no
#KerberosOrLocalPasswd yes #如果Kerberos密码认证失败,那么该密码还将要通过其他的的认证机制,如/etc/passwd
#KerberosTicketCleanup yes #设置是否在用户退出登录是自动销毁用户的ticket
#KerberosGetAFSToken no #如果使用AFS并且该用户有一个Kerberos 5TGT,那么开启该指令后,将会在访问用户的家目录前尝试获取一个AFS token,并尝试传送 AFS token 给Server 端,默认为no
#KerberosUseKuserok yes
#GSSAPIAuthentication no #GSSAPIAuthentication 指定是否允许基于GSSAPI的用户认证,默认为no
#GSSAPICleanupCredentials yes #设置是否在用户退出登录是自动销毁用户的凭证缓存
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no
UsePAM yes #设置是否通过PAM验证
#AllowTcpForwarding yes #设置是否允许允许tcp端口转发,保护其他的tcp连接
#GatewayPorts no 设置是否允许远程客户端使用本地主机的端口转发功能,出于安全考虑,建议禁止
#X11Forwarding no X11转发允许在SSH客户端上显示应用程序的图形部分,而逻辑程序依然在远程服务器上执行
#X11UseLocalhost yes
####登陆后的相关设定##############
#PrintMotd yes #设置sshd是否在用户登录时显示“/etc/motd”中的信息,可以选在在“/etc/motd”中加入警告的信息
#PrintLastLog yes #是否显示上次用户登录信息
#TCPKeepAlive yes #是否持续发送tcp包,维持连接,设置yes可以防止死连接
#UseLogin no #设置是否使用ssh服务端的login程序进行登录验证。默认值是"no"。
#UsePrivilegeSeparation yes #设置使用者的权限
#UsePrivilegeSeparation #服务端通过创建非特权子进程处理接入请求的方法来进行权限分离
#PermitUserEnvironment no
#Compression delayed #连接超时断开连接:
#ClientAliveInterval 0 #设置一个以秒记得时长,如果超时这么长时间,没有收到客户端的任何数据,sshd将通过安全通道向客户端发送一个“alive”消息,并等候回答
#ClientAliveCountMax 3 #sshd在未收到任何客户端回应前最多允许发送多少个alive消息,到达这个上限后,sshd将强制断开连接,关闭会话
#ShowPatchLevel no #在连接ssh端口时,是否返回ssh的补丁版本信息
#UseDNS yes #是否使对远程主机名进行dns反向解析,以检查此主机名是否与其IP地址真实对应。
#PidFile /var/run/sshd.pid #pid文件存放位置
#PermitTunnel no #是否允许隧道
#Banner none #登录之前显示在用户屏幕上,后面跟着文件位置
###################SFTP 服务设定####################
# 创建根目录
#root@tianshl:~# mkdir /sftp
# 设置属主及权限
#root@tianshl:~# chown root:root /sftp
#root@tianshl:~# chmod 755 /sftp
# 创建用户组
#root@tianshl:~# groupadd sftp
# 注释掉
# Subsystem sftp /usr/lib/openssh/sftp-server
# 使用系统默认的sftp服务
Subsystem sftp internal-sftp
# 匹配组名 sftp
Match Group sftp
# 指定活动目录
ChrootDirectory /sftp/%u
# 由ChrootDirectory指定的目录开始一直往上到系统根目录的目录属主都是root.
# 由ChrootDirectory指定的目录开始一直往上到系统根目录都不可以具有群组写入权限.
# 禁用端口转发
AllowTcpForwarding no
X11Forwarding no
# 强制执行内部SFTP,并忽略任何~/.ssh/rc中的命令
ForceCommand internal-sftp
#######访问控制############
#AllowUsers<用户名1> <用户名2> <用户名3> ... #指定允许通过远程访问的用户,多个用户以空格隔开
#AllowGroups<组名1> <组名2> <组名3> ... #指定允许通过远程访问的组,多个组以空格隔开。当多个用户需要通过ssh登录系统时,可将所有用户加入一个组中。
#DenyUsers<用户名1> <用户名2> <用户名3> ... #指定禁止通过远程访问的用户,多个用户以空格隔开
#DenyGroups<组名1> <组名2> <组名3> ... #指定禁止通过远程访问的组,多个组以空格隔开。
SSH应用服务案例
案例1:ssh连接数超过限制
1、查看 /etc/pam.d/sshd配置,如下配置是否配置:
#session required pam_limits.so
2、查看/etc/security/limits.conf中maxlogins配置的值是多少:
#@student - maxlogins 512
3、查看/etc/ssh/sshd_config中MaxStartups的值:
#MaxSessions 1000 # MaxStartups 默认设置是 10:30:60,意思是从第10个连接开始以30%的概率(递增)拒绝新连接,直到连接数达到60为止,建议大于等于1000。
案例2:主机sshd互信配置
1.在客户端生成密钥对
[root@localhost ~]# ssh-keygen -t rsa <## 建立密钥对,-t代表类型,有RSA和DSA两种
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): <##密钥文件默认存放位置,按Enter即可
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): <## 输入密钥锁码,或直接按 Enter 留空
Enter same passphrase again: <## 再输入一遍密钥锁码
Your identification has been saved in /root/.ssh/id_rsa. <## 生成的私钥
Your public key has been saved in /root/.ssh/id_rsa.pub. <## 生成的公钥
The key fingerprint is:
SHA256:K1qy928tkk1FUuzQtlZK+poeS67vIgPvHw9lQ+KNuZ4 root@localhost.localdomain
密钥锁码在使用私钥时必须输入,这样就可以保护私钥不被盗用。当然,也可以留空,实现无密码登录,这里密钥锁码设置为空。完成上述步骤后,在 root 用户的家目录中生成了一个 .ssh 的隐藏目录,内含两个密钥文件,其中id_rsa 为私钥,id_rsa.pub 为公钥。
2.把公钥传输至远程服务器
这里的远程服务器是172.16.8.11
[root@localhost ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.8.11
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '172.16.8.11 (172.16.8.11)' can't be established.
ECDSA key fingerprint is SHA256:IpS8Vw0F/Yxece36yQ9KhoIuxHFjSi/Ect/WHGxw//k.
ECDSA key fingerprint is MD5:03:85:10:9a:21:75:d6:f1:7a:6e:fd:a8:08:c5:ef:59.
Are you sure you want to continue connecting (yes/no)? yes <## 是否继续连接,回答为yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@172.16.8.11's password: <##输入远程主机的密码
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@172.16.8.11'"
and check to make sure that only the key(s) you wanted were added.
123456789101112131415
3.测试
[root@localhost ~]# ssh 172.16.8.11