linux Ssh配置文件和密钥文件分析

ssh由客户端和服务端共同组成,主配置文件是:/etc/ssh/sshd_config

禁止超级用户直接进行远程登录,可以将SSH服务的主配置文件中的参数“PermitRootLogin”开启并设置其值为“no”(若值为“without-password”,则表示root用户不能使用密码登录,但可以使用密钥对登录)并重启服务;如果需要禁止使用密码登录,则需要将主配置文件中的参数“PasswordAuthentication”的值修改为“no”并重启服务。除了上述最常用的两个设置,如修改SSH服务端口、长连接保活等,也同样可以通过修改主配置文件完成。
# grep "^PermitRootLogin"/etc/ssh/sshd_config

PermitRootLogin no
# grep"^PasswordAuthentication" /etc/ssh/sshd_config

PasswordAuthentication no
 # systemctl restart sshd.service

Port 22  #设置ssh监听的端口号,默认22端口
ListenAddress ::
ListenAddress 0.0.0.0
 #指定监听的地址,默认监听所有;
Protocol 2,1   #指定支持的SSH协议的版本号。'1'和'2'表示仅仅支持SSH-1和SSH-2协议。
#"2,1"表示同时支持SSH-1和SSH-2协议。#
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key    #HostKey是主机私钥文件的存放位置; 
#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。
UsePrivilegeSeparation yes     #是否通过创建非特权子进程处理接入请求的方法来进行权
#限分 离。默认值是"yes"。 认证成功后,将以该认证用户的身份创另一个子进程。这样做的目的是
#为了防止通过有缺陷的子进程提升权限,从而使系统更加安全。
KeyRegenerationInterval 3600   #在SSH-1协议下,短命的服务器密钥将以此指令设置的时
#间为周期(秒),不断重新生成;这个机制可以尽量减小密钥丢失或者黑客攻击造成的损失。设为 0 
#表示永不重新生成为 3600(秒)。
ServerKeyBits 1024    #指定服务器密钥的位数
SyslogFacility AUTH   #指定 将日志消息通过哪个日志子系统(facility)发送。有效值是:
#DAEMON, USER, AUTH(默认), LOCAL0, LOCAL1, LOCAL2, LOCAL3,LOCAL4, LOCAL5, 
#LOCAL6, LOCAL7
LogLevel INFO     #指定日志等级(详细程度)。可用值如下:QUIET, FATAL, ERROR, INFO
#(默认), VERBOSE, DEBUG, DEBUG1, DEBUG2, DEBUG3,DEBUG 与 DEBUG1 等价;DEBUG2
# 和 DEBUG3 则分别指定了更详细、更罗嗦的日志输出。比 DEBUG 更详细的日志可能会泄漏用户
# 的敏感信息,因此反对使用。
LoginGraceTime 120  #限制用户必须在指定的时限(单位秒)内认证成功,0 表示无限制。默认
#值是 120 秒;如果用户不能成功登录,在用户切断连接之前服务器需要等待120秒。
PermitRootLogin yes  #是否允许 root 登录。可用值如下:"yes"(默认) 表示允许。
#"no"表示禁止。"without-password"表示禁止使用密码认证登录。"forced-commands-only"
#表示只有在指定了 command 选项的情况下才允许使用公钥认证登录,同时其它认证方法全部被禁止。
#这个值常用于做远程备份之类的事情。
StrictModes yes       #指定是否要求 sshd(8) 在接受连接请求前对用户主目录和相关的配
#置文件 进行宿主和权限检查。强烈建议使用默认值"yes"来预防可能出现的低级错误。
RSAAuthentication yes  #是否允许使用纯 RSA 公钥认证。仅用于SSH-1。默认值是"yes"。
PubkeyAuthentication yes  #是否允许公钥认证。仅可以用于SSH-2。默认值为"yes"。
IgnoreRhosts yes    #是否取消使用 ~/.ssh/.rhosts 来做为认证。推荐设为yes。
RhostsRSAAuthentication no  #这个选项是专门给 version 1 用的,使用 rhosts 档案在                  
#/etc/hosts.equiv配合 RSA 演算方式来进行认证!推荐no。
HostbasedAuthentication no    #这个与上面的项目类似,不过是给 version 2 使用的
IgnoreUserKnownHosts no          #是否在 RhostsRSAAuthentication 或 
#HostbasedAuthentication 过程中忽略用户的 ~/.ssh/known_hosts 文件。默认值是"no"。
#为了提高安全性,可以设为"yes"。
PermitEmptyPasswords no         #是否允许密码为空的用户远程登录。默认为"no"。
ChallengeResponseAuthentication no   #是否允许质疑-应答(challenge-response)认         
#证。默认值是"yes",所有 login.conf中允许的认证方式都被支持。
PasswordAuthentication yes      # 是否允许使用基于密码的认证。默认为"yes"。
KerberosAuthentication no    #是否要求用户为 PasswordAuthentication 提供的密码
#必须通 过 Kerberos KDC 认证,也就是是否使用Kerberos认证。使用Kerberos认证,服务器
#需要一个可以校验 KDC identity 的 Kerberos servtab 。默认值是"no"。
KerberosGetAFSToken no       #如果使用了 AFS 并且该用户有一个 Kerberos 5 TGT,
#那么开   启该指令后,将会在访问用户的家目录前尝试获取一个 AFS  token 。默认为"no"。
KerberosOrLocalPasswd yes   #如果 Kerberos 密码认证失败,那么该密码还将要通过其它
#的 认证机制(比如 /etc/passwd)。默认值为"yes"。
KerberosTicketCleanup yes    #是否在用户退出登录后自动销毁用户的 ticket 。默认
#"yes"。
GSSAPIAuthentication no      #是否允许使用基于 GSSAPI 的用户认证。默认值为"no"。
#仅用 于SSH-2。
GSSAPICleanupCredentials yes   #是否在用户退出登录后自动销毁用户凭证缓存。默认值      
#是"yes"。仅用于SSH-2。
X11Forwarding no    #是否允许进行 X11 转发。默认值是"no",设为"yes"表示允许。如果
#允许X11转发并且sshd代理的显示区被配置为在含有通配符的地址(X11UseLocalhost)上监听。
#那么将可能有额外的信息被泄漏。由于使用X11转发的可能带来的风险,此指令默认值为"no"。需
#要注意的是,禁止X11转发并不能禁止用户转发X11通信,因为用户可以安装他们自己的转发器。
#如果启用了 UseLogin ,那么X11转发将被自动禁止。
X11DisplayOffset 10    #指定X11 转发的第一个可用的显示区(display)数字。默认值                   
#是 10 。这个可以用于防止 sshd 占用了真实的 X11 服务器显示区,从而发生混淆。
PrintMotd no                #登入后是否显示出一些信息呢?例如上次登入的时间、地点等
#等,预设是 yes ,但是,如果为了安全,可以考虑改为 no !
PrintLastLog yes           #指定是否显示最后一位用户的登录时间。默认值是"yes"
TCPKeepAlive yes       #指定系统是否向客户端发送 TCP keepalive 消息。默认值是"yes"
#。这种消息可以检测到死连接、连接不当关闭、客户端崩溃等异常。可以设为"no"关闭这个特性。
UseLogin no               #是否在交互式会话的登录过程中使用 login。默认值是"no"。
#如果开启此指令,那么 X11Forwarding 将会被禁止,因为 login 不知道如何处理 xauth 
#cookies 。需要注意的是,login是禁止用于远程执行命令的。如果指定了 
#UsePrivilegeSeparation ,那么它将在认证完成后被禁用。
MaxStartups 10        #最大允许保持多少个未认证的连接。默认值是 10 。到达限制后,
#将不再接受新连接,除非先前的连接认证成功或超出 LoginGraceTime 的限制。
MaxAuthTries 6     #指定每个连接最大允许的认证次数。默认值是 6 。如果失败认证的次数超
#过这个数值的一半,连接将被强制断开,且会生成额外的失败日志消息。
UseDNS no          #指定是否应该对远程主机名进行反向解析,以检查此主机名是否与其IP
#地址真实对应。
Banner /etc/issue.net   #将这个指令指定的文件中的内容在用户进行认证前显示给远程用户。
#这个特性仅能用于SSH-2,默认什么内容也不显示。"none"表示禁用这个特性。
Subsystem sftp /usr/lib/openssh/sftp-server   #配置一个外部子系统(例如,一个文件
#传输守   护进程)。仅用于SSH-2协议。值是一个子系统的名字和对应的命令行(含选项和参数)。
UsePAM yes     #是否使用PAM模块认证

密钥

制作密钥对

首先在服务器上制作密钥对。首先用密码登录到你打算使用密钥登录的账户,然后执行以下命令:

[root@host ~]$ ssh-keygen  <== 建立密钥对
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:
0f:d3:e7:1a:1c:bd:5c:03:f1:19:f1:22:df:9b:cc:08 root@host

密钥锁码在使用私钥时必须输入,这样就可以保护私钥不被盗用。当然,也可以留空,实现无密码登录。

现在,在 root 用户的家目录中生成了一个 .ssh 的隐藏目录,内含两个密钥文件。id_rsa 为私钥,id_rsa.pub 为公钥

将公钥上传到指定的服务器(过程中需要输入登录密码),私钥请妥善保存。 以下所示:
[tangelocalhost .ssh]$ ssh-copy-id-i ~/.ssh/id rsa.pub roote92.168.122.128
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed:"/home/tang/.ssh/id_rsa.pub"

/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

Welcome to /etc/issue.net
root@92.168.122.128's password;
Number of key(s) added: 1
Now try logging into the machine, with:"ssh'root8192.168.122.128" and check to make sure that only the key(s) you wanted were added. 

在服务器上安装公钥

[root@host ~]$ cd .ssh
[root@host .ssh]$ cat id_rsa.pub >> authorized_keys

如此便完成了公钥的安装。为了确保连接成功,请保证以下文件权限正确

[root@host .ssh]$ chmod 600 authorized_keys
[root@host .ssh]$ chmod 700 ~/.ssh

设置 SSH,打开密钥登录功能

编辑 /etc/ssh/sshd_config 文件,进行如下设置:

RSAAuthentication yes
PubkeyAuthentication yes

另外,请留意 root 用户能否通过 SSH 登录:

PermitRootLogin yes

当你完成全部设置,并以密钥方式登录成功后,再禁用密码登录:

PasswordAuthentication no

最后,重启 SSH 服务:

[root@host .ssh]$ service sshd restart
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值