Linux SSH密钥登录

warning: 这篇文章距离上次修改已过191天,其中的内容可能已经有所变动。

本次实验环境为:阿里云 CentOS_7.4_x64 已开放22端口

编辑 sshd 配置文件

#编辑 /etc/ssh/sshd_config 文件
vim /etc/ssh/sshd_config

#设置是否使用RSA算法进行安全验证
RSAAuthentication yes

#允许客户端通过 public-key authentication来登陆
PubkeyAuthentication yes

#root用户能否通过 SSH 登录
PermitRootLogin yes

#禁用密码登录,建议确认完成全部设置,并可以使用密钥方式登录成功后再修改。
PasswordAuthentication no

#重启 SSH 服务
service sshd restart

更多关于 sshd_config 文件说明请点击这里


检查是否已经生成过ssh密钥

SSH密钥一般是在用户目录下的.ssh目录下:

  • root用户是 /root/.ssh
  • 普通用户是 /home/您的用户名/.ssh

如果没有进行过ssh密钥创建, .ssh 目录下应该仅有一个 known_hosts 文件。

id_rsa开头的文件就是你曾经生成的密钥id_rsa开头的文件就是你曾经生成的密钥

如果您的 .ssh 目录如上图所示,请跳过生成密钥这一步。


生成密钥

如果您没有生成过密钥,或忘记密钥的密码可以执行下面的命令

#执行ssh-keygen命令创建密钥对,加密算法RSA,长度4096
ssh-keygen -t rsa -b 4096

rsa和dsa是生成密钥常用的两种加密算法,其他可选算法还有ecdsa、rsa1等。

Windows下可以使用putty-gen工具生成ssh密钥。

中途会提示输入密码,可以选择不输入,但会降低安全性。

密钥生成后会在当前目录下多出两个文件:

  • id_rsa 是私钥(不能外泄)
  • id_rsa.pub 这个是公钥

小提示:更多的关于ssh-keygen说明可以看这里


上传公钥到服务器上

最省事的方法

#复制公钥到服务器上
ssh-copy-id -i id_rsa.pub root@idzd.top

但是ssh-copy-id默认端口是22,如果您的SSH端口不是22,也就是远程服务器SSH端口修改成其他的了,就不能用这个命令。

当然也可以使用下面的方法来添加公钥到服务器上

#进入远程服务器需要SSH登录的用户的.ssh目录下
cd /root/.ssh

#检查是否有authorized_keys文件
ls

#若没有则执行以下命令创建
touch authorized_keys

#为新创建的空authorized_keys文件,授予600权限(注意:此处权限必须是600)
chmod 600 /root/.ssh/authorized_keys

#公钥id\_rsa.pub追加到authorized\_keys文件中(>>表示追加文件末尾,>表示将文件内容全部替换掉)
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

#重启远程主机的ssh服务
#ubuntu系统
service ssh restart
#debian系统
/etc/init.d/ssh restart

这里可以用这条命令解释下公钥的保存过程:

ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

测试

#登陆远程服务器
ssh root@idzd.top
#指定SSH登录所需密钥(绝对路径)
ssh -i /root/.ssh/id_rsa root@idzd.top

如果创建密钥对的时候设置了密码,则会提示您输入密码,没有的话会直接登录

如果你嫌终端默认的提示很乏味,可以看看这里


配置文件说明

配置文件 sshd_config

sshd_config是针对服务端的配置文件

#设置sshd监听的端口号。
Port 22

#设置sshd服务器绑定的IP地址。
ListenAddress 192.168.1.1

#设置计算机私人密匙的文件。
HostKey /etc/ssh/ssh\_host\_key

#定义服务器密匙的位数。
ServerKeyBits 1024

#设置如果用户不能成功登录,在切断连接之前服务器需要等待的时间(以秒为单位)。
LoginGraceTime 600

#设置在多少秒之后自动重新生成服务器的密匙(如果使用密匙)。重新生成密匙是为了防止用盗用的密匙解密被截获的信息。
KeyRegenerationInterval 3600

#设置是否允许root通过ssh登录。这个选项从安全角度来讲应设成"no"。
PermitRootLogin no

#设置验证的时候是否使用“rhosts”和“shosts”文件。
IgnoreRhosts yes

#设置ssh daemon是否在进行RhostsRSAAuthentication安全验证的时候忽略用户的"$HOME/.ssh/known_hosts”
IgnoreUserKnownHosts yes

#设置ssh在接收登录请求之前是否检查用户家目录和rhosts文件的权限和所有权。这通常是必要的,因为新手经常会把自己的目录和文件设成任何人都有写权限。
StrictModes yes

#设置是否允许X11转发。
X11Forwarding no

#设置sshd是否在用户登录的时候显示“/etc/motd”中的信息。
PrintMotd yes

#设置在记录来自sshd的消息的时候,是否给出“facility code”。
SyslogFacility AUTH

#设置记录sshd日志消息的层次。INFO是一个好的选择。查看sshd的man帮助页,已获取更多的信息。
LogLevel INFO

#设置只用rhosts或“/etc/hosts.equiv”进行安全验证是否已经足够了。
RhostsAuthentication no

#设置是否允许用rhosts或“/etc/hosts.equiv”加上RSA进行安全验证。
RhostsRSAAuthentication no

#设置是否允许只有RSA安全验证。
RSAAuthentication yes

#设置是否允许口令验证。
PasswordAuthentication yes

#设置是否允许用口令为空的帐号登录。
PermitEmptyPasswords no

#的后面可以跟任意的数量的用户名的匹配串,这些字符串用空格隔开。主机名可以是域名或IP地址。
AllowUsers admin

配置文件 ssh_config

ssh_config是针对客户端的配置文件

#带“#”表示该句为注释不起作,该句不属于配置文件原文,意在说明下面选项均为系统初始默认的选项。说明一下,实际配置文件中也有很多选项前面加有“#”注释,虽然表示不起作用,其实是说明此为系统默认的初始化设置。
# Site-wide defaults for various options

#"Host"只对匹配后面字串的计算机有效,“*”表示所有的计算机。从该项格式前置一些可以看出,这是一个类似于全局的选项,表示下面缩进的选项都适用于该设置,可以指定某计算机替换*号使下面选项只针对该算机器生效。
Host *

#"ForwardAgent"设置连接是否经过验证代理(如果存在)转发给远程计算机。
ForwardAgent no

#设置X11连接是否被自动重定向到安全的通道和显示集(DISPLAY set)。
ForwardX11 no

#设置是否使用基于rhosts的安全验证。
RhostsAuthentication no

#设置是否使用用RSA算法的基于rhosts的安全验证。
RhostsRSAAuthentication no

#设置是否使用RSA算法进行安全验证。
RSAAuthentication yes

#设置是否使用口令验证。
PasswordAuthentication yes

#设置如果用ssh连接出现错误是否自动使用rsh,由于rsh并不安全,所以此选项应当设置为"no"。
FallBackToRsh no

#设置是否在这台计算机上使用"rlogin/rsh",原因同上,设为"no"。
UseRsh no

#批处理模式,一般设为"no";如果设为"yes",交互式输入口令的提示将被禁止,这个选项对脚本文件和批处理任务十分有用。
BatchMode no

#设置ssh是否查看连接到服务器的主机的IP地址以防止DNS欺骗。建议设置为"yes"。
CheckHostIP yes

#如果设为"yes",ssh将不会自动把计算机的密匙加入"$HOME/.ssh/known_hosts"文件,且一旦计算机的密匙发生了变化,就拒绝连接。
StrictHostKeyChecking no

#设置读取用户的RSA安全验证标识。
IdentityFile ~/.ssh/identity

#设置连接到远程主机的端口,ssh默认端口为22。
Port 22

#设置加密用的密钥,blowfish可以自己随意设置。
Cipher blowfish

#设置escape字符。
EscapeChar ~

添加新评论

* 已开启反垃圾保护,《隐私政策》