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

2023-08-28  本文已影响0人  Eroc

场景

云端软件使用 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
上一篇 下一篇

猜你喜欢

热点阅读