未记录事实核验 · 状态:现行内容
记录仅说明核验时间与维护状态,不保证适用于所有环境;使用前请留意正文中的版本、适用条件与风险提示。
warning 适用边界与维护说明
本文适用于已有授权账号、服务器地址及可用 SSH 客户端的基础连接、密钥登录、SCP 传输与 Shell 别名练习,不构成生产环境安全配置保证。首次连接应向可信渠道核对主机指纹,公钥认证须符合服务器策略;经跳板机逐级登录时,不应为方便而随意复制本机私钥到跳板机。家目录以账户配置为准,加载配置须使用与当前Shell及实际修改文件相对应的指令。软件路径及 Java 版本须按实际环境选择,keepalive 不保证任务持续运行,tmux/screen 也不提供服务器重启或进程终止后的恢复保证。本次仅作全文结构审阅,未外部核验工具信息、链接可达性或实际运行效果。
远程连接与环境配置 - SSH 连接服务器全攻略
abstract 本文概要
- SSH 连接服务器的完整方法
- Mac/Windows 主流终端工具推荐
- SSH 密钥配置,告别每次输密码
- .bashrc/.zshrc 环境配置,让命令行更顺手
SSH 连接服务器
SSH(Secure Shell)是远程连接 Linux 服务器的标准协议。绝大多数数据工作的第一步,就是 SSH 登录服务器。
基本连接命令
# 最基本的 SSH 连接
ssh 用户名@服务器IP地址
# 示例
ssh alice@192.168.1.100
# 指定端口(默认是 22,如果公司改了端口要加 -p)
ssh -p 2222 alice@192.168.1.100
# 连接时指定私钥文件
ssh -i ~/.ssh/my_key.pem alice@192.168.1.100
note 数据工作场景
公司通常有跳板机(堡垒机)。流程是:本机 → 跳板机 → 目标服务器。
# 先连跳板机
ssh alice@jumphost.company.com
# 登录跳板机后,再连目标服务器
ssh alice@10.0.0.100
SSH 配置文件(强烈推荐)
每次都输完整命令太繁琐。在 ~/.ssh/config 文件里配置服务器别名:
# 创建或编辑 SSH 配置文件
vim ~/.ssh/config
# ~/.ssh/config 内容示例
# 跳板机
Host jumphost
HostName jumphost.company.com
User alice
Port 22
# 开发服务器(通过跳板机访问)
Host dev-server
HostName 10.0.0.100
User alice
ProxyJump jumphost
# 大数据集群主节点
Host hadoop-master
HostName 10.0.1.1
User hadoop
IdentityFile ~/.ssh/hadoop_rsa
Port 22
配置完成后,连接只需一句:
# 不用记 IP,不用记端口
ssh dev-server
ssh hadoop-master
tip ProxyJump 替代老式 ProxyCommand
老文章里常见 ProxyCommand ssh -W %h:%p jumphost,现代 SSH 直接用 ProxyJump 更简洁。
SSH 密钥配置(告别每次输密码)
生成 SSH 密钥对
# 生成 RSA 密钥(推荐 4096 位)
ssh-keygen -t rsa -b 4096 -C "your_email@company.com"
# 生成 Ed25519 密钥(更现代、更安全,推荐)
ssh-keygen -t ed25519 -C "your_email@company.com"
# 命令执行后会问:
# Enter file in which to save the key: RSA 默认保存到 ~/.ssh/id_rsa,Ed25519 默认保存到 ~/.ssh/id_ed25519;若提示文件已存在,不要直接确认覆盖
# Enter passphrase: 建议为私钥设置口令,并按需使用 ssh-agent 缓存;留空会使取得私钥的人无需私钥口令即可尝试认证
把公钥传到服务器
# 方法一:ssh-copy-id(最方便)
ssh-copy-id alice@192.168.1.100
# 方法二:手动复制
# 1. 查看你的公钥
cat ~/.ssh/id_ed25519.pub
# 2. 把输出的内容,追加到服务器上的 ~/.ssh/authorized_keys
# 登录服务器后执行:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "粘贴你的公钥内容" >> ~/.ssh/authorized_keys
# 3. 确保权限正确
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
服务器允许公钥认证且公钥、权限配置正确时,ssh alice@192.168.1.100 可不再要求服务器账户密码;私钥若设置了口令,仍可能需要输入口令或通过 ssh-agent 解锁。
warning 权限问题是 SSH 密钥不生效的最常见原因
# 如果密钥不生效,先检查权限
ls -la ~/.ssh/
# 正确权限:
# ~/.ssh/ drwx------(700)
# ~/.ssh/id_ed25519 -rw-------(600)私钥
# ~/.ssh/authorized_keys -rw-------(600)
终端工具推荐
Mac 用户
iTerm2(强烈推荐)
官网:https://iterm2.com/
特点:
- 分屏功能(Command+D 垂直分割,Command+Shift+D 水平分割)
- 搜索(Command+F)、历史命令搜索(Command+R)
- 配色方案丰富,护眼
- 支持鼠标滚轮查看历史输出
常用快捷键:
| 快捷键 | 功能 |
|---|---|
Cmd + D |
垂直分屏 |
Cmd + Shift + D |
水平分屏 |
Cmd + T |
新建标签页 |
Ctrl + R |
搜索历史命令 |
Ctrl + C |
中断当前命令 |
Ctrl + L |
清屏 |
系统自带 Terminal:够用,但不如 iTerm2 强大。
Windows 用户
MobaXterm(推荐)
官网:https://mobaxterm.mobatek.net/
特点:
- 集成 SSH 客户端 + SFTP 文件传输
- 内置 X11 图形界面转发
- 会话管理方便
- 免费版功能已足够日常使用
Windows Terminal + WSL2
适合:想要原生 Linux 体验的 Windows 用户
WSL2(Windows Subsystem for Linux 2)可以在 Windows 上运行真实的 Linux 环境
安装后,直接 ssh 命令、bash 命令都可以用
XShell(国内用户常用)
功能类似 MobaXterm,界面中文友好
环境配置:.bashrc 和 .zshrc
登录服务器后,你的家目录用 ~ 表示,例如 /home/用户名/,实际位置以账户配置为准。Shell 配置文件让你定制命令行环境。
配置文件区别
| 文件 | 加载时机 | 适用 |
|---|---|---|
~/.bashrc |
通常由交互式非登录 Bash 自动读取;SSH 远程命令等场景存在特殊读取规则 | bash 用户 |
~/.bash_profile、~/.bash_login 或 ~/.profile |
Bash 登录 Shell 启动时按此顺序读取首个存在且可读的文件 | bash 用户 |
~/.zshrc |
启动交互式 Zsh 时读取;路径可受 ZDOTDIR 设置影响 | zsh 用户(macOS 等) |
tip 简单记忆
日常改 ~/.bashrc(bash)或 ~/.zshrc(zsh),大部分情况够用。
修改Bash配置后执行 source ~/.bashrc,修改Zsh配置后执行 source ~/.zshrc;仅加载实际修改且对应当前Shell的文件。
实用配置示例
# 编辑配置文件
vim ~/.bashrc
# 以下是 Bash 配置示例,请按需选用,不要整块照抄
# Java/Hadoop/Spark/Conda 路径须替换为实际安装路径,Java 版本须符合所用软件要求
# PS1 与历史配置为 Bash 写法,Zsh 需使用相应配置
# ========================================
# 1. 常用别名(alias)
# ========================================
alias ll='ls -lh' # ll 显示详细列表(含文件大小)
alias la='ls -lha' # la 包含隐藏文件
alias ..='cd ..' # .. 快速回到上层目录
alias ...='cd ../..' # ... 回到上上层
alias vi='vim' # vi 调用 vim
# 数据工作常用别名
alias tailf='tail -f' # 实时查看日志
alias grep='grep --color=auto' # grep 结果高亮显示
# ========================================
# 2. 环境变量
# ========================================
# Java 环境(Hadoop/Spark 需要)
export JAVA_HOME=/usr/java/jdk1.8.0_281
export PATH=$JAVA_HOME/bin:$PATH
# Hadoop 路径
export HADOOP_HOME=/opt/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
# Spark 路径
export SPARK_HOME=/opt/spark
export PATH=$SPARK_HOME/bin:$PATH
# Python/Conda 环境
export PATH=/home/alice/miniconda3/bin:$PATH
# ========================================
# 3. 提示符美化(PS1)
# ========================================
# 显示:用户名@主机名:当前路径$
# \u = 用户名,\h = 主机名,\w = 完整路径,\$ = 权限符
export PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
# ========================================
# 4. 历史命令配置
# ========================================
export HISTSIZE=10000 # 内存中保留 10000 条历史
export HISTFILESIZE=100000 # 文件中保留 100000 条历史
export HISTTIMEFORMAT="%F %T " # 历史记录显示时间戳
# ========================================
# 5. 常用函数
# ========================================
# 创建目录并进入
mkcd() {
mkdir -p "$1" && cd "$1"
}
# 快速查找文件
ff() {
find . -name "*$1*" 2>/dev/null
}
# 让配置立即生效
source ~/.bashrc
常用连接问题排查
连接超时
# 问题:ssh: connect to host xxx port 22: Connection timed out
# 原因:网络不通 / 防火墙阻断 / 端口不对
# 排查:先 ping 看是否能到达
ping 192.168.1.100
# 检查端口是否开放
telnet 192.168.1.100 22
# 或
nc -zv 192.168.1.100 22
连接断开问题
长时间没有操作时,SSH 连接可能因网络设备或服务器的空闲策略而断开;依附当前会话运行的任务也可能随之退出。keepalive 有助于探测连接状态,并可能避免部分网络设备的空闲超时,但不能保证连接不断开或任务持续运行。
# 方法一:在 ~/.ssh/config 中配置 keepalive
Host *
# 未收到服务端数据时,每隔 60 秒发送一次存活探测
ServerAliveInterval 60
# 连续 3 次存活探测未获响应后断开连接
ServerAliveCountMax 3
# 方法二:使用 tmux/screen 运行长时间任务
# 即使断线,任务也继续跑
# 详见 [[【技术与工具】/Linux/09-进程与任务管理]]
权限被拒绝
# 问题:Permission denied (publickey)
# 原因:密钥配置问题
# 排查方法:加 -v 参数看详细日志
ssh -v alice@192.168.1.100
# 检查服务器上的 authorized_keys
cat ~/.ssh/authorized_keys
SCP 快速传文件
连上服务器之后,另一个高频操作是传文件。SCP(Secure Copy)基于 SSH,用法直观:
# 从本地传文件到服务器
scp /本地/文件路径 用户名@服务器:/目标路径/
scp data.csv alice@192.168.1.100:/home/alice/data/
# 从服务器下载文件到本地
scp alice@192.168.1.100:/home/alice/result.csv /本地/目标目录/
# 传整个目录(加 -r 参数)
scp -r /本地/目录 alice@192.168.1.100:/home/alice/
# 使用 SSH 配置的别名
scp data.csv dev-server:/home/alice/data/
更多文件传输方式见 10-网络与数据传输。
小结
| 操作 | 命令/工具 |
|---|---|
| SSH 连接服务器 | ssh 用户名@IP |
| 配置服务器别名 | ~/.ssh/config |
| 免密登录配置 | ssh-keygen + ssh-copy-id |
| Mac 终端工具 | iTerm2 |
| Windows 终端工具 | MobaXterm |
| Shell 环境配置 | ~/.bashrc 或 ~/.zshrc |
| 快速传文件 | scp |
下一步
- 03-文件系统与目录操作 - 登录服务器后,学会在目录中导航
- 09-进程与任务管理 - 解决 SSH 断开导致任务中断的问题(tmux)
info 前置知识
- Linux基础概念 - 理解什么是 Linux,命令行是怎么工作的
- 知道自己的服务器 IP 地址和登录账号(向运维或云服务商确认)
掌握检查
- [ ] 能用
ssh 用户名@IP地址成功连接到远程服务器 - [ ] 配置了
~/.ssh/config,能用服务器别名(如ssh dev)代替完整的 IP 地址登录 - [ ] 完成了 SSH 密钥对的生成和配置,可以免密登录目标服务器
- [ ] 修改了
~/.bashrc或~/.zshrc,添加了至少一个自定义 alias 并已source生效 - [ ] 知道
scp和普通 SSH 的区别,能把本地文件上传到服务器指定目录
实践练习
基础题:配置 SSH 别名。在 ~/.ssh/config 中为你的开发服务器添加一条别名配置,要求用 ssh devbox 即可连接,并验证连接成功。
进阶题:完成免密登录全流程。在本机生成 Ed25519 密钥对,将公钥复制到服务器的 ~/.ssh/authorized_keys,然后验证可以免密登录。最后在 ~/.bashrc 中添加 alias ll='ls -lah',使其永久生效。
下一步
#Linux #SSH #远程连接 #环境配置 #终端工具