美文网首页
SSH 远程免密登录,sudo 免密执行

SSH 远程免密登录,sudo 免密执行

作者: Eroc | 来源:发表于2023-08-28 17:02 被阅读0次

场景

云端软件使用 Jenkins 发布版本时,需要将 Jenkins 的计算节点远程连接到 k8s master 节点上,并执行 kubectl 命令。由于 kubectl 命令需要有 sudo 权限,所以当前,需要解决 SSH 远程免密登录和 sudo 免密执行问题。

SSH 远程免密登录

首先在 Jenkins 计算节点上,生成 ssh key。(已有 key 的忽略这一步)

## 生成 ssh key,打完命令后,无需任何输入,连续三次回车即可
<source_user>@<source_ip>:~$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/lijie/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/lijie/.ssh/id_rsa
Your public key has been saved in /home/lijie/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:o27B/XKyUXIyyn63ofxdBnSnJSccRofB+SR4NBGOp1o <source_user>@<source_ip>
The key's randomart image is:
+---[RSA 3072]----+
|             =X*.|
|            .=*+.|
|            o.B++|
|           . + B.|
|     . .S o E .  |
|     .oo.B o .   |
|      +...o   o  |
|     o..+o+o o   |
|     .o.+Bo..    |
+----[SHA256]-----+
<source_user>@<source_ip>:~$

使用 ssh-copy-id 复制公钥到目标机器上。

## 默认端口号为 22,如果目标机器的端口号不是 22,需要添加 -p 参数,写明连接的端口号 
ssh-copy-id  <target_user>@<target_ip>  -p  <target_port>

如果发现用户名和 ip 名都变成了目标机器,则表示远程免密登录成功。当我们需要执行远程命令时,可用以下指令。

ssh  <target_user>@<target_ip>  -p  <target_port>  <shell>

sudo 免密执行

由于 k8s 节点的机器需要对用户权限进行管控,所以一般不会授予用户 root 权限,而给用户 sudo 的权限,但在执行 sudo 提权时,是需要输入密码的,远程连接时无法进行密码的输入动作。所以还需要对用户增加 sudo 免密执行的权限。

在 k8s master 节点上,切换到 root 用户,并修改 /etc/sudoers 文件。添加一行内容 <target_user> ALL=(ALL:ALL) NOPASSWD:ALL

## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL

## Allows people to run all commands without password
<target_user>    ALL=(ALL:ALL)    NOPASSWD:ALL

保存退出,这样就可以实现 Jenkins 计算节点免密登录远程机器并免密执行 sudo 命令了。

扩展:限制 IP 登录

由于在生产环境中,登录生产环境的 k8s 进行配置文件等修改的动作是很危险的,所以在设置 sudo 免密执行时需要对登录的 IP 进行限制。

Linux 服务器可以通过设置 /etc/hosts.allow/etc/hosts.deny 两个文件对访问的 IP 进行限制。值得注意的是,当同一个 IP 同时出现在这两个文件时,hosts.allow 优先级大于 hosts.deny

hosts.allow

允许某个或者某段 IP 地址远程 SSH 登录服务器,且设置后立即生效,不需要重启 SSHD 服务,具体如下:

vim /etc/hosts.allow

文件格式如下所示:

sshd:10.11.10.10x:allow 
sshd:10.11.10.11x:allow 
sshd:10.11.10.10x:allow 

hosts.deny

限制某个或者某段 IP 地址远程 SSH 登录服务器,且设置后立即生效,不需要重启 SSHD 服务,具体如下:

vim /etc/hosts.deny

文件格式如下所示:

sshd:all:deny

相关文章

  • linux ssh 免密登录设置

    免密登录设置 一般情况下ssh登录远程机器需要输入密码,可以设置免密登录 ssh-keygen -t rsa命令一...

  • 【总结】LINUX常见命令深度解析

    摘要 本文讲解LINUX下用户/用户组,文件属性及修改,SUDO免密登录,SSH互信免密登录,VIM,histor...

  • 常用Linux命令

    ssh -X c8 可打开图形界面的远程登陆,免密登录 ssh root@c8a 非免密登录 scp -r tes...

  • Hadoop安装

    配置SSH免密登录 ssh localhost 验证免密登录是否配置成功 安装Java Java是Hadoop的先...

  • 2019-05-27 第十周作业

    1、实现sshd免密登录 2、编译安装dropbear实现SSH登录 3、实现单个用户及用户组使用sudo执行所有...

  • Centos/SSH免密登录

    Centos/SSH免密登录 test

  • SSH免密登录

    在登录远程开发机要一直输入登录密码挺让我厌烦的,因此搞下免密登录,顺便了解下ssh的原理。 如何设置免密登录 在本...

  • Jenkins的Publish Over SSH功能将项目部署到

    免密登录设置 在使用Publish Over SSH之前,需要制作SSH私钥。机器间做免密登录配置。假设机器A,i...

  • 03_自动部署的脚本

    自动下载安装java boot.sh:配置SSH远程免密登录,并将install.sh拷贝到远程主机执行 inst...

  • 安装ES5.3

    ips: 192.168.61.141192.168.61.142192.168.61.143 ssh免密登录设置...

网友评论

      本文标题:SSH 远程免密登录,sudo 免密执行

      本文链接:https://www.haomeiwen.com/subject/piwgmdtx.html