张子阳的博客

首页 读书 技术 店铺 关于
张子阳的博客 首页 读书 技术 关于

linux上配置ssh实现免密登录

2018-07-16 张子阳 分类: Linux

当有多台服务器彼此进行通信时,可以通过使用ssh来免去输入密码的步骤。这篇文章将以两台服务器作为范例,演示如何通过ssh进行登录。

在未配置ssh之前,首先需要安装ssh:

yum install -y ssh

本机ssh登录

假设有两台主机,IP分别是:192.168.1.56 和 192.168.1.57,主机名分别叫做dev56和dev57。我们先配置dev56,使其可以登录自身(即从dev56登录dev56)。

先使用putty登录到dev56,再使用下面的命令尝试登录自己:

# ssh localhost

此时因为还没有进行配置,会发现系统要求输入密码,当输入和putty一样的密码时,可以登录成功。

putty几乎是windows上最常用的linux客户端了。

接下来,使用下面的命令,创建无密码的公钥:

# ssh-keygen -t rsa -P "" Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): 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:/g4KmeerXa4rBfeccjlTthDWTeeNBv9ova8BuV9VmMM root@dev56 The key's randomart image is: +---[RSA 2048]----+ | . oo . | | o . .* = | | . . E o| | . . . o o =.| | o oS* .o o +| | oo.O . + o| | +..o+o . ...| | .= + o . o.| | .oB+..o o..| +----[SHA256]-----+

出现输入文件名的提示时,可以直接按回车不指定,系统会采用默认的名称。这样会在~/.ssh文件夹下生成两个文件,id_rsa(私钥)和id_rsa.pub(公钥)。继续执行下面命令:

# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

这条命令将会把ssh公钥加入到authorized_keys当中。这样,拥有ssh公钥的机器就可以实现免密登录了(当前就是本机)。再次使用ssh localhost进行登录:

# ssh localhost Last login: Mon Jul 16 14:58:21 2018 from ::1

此时,不再需要密码就可以成功登录了。

由其他服务器ssh登录本机

上一部分我们完成了自机的ssh登录,接下来就要完成从dev57 ssh登录到dev56。原理和上面是类似的:先生成dev57的公钥、私钥,然后将dev57的公钥,加入到dev56的authorized_keys当中。

在dev57上,再次执行下面命令生成密钥对:

# ssh-keygen -t rsa -P ""

在dev57上,使用cat输出一下公钥的内容:

# cat ~/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDe0wRuoUJWDRsbdClOZQBdbhv4lY4iGU21+Ac552lwj/wBsP7gPNdZld/EVShIcglBJE4Mx9tycYXZpgDFLeenHQTaed5lw5TC+U0vEWvM/ulm76XXfewZh+phhTpg2LliL/Jx/gb5pOrD+YtWlmioJZxy9D1A3oXFE0J2wv9UEH9RvDrYDqI1WgYjvBLamWwFoM9TtSKD3Ia0F7gTYvXDTnDNX9zNXki3Gi9gYNGoveojScbMvY/yHOK/y2jfaIH/TpYWyPovGQSQijFWEYT6iCaZ5j7hLBGYFlwWAFc91so2nWynYPLOeAhe1jA4cydf7Nz8HsPXAS6ntKz8u8yz root@dev57

在dev56上(即要登录的机器,我们是从dev57登录dev56)上,将上面公钥的内容写入authorized_keys:

# echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDe0wRuoUJWDRsbdClOZQBdbhv4lY4iGU21+Ac552lwj/wBsP7gPNdZld/EVShIcglBJE4Mx9tycYXZpgDFLeenHQTaed5lw5TC+U0vEWvM/ulm76XXfewZh+phhTpg2LliL/Jx/gb5pOrD+YtWlmioJZxy9D1A3oXFE0J2wv9UEH9RvDrYDqI1WgYjvBLamWwFoM9TtSKD3Ia0F7gTYvXDTnDNX9zNXki3Gi9gYNGoveojScbMvY/yHOK/y2jfaIH/TpYWyPovGQSQijFWEYT6iCaZ5j7hLBGYFlwWAFc91so2nWynYPLOeAhe1jA4cydf7Nz8HsPXAS6ntKz8u8yz root@dev57" >> ~/.ssh/authorized_keys

在dev57上,使用ssh登录到dev56:

[root@dev57 ~]# ssh 192.168.1.56 The authenticity of host '192.168.1.56 (192.168.1.56)' can't be established. ECDSA key fingerprint is SHA256:BUgYzVjm7DBkb581+vJDZViW92Mf5QwKvbV46m1BZfE. ECDSA key fingerprint is MD5:4a:69:a9:1d:19:cd:a1:15:1b:6e:26:4d:c1:82:33:48. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.1.56' (ECDSA) to the list of known hosts. Last login: Mon Jul 16 15:54:50 2018 from ::1 [root@dev56 ~]#

第一次登录时,会提示是否继续连接(和使用putty第一次连接主机时一样),输入yes,可以看到已经成功登录到了dev56了。输入exit,会重新退回到dev57。

[root@dev56 ~]# exit logout Connection to 192.168.1.56 closed. [root@dev57 ~]#

使用ssh-copy-id工具

上面的配置方法相对基础,有一个ssh-copy-id的工具,可以快速地实现上面的过程,将本机的公钥复制到远程主机的authorized_keys文件上。假设有三台主机:node0、node1、node2,如果想要从本机远程对它们进行登录,可以执行下面的命令,将本机的公钥拷贝过去:

ssh-copy-id -i ~/.ssh/id_rsa.pub root@node0 ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1 ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2

如果不是root用户,假如说用户名是hadoop,且端口号为22001,那么只要稍微修改一下语句就可以了:

ssh-copy-id -i $HOME/.ssh/id_rsa.pub -p 22001 hadoop@node0 ssh-copy-id -i $HOME/.ssh/id_rsa.pub -p 22001 hadoop@node1 ssh-copy-id -i $HOME/.ssh/id_rsa.pub -p 22001 hadoop@node2

至此,你应该已经了解如何配置ssh的免密登录了。配置好ssh还有一个作用就是可以方便地使用scp工具在不同的linux服务器间拷贝文件。

感谢阅读,希望这篇文章能给你带来帮助!