Linux配置SSH免密码登录(非root账号)

简介: 设置多台linux服务器之间以非root账号的身份免密码ssh登录

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码): https://github.com/zq2599/blog_demos
  • Linux环境下,经常通过SSH从一台服务器登录到另一台服务器,并且登录身份不是root账号,每次都要输入密码挺麻烦的,所以今天就来实战如何配置非root账号的免密码登录;

实战环境

  • 本次实战环境是三台CentOS 7.5机器,它们的相关信息如下所示:
IP 地址 主机名
192.168.119.160 node0
192.168.119.161 node1
192.168.119.162 node2

准备工作

  • 确认ssh服务已经安装并打开;
  • 打开文件/etc/ssh/sshd_config,确保以下配置已经添加(如果被"#"注释了就把"#"删除):
AuthorizedKeysFile      .ssh/authorized_keys
PubkeyAuthentication yes
  • 三台机器的/etc/hostname文件中的内容分别是node0、node1、node2;
  • 三台机器的/etc/hosts文件尾部都添加以下三行内容(请按照自己机器的ip地址来填写):
192.168.119.160 node0
192.168.119.161 node1
192.168.119.162 node2
  • 三台机器上都有非root账号,为了方便操作,这里为三台机器都创建了名为hadoop的账号和群组,创建命令:
groupadd hadoop && useradd -d /home/hadoop -g hadoop -m hadoop
  • 创建完账号后记得用命令passwd初始化hadoop账号的密码;
  • 在node0机器上输入ssh hadoop@node1,尝试ssh登录node1,此时由于未配置免密码登录,所以控制台要求输入node1的密码,如下:
[hadoop@node0 ~]$ ssh hadoop@node1
The authenticity of host 'node1 (192.168.119.161)' can't be established.
ECDSA key fingerprint is SHA256:DJ8ZdacngzPjAszOZTpx1WudYX+u0aAUld7ZYSK9/4g.
ECDSA key fingerprint is MD5:86:78:2f:c7:c2:97:7f:79:dd:b7:d0:26:fd:bf:a6:9b.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'node1,192.168.119.161' (ECDSA) to the list of known hosts.
hadoop@node1's password: 
Last login: Thu Feb  7 18:10:40 2019 from 192.168.119.1
[hadoop@node1 ~]$
  • 准备工作已经完成,接下来开始实战免密码登录配置;

生成秘钥(三台机器都要执行)

  • hadoop账号登录;
  • 输入ssh-keygen -t rsa,然后一路回车,顺利生成秘钥文件,如下:
[hadoop@node0 ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hadoop/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/hadoop/.ssh/id_rsa.
Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Ct6HIbAfypJpr/VLzxOeWX4WngQPUaSrJTguPN23Eh4 hadoop@node0
The key's randomart image is:
+---[RSA 2048]----+
|          oo     |
|         ..      |
|  .      ..      |
|   o  .  o.      |
|  . +o..So+      |
| +.+o=oE+. +     |
|+.o=o+*oX.o o    |
|..o = oO...=     |
| ... o.oo.o      |
+----[SHA256]-----+
[hadoop@node0 ~]$
  • 进入目录~/.ssh/可见如下内容:
[hadoop@node0 ~]$ cd ~/.ssh/
[hadoop@node0 .ssh]$ ls
id_rsa  id_rsa.pub  known_hosts

配置秘钥授权文件

  • hadoop账号登录node0机器;
  • 生成一个空白文件:
touch ~/.ssh/authorized_keys
  • 将node0自己的公钥放入文件authorized_keys中:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  • hadoop账号登录node1机器,执行以下命令,即可将node1的公钥传输到node0机器,文件名为node1.id_rsa.pub
scp ~/.ssh/id_rsa.pub hadoop@node0:~/.ssh/node1.id_rsa.pub
  • 期间会要求输入node0的hadoop账号的密码,输入后传输完成,在node0的/home/hadoop/.ssh目录下,多了个名为node1.id_rsa.pub的文件;
  • 在node0机器执行以下命令,即可将node1.id_rsa.pub的内容写入authorized_keys文件:
cat ~/.ssh/node1.id_rsa.pub >> ~/.ssh/authorized_keys
  • 此时authorized_keys文件中已经有了node0和node1的公钥;
  • hadoop账号登录node2机器,执行以下命令,即可将node2的公钥传输到node0机器,文件名为node2.id_rsa.pub
scp ~/.ssh/id_rsa.pub hadoop@node0:~/.ssh/node2.id_rsa.pub
  • 期间会要求输入node0的hadoop账号的密码,输入后传输完成,在node0的/home/hadoop/.ssh目录下,多了个名为node2.id_rsa.pub的文件;
  • 在node0机器执行以下命令,即可将node2.id_rsa.pub的内容写入authorized_keys文件:
cat ~/.ssh/node2.id_rsa.pub >> ~/.ssh/authorized_keys
  • 此时authorized_keys文件中已经有了node0、node1、node2的公钥;

同步秘钥授权文件

  • hadoop账号登录node0机器,执行以下命令将秘钥授权文件同步到node1机器:
scp ~/.ssh/authorized_keys hadoop@node1:~/.ssh/
  • hadoop账号登录node0机器,执行以下命令将秘钥授权文件同步到node2机器:
scp ~/.ssh/authorized_keys hadoop@node2:~/.ssh/
  • 至此,秘钥授权文件已经同步到所有机器,如果前面的所有操作用的是root账号,此时已经可以免密码登录成功了,但是今天我们用的不是root账号,此时在node0输入命令ssh hadoop@node1,却发现依然要求输入node1的hadoop账号的密码,这是因为文件和文件夹权限的问题导致的,接下来解决权限问题;

调整文件夹和文件的权限(三台机器都要执行)

  • 先调整文件夹~/.ssh的权限:
chmod 700  ~/.ssh
  • 再调整文件~/.ssh/authorized_keys的权限:
chmod 600  ~/.ssh/authorized_keys
  • 至此,非root账号的SSH免密码登录配置已经完成,在node0输入命令ssh hadoop@node1试试,如下,顺利登录,不需要输入密码:
[hadoop@node0 ~]$ ssh hadoop@node1
Last login: Fri Feb  8 00:36:57 2019 from 192.168.119.1
[hadoop@node1 ~]$
  • 再去node1、node2机器上试试SSH登录其他机器,发现也能免密码登录;

欢迎关注阿里云开发者社区博客:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...
相关文章
|
3月前
|
JavaScript 应用服务中间件 Linux
【应用服务 App Service】解决无法从Azure门户SSH登录问题
【应用服务 App Service】解决无法从Azure门户SSH登录问题
|
10天前
|
监控 Ubuntu Linux
使用VSCode通过SSH远程登录阿里云Linux服务器异常崩溃
通过 VSCode 的 Remote - SSH 插件远程连接阿里云 Ubuntu 22 服务器时,会因高 CPU 使用率导致连接断开。经排查发现,VSCode 连接根目录 ".." 时会频繁调用"rg"(ripgrep)进行文件搜索,导致 CPU 负载过高。解决方法是将连接目录改为"root"(或其他具体的路径),避免不必要的文件检索,从而恢复正常连接。
|
3月前
|
安全 Linux
Linux查看和剔除当前登录用户详细教程
Linux查看和剔除当前登录用户详细教程
128 0
Linux查看和剔除当前登录用户详细教程
|
3月前
|
机器学习/深度学习 存储 Linux
【机器学习 Azure Machine Learning】使用VS Code登录到Linux VM上 (Remote-SSH), 及可直接通过VS Code编辑VM中的文件
【机器学习 Azure Machine Learning】使用VS Code登录到Linux VM上 (Remote-SSH), 及可直接通过VS Code编辑VM中的文件
|
3月前
|
安全 Shell Linux
如何禁止某个用户使用ssh登录
本文介绍了五种禁止用户通过SSH登录的方法:1) 修改`/etc/ssh/sshd_config`文件中的`DenyUsers`和`DenyGroups`来阻止特定用户或用户组登录;2) 将用户的默认shell设置为`/usr/sbin/nologin`或`/bin/false`以禁用其SSH访问;3) 利用PAM(可插入认证模块)通过编辑`/etc/security/sshd.conf`来限制登录权限;4) 通过编辑`/etc/hosts.deny`文件拒绝特定用户的SSH访问;5) 锁定或禁用用户账号以阻止所有类型的登录。每种方法都提供了详细的步骤指导。
430 1
|
3月前
|
监控 安全 Linux
在Linux中,某个账号登陆linux后,系统会在哪些日志文件中记录相关信息?
在Linux中,某个账号登陆linux后,系统会在哪些日志文件中记录相关信息?
|
3月前
|
JavaScript Linux API
【Azure 应用服务】NodeJS Express + MSAL 应用实现AAD集成登录并部署在App Service Linux环境中的实现步骤
【Azure 应用服务】NodeJS Express + MSAL 应用实现AAD集成登录并部署在App Service Linux环境中的实现步骤
|
3月前
|
监控 安全 Linux
在Linux中,如何查看当前登录用户?
在Linux中,如何查看当前登录用户?
|
4月前
|
Linux 数据安全/隐私保护 iOS开发
Linux的root用户,普通用户无法在根录中创建文件,一般在其HOME目录里是不受限的,一旦出了HOME目录,大多数地方,仅有读和执行的权限,ctrl + d回到上一个用户,Exit,su - ro
Linux的root用户,普通用户无法在根录中创建文件,一般在其HOME目录里是不受限的,一旦出了HOME目录,大多数地方,仅有读和执行的权限,ctrl + d回到上一个用户,Exit,su - ro
|
Linux
linux中/和/root(~) 和 /home
winodws是森林型目录结构,它有很多根,如C、D、E、F等都是它的根目录,然后在其实创建子目录linux是树型目录结构,它只有一个根就是/目录,然后在/目录在有子目录如/root、/home、/etc/、/bin等。
1217 0