未记录事实核验 · 状态:现行内容

记录仅说明核验时间与维护状态,不保证适用于所有环境;使用前请留意正文中的版本、适用条件与风险提示。

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

下一步


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 #远程连接 #环境配置 #终端工具