SSH免密登录、sudo免密执行

SSH免密登录、sudo免密执行

背景:使用jenkins发布版本时需要远程连接到k8s主节点启动执行kubectl命令,需要解决两个问题:1.ssh远程免密登录,2.sudo免密执行

kubectl apply -f /opt/${JOB_NAME}.yaml
kubectl rollout restart deployment ${JOB_NAME} -n test2

SSH免密登录

# 创建一个普通用户
adduser lijie
# 切换至普通用户
su lijie
cd ~

生成ssh key

lijie@lijie-vm:~$ ssh-keygen -t rsa
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 lijie@lijie-vm
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]-----+
lijie@lijie-vm:~$

使用ssh-copy-id命令将id_rsa.pub公钥复制到指定远程服务器的.ssh/authorized_keys文件下

ssh-copy-id  -i ~/.ssh/id_rsa.pub root@localhost

这样就可以直接密码ssh连接远程服务器,并执行命令

ssh root@localhost ip a

sudo免密执行

切换到root用户下,修改/etc/sudoers

su
vim /etc/sudoers

添加一行内容‘lijie ALL=(ALL:ALL) NOPASSWD: ALL’

# User privilege specification
root	ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo	ALL=(ALL:ALL) ALL

lijie   ALL=(ALL:ALL)  NOPASSWD: ALL

使用wq!强制保存退出

普通用户就可以免密使用sudo命令了

远程免密连接普通用户执行sudo命令

ssh test@localhost sudo docker ps

CONTAINER ID   IMAGE                       COMMAND                  CREATED       STATUS                 PORTS                                                                                      NAMES
22496811bd3e   idoop/zentao:latest         "docker-entrypoint"      5 days ago    Up 6 hours (healthy)   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 0.0.0.0:8081->80/tcp, :::8081->80/tcp           zentao
3fdb9790eb87   sonarqube:8.9.8-community   "bin/run.sh bin/sona…"   3 weeks ago   Up 6 hours             0.0.0.0:9000->9000/tcp, :::9000->9000/tcp                                                  sonarqube
b4d44c9dd75a   postgres                    "docker-entrypoint.s…"   3 weeks ago   Up 6 hours             0.0.0.0:5432->5432/tcp, :::5432->5432/tcp                                                  db
fafb7fefd312   jenkins/jenkins:2.355       "/usr/bin/tini -- /u…"   3 weeks ago   Up 6 hours             0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:50000->50000/tcp, :::50000->50000/tcp   jenkins

亦可以远程登录k8s主节点并sudo执行命令

ssh lijie@192.168.2.101 sudo kubectl apply -f /opt/${JOB_NAME}.yaml
ssh lijie@192.168.2.101 sudo kubectl rollout restart deployment ${JOB_NAME} -n test2
<think>嗯,用户想了解如何在VSCode中实现SSH免密登录Linux系统。这个问题其实很实用,特别是需要频繁连接远程服务器开发的情况。 用户提供的引用内容相当全面,涵盖了整个流程的各个步骤。不过我需要把这些信息整合成更清晰的步骤指南。注意到引用[1][2][5]提到windows系统下的操作,引用[3][4]则补充了Linux端的配置细节。 用户似乎是个开发者,可能正在配置开发环境。ta直接询问具体方法,说明可能已经遇到需要反复输入码的麻烦,想要简化工作流程。免密登录确实能提升效率,特别是需要频繁部署代码的场景。 先从核心步骤开始梳理:本质就是创建钥对,把公钥部署到Linux服务器,然后配置VSCode使用对应的私钥。引用[2]提到需要安装Remote-SSH插件这个前提条件,这个不能漏掉。 注意到不同引用有些细微差别:引用[4]使用ed25519算法生成钥,引用[5]则是rsa。考虑到兼容性,应该优先推荐ed25519,但也要说明rsa是可选方案。另外引用[3]特别强调了config文件配置的重要性,这是在VSCode中实现的关键。 配置文件路径的写法需要区分系统:Windows是反斜杠路径,Linux要用波浪号缩写。用户可能在Windows工作但连接Linux服务器,所以两边都要说明清楚。测试环节可以引用[3]提到的config测试方法,再补充一个终端ssh命令测试会更稳妥。 最后想到几个可能踩坑的点:文件权限问题(特别是Linux端的.ssh目录权限)、防火墙设置、selinux状态。用户如果按步骤操作失败,这些是最常见的排查方向。 </think>以下是在VSCode中实现SSH免密登录Linux系统的完整步骤,结合多个引用内容整理而成: --- ### **详细步骤** #### 1. **安装必要插件** - 在VSCode扩展商店搜索安装 **Remote - SSH** 插件(引用[1][2])。 #### 2. **生成SSH钥对**(Windows/Local端) - 打开终端(PowerShell或CMD),执行: ```bash ssh-keygen -t ed25519 -C "your_email@example.com" # 推荐ed25519算法(引用[4]) ``` 或传统RSA算法: ```bash ssh-keygen -t rsa -b 4096 # RSA算法(引用[5]) ``` - 按提示保存钥(默认路径:`C:\Users\<用户名>\.ssh\id_ed25519`),**直接回车跳过码设置**实现。 #### 3. **Linux服务器端准备** - 确保已安装SSH服务: ```bash sudo apt update && sudo apt install openssh-server # Ubuntu(引用[1]) ``` - 启动服务: ```bash sudo systemctl enable --now ssh ``` #### 4. **将公钥部署到Linux服务器** - **方法一(推荐)**: 使用`ssh-copy-id`自动部署(需本地有ssh客户端): ```bash ssh-copy-id -i ~/.ssh/id_ed25519.pub username@server_ip # 替换为你的用户名和IP(引用[4]) ``` - **方法二(手动)**: 将本地`id_ed25519.pub`内容复制到Linux服务器的`~/.ssh/authorized_keys`中: ```bash mkdir -p ~/.ssh echo "粘贴公钥内容" >> ~/.ssh/authorized_keys chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys # 关键权限设置! ``` #### 5. **配置VSCode的SSH连接** - 在VSCode中按 `Ctrl+Shift+P` → 输入 `Remote-SSH: Open Configuration File` → 选择配置文件: - **Windows路径**:`C:\Users\<用户名>\.ssh\config`(引用[3][5]) - **Linux/macOS路径**:`~/.ssh/config` - 添加服务器配置: ``` Host MyServer # 自定义名称 HostName 192.168.x.x # 服务器IP User your_username # Linux用户名 IdentityFile ~/.ssh/id_ed25519 # 私钥路径(引用[3]) ``` #### 6. **连接验证** - 在VSCode左侧栏点击 **远程资源管理器** → 选择 `MyServer` → 右键连接。 - 首次连接会提示主机验证,选 **Continue** → 成功后自动进入免密登录(引用[1][2])。 --- ### **常见问题排查** 1. **权限问题** Linux服务器需确保权限正确: ```bash chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys ``` 2. **防火墙阻挡** 检查服务器SSH端口(默认22)是否开放: ```bash sudo ufw allow 22 # Ubuntu开端口 ``` 3. **钥路径错误** 确认`config`文件中`IdentityFile`路径与本地私钥路径一致(引用[3][5])。 4. **算法兼容性** 老旧系统可能不支持ed25519,改用RSA:`ssh-keygen -t rsa -b 4096` > **提示**:免密登录后,可使用`scp`命令直接传输文件(引用[4]): > ```bash > scp local_file.txt MyServer:/remote/path/ # 无需输码 > ``` --- ### **相关问题** 1. 如何为同一服务器配置多个SSH钥? 2. Windows系统下如何修复SSH文件权限错误? 3. 除VSCode外,还有哪些支持SSH免密登录的开发工具? [^1]: vscode下ssh免密登录linux服务器 [^2]: 【免密登录】VSCode配置远程ssh免密登录 [^3]: VScode远程ssh免密登录 [^4]: VScode配置SSH+免密登录+传输 [^5]: 【VSCode】安装与 ssh 免密登录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mrlijie00

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值