在Linux系统之间设置无密码的Ssh登录

嗨,今天我们将学习如何设置Linux系统的无密码SSH登录。只有具有正确的匹配密钥对(专用和公用)的工作站才可以登录SSH服务器,并且如果没有密钥对,则不允许访问。

通常,您需要输入用户名和密码组合才能连接到SSH控制台。如果组合与系统组合正确,则允许访问服务器。否则,访问将被拒绝。但是,有些比密码登录更安全。有一个使用加密密钥的无密码SSH登录。

如果启用此安全选项,请禁用密码登录,仅允许使用加密密钥登录。使用加密密钥选项时,客户端计算机会生成一个私钥/公钥对。然后客户端需要将公钥上载到SSH服务器authorized_key文件中。在授予访问权限之前,服务器和客户端计算机将验证密钥对。如果服务器上的公钥与通过客户端发送的私钥匹配,则将授予访问权限,否则将被拒绝。

这是用于SSH服务器的非常安全的身份验证方法,是建议使用单用户SSH登录实现安全登录的方法。有关如何启用无密码SSH登录的分步简要说明。

目录

  • 1)确认/安装ssh服务
  • 2)使用ssh-keygen配置密钥对
  • 3)手动复制公钥或使用ssh-copy-id
  • 4)设置权限
  • 5)SSH无需密码即可连接到伙伴主机
  • 最佳做法注意事项
  • 结论

1)确认/安装ssh服务

一些新闻Linux系统 openssh服务器 默认情况下已安装。安装前,检查是否存在

# rpm -q openssh-server
openssh-server-6.6.1p1-33.el7_3.x86_64

更新系统信息库并安装软件包(如果尚未在系统上安装)

# yum check-update
Loaded plugins: fastestmirror
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
base | 3.6 kB 00:00:00 
extras | 3.4 kB 00:00:00 
updates | 3.4 kB 00:00:00
# yum install openssh-server

2)使用ssh-keygen配置密钥对

要不使用密码登录服务器,必须使用公共密钥身份验证来保护通信。设置此选项将提高服务器的安全性,因为它需要用于登录的专用SSH密钥。要生成SSH密钥, ssh-keygen 生成两个密钥并将其保存在两个不同文件中的命令。这两个文件存储在用户主目录中的隐藏文件夹.ssh中。您可以为文件指定自己的名称,也可以默认保存文件 id_dsa (私钥)和 id_dsa.pub (公开密钥)文件。

创建密钥时,将提示您输入密码。这用于保护密钥,并且在通过ssh连接时是必需的。

# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
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:
04:d3:00:7a:25:d0:08:ab:0c:b1:29:d4:e1:7b:62:f2 [email protected]centos-01
The key's randomart image is:
+--[ RSA 2048]----+
|ooo=+.=o |
|.=oo.o o. |
|* ... . |
|= .. . |
|.o + . S |
| + o |
| E |
| |
| |
+-----------------+

3)手动复制公钥或使用ssh-copy-id

要使用密码登录,您需要将公钥的内容复制到服务器并创建一个文件夹 .ssh 复制服务器上的“本地”公钥 id_dsa.pub 档案 ~/.ssh/authorized_keys 在服务器上创建。您可以手动执行此操作,也可以使用ssh-copy-id命令执行此操作。

带手动复印

在服务器上创建一个.ssh文件夹

# ssh [email protected] mkdir -p .ssh
The authenticity of host '10.132.6.180 (10.132.6.180)' can't be established.
ECDSA key fingerprint is 56:54:51:4d:fe:f4:fb:8f:f0:b4:6c:9c:0d:7c:57:4b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.132.6.180' (ECDSA) to the list of known hosts.
[email protected]'s password:

看一下公钥的内容

# cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDjuK9+zkGJYy1MGjkPH3ZFoDGAm9uYQVdXWc283/yk9/9C+MazFT8mSlHYNTRpBThXH9VKbjHo2SAvm6BocB7m6b0DRErU8Hsp4PRfElDwPn/J8AE+hIkZ/bo2dMUOXTZVsdigpm8dOUCcfKKoZMvOU7C0HTBjeAoj/Nxv/4H5UBgEIg8ihVYeVplcDoT7bCmvES9bb7Ry4lrzusjdXp+mL388EGVU+46O1UNb8KE86tWdT/XTFVkSNFCA3bQLmQMWyuT/tgUEYHETcqBaTdFEGBaJ+pQ85/0b5vRCMktbrkrvPDKeM9BfQkBRKsBJxGR2Ag/HXAq7ieIKMoxs+Smr [email protected]

然后将公钥的内容粘贴到远程服务器

# cat .ssh/id_rsa.pub | ssh [email protected]  'cat >> .ssh/authorized_keys'

使用ssh-copy-id

如果您不想手动复制,则可以使用命令来完成

# ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
/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
[email protected]'s password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

4)设置权限

服务器需要保护公钥,因此请设置密钥权限

# chmod 700 .ssh

# chmod 600 .ssh/authorized_keys

5)SSH无需密码即可连接到伙伴主机

既然您已将公用密钥复制到服务器,则可以使用公用密钥对其进行访问。通过输入以下命令进行测试:

[[email protected] ~] # ssh [email protected] 
Enter passphrase for key '/root/.ssh/id_rsa': 
Last login: Mon Apr 17 06:01:07 2017 from 10.132.68.13
[[email protected] ~] #

您会看到提示您输入密码而不是密码。现在,您已连接到服务器“ centos-02”。您只需要启用公共密钥身份验证并禁用密码身份验证。

为此,您需要进行编辑 /etc/ssh/sshd_config 服务器上的文件。不要删除任何东西。只需将下面的行更改为

vim /etc/ssh/sshd_config

RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication no
UsePAM no
ChallengeResponseAuthentication no

立即重新启动服务

systemctl reload sshd

如何使用ssh-add添加密钥

现在,您已经为服务器连接配置了public,您必须输入密码。问题在于,每次需要连接到服务器时,系统都会要求您输入一个与要求输入密码没有区别的密码。因此,在不需要密码的情况下连接服务器时,必须有一种自动验证公钥的方法。使用方法 ssh-agent 命令去做

# ssh-agent $SHELL

# ssh-add -L
The agent has no identities.
# ssh-add 
Enter passphrase for /root/.ssh/id_rsa: 
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)

登录到远程服务器并检查结果。

# ssh [email protected]
Last login: Tue Apr 18 00:48:08 2017 from 10.132.68.13

系统不会提示您输入密码

升级SSH密钥以提高安全性

建议您启用SSH公钥身份验证,而不要在网络上使用密码。但是,同样重要的是要经常更新SSH密钥以增强安全性。有时人们多年来一直使用相同的SSH密钥。请注意,DSA和RSA 1024位密钥已被弃用。我们建议您将这些密钥升级到具有安全签名的快速紧凑的椭圆曲线加密的最新Ed25519密钥。您可以使用单个命令生成这些密钥 ssh-keygen -o -a 100 -t ed25519 如下:

# ssh-keygen -o -a 100 -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/root/.ssh/id_ed25519): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_ed25519.
Your public key has been saved in /root/.ssh/id_ed25519.pub.
The key fingerprint is:
9a:aa:da:75:a3:58:22:a0:0a:f1:63:62:c2:2f:da:31 [email protected]
The key's randomart image is:
+--[ED25519 256--+
|                |
|                |
|                |
|                |
|o       S       |
|+o     o        |
|*oE o =         |
|=B.O + .        |
|=.*oo           |
+----------------+

可以有识别文件“〜/ .ssh / id_ed25519“ 与其他键一起存储 .ssh 资料夹。您可以复制您的公钥 ~/.ssh/id_ed25519.pub 定位主机进行身份验证 ssh-add 命令

# eval `ssh-agent -s`
Agent pid 32377
# ssh-add 
Enter passphrase for /root/.ssh/id_rsa: 
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
Enter passphrase for /root/.ssh/id_ed25519: 
Identity added: /root/.ssh/id_ed25519 (/root/.ssh/id_ed25519)

最佳做法注意事项

在远程服务器上创建普通用户帐户

建议您使用具有普通特权的普通用户通过ssh登录服务器。因此,您需要在用于日志记录的服务器上创建一个常规用户帐户,并且可以作为其他操作的基础 su - 命令

例如,创建一个具有普通权限的帐户linoxide

# useradd -m linoxide

接下来,将authorized_keys文件复制到新用户的主目录中

# cp -R .ssh/ /home/linoxide/

授予帐户权限

# chown -R linoxide:linoxide /home/linoxide/.ssh/

尝试使用新帐户连接到服务器

# ssh [email protected]
Last login: Tue Apr 18 02:06:25 2017
[[email protected] ~]$

禁用SSH根登录

现在您可以使用普通帐户访问服务器,可以禁用root登录以获得最大的安全性。所以编辑 /etc/ssh/sshd_config 并换线 PermitRootLogin

当您打开文件时,此行看起来像是#PermitRootLogin(是)

PermitRootLogin no

保存文件并重新启动服务

# systemctl restart sshd

否,请从客户端尝试使用您的root帐户连接到服务器

# ssh [email protected]
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

你可以看到 路线 无法连接。现在看看我们的普通帐户

# ssh [email protected]
Last login: Tue Apr 18 02:10:53 2017 from 10.132.68.13
[[email protected] ~]$

您会看到可以使用常规帐户登录到服务器如果您需要导航,

$ su - root
Password: 
Last login: Tue Apr 18 02:23:20 UTC 2017 on pts/1
[[email protected] ~]#

防止SSH超时会话

如果使用ssh连接到远程服务器,则几分钟后如果没有任何活动,则将断开连接。这基本上是 空闲超时。您可以通过在ssh配置文件中添加两行来防止这种情况。

更改是否可以访问服务器 /etc/ssh/sshd_config 服务器端文件:

# vim /etc/ssh/sshd_config

接下来,将以下两行添加到文件末尾。

ClientAliveInterval 120
ClientAliveCountMax 3

下面介绍这些行:

  • ClientAliveInterval: 设置服务器在x秒后无活动(0 =无)时将邮件发送到客户ssh的超时间隔。客户端响应服务器时,将保持连接。
  • ClientAliveCountMax: 设置服务器在关闭连接之前允许的未答复ClientAlive请求的最大数量。

如果您无权访问服务器,请创建一个 ~/.ssh/config 主目录客户端文件

# touch ~/.ssh/config

然后添加以下两行

ServerAliveInterval 120
ServerAliveCountMax 3

结论

看!启用无密码SSH登录。启用加密密钥对SSH登录非常安全。这是用于SSH服务器的非常安全的身份验证方法,是建议使用单用户SSH登录来实现安全登录的方法。因此,如果您有任何问题,建议或反馈,请填写下面的评论框。谢谢你享受加密的安全SSH登录:-)

Sidebar