SSH连接与基础操作

📖 阅读时间:20分钟 🎯 难度:初级 👥 适合人群:Linux新手

本指南将教您如何使用SSH安全连接到VPS,配置密钥认证,以及掌握Linux系统的基础命令操作。学完本教程,您将能够熟练管理您的VPS服务器。

🔐 什么是SSH

SSH(Secure Shell)是一种网络协议,用于在不安全的网络中安全地访问和管理远程服务器。

SSH的主要特点

🔒

加密传输

所有数据都经过加密,防止中间人攻击

🔑

身份验证

支持密码和密钥两种认证方式

📡

远程管理

可以像操作本地电脑一样管理服务器

🚀

端口转发

支持安全的端口转发功能

🌐 默认端口

SSH默认使用 22端口 进行通信。为了安全,建议修改为其他端口。

💻 SSH客户端选择

不同操作系统的SSH客户端

🪟 Windows系统

PuTTY

经典SSH客户端,功能丰富

下载地址
MobaXterm

功能强大,支持SFTP、X11转发

下载地址

🍎 macOS系统

iTerm2

增强版终端,功能更丰富

下载地址

🐧 Linux系统

🚀 首次连接

密码认证连接步骤

1

获取连接信息

从VPS服务商处获取:

  • IP地址:如 192.168.1.100
  • 用户名:通常是 root
  • 密码:初始密码或自设密码
  • 端口:默认22(可能已修改)
2

打开SSH客户端

根据您的操作系统打开相应的终端或SSH客户端

3

输入连接命令

基础格式:

ssh username@ip_address

指定端口:

ssh -p 2222 username@ip_address

实际示例:

ssh root@192.168.1.100
4

首次连接确认

第一次连接时会看到主机密钥确认提示:

The authenticity of host '192.168.1.100' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)?

输入 yes 并回车确认

5

输入密码

输入密码时屏幕不会显示任何字符(这是正常的安全特性)

⚠️ 注意:密码输入错误3次可能会被暂时锁定
6

成功登录

看到类似下面的提示表示登录成功:

Welcome to Ubuntu 22.04 LTS (GNU/Linux 5.15.0-56-generic x86_64)
Last login: Mon Dec 11 10:23:45 2023 from 1.2.3.4
root@vps:~#

🔑 密钥认证

为什么使用SSH密钥?

🔒 更安全:密钥比密码更难破解
更方便:无需每次输入密码
🛡️ 防暴力破解:可以禁用密码登录

设置SSH密钥认证

在本地生成密钥对

1
生成密钥
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

参数说明:

  • -t rsa:使用RSA算法
  • -b 4096:密钥长度4096位
  • -C:添加注释(通常是邮箱)
2
选择保存位置

按回车使用默认位置,或输入自定义路径:

Enter file in which to save the key (/home/user/.ssh/id_rsa):
3
设置密码短语(可选)

为密钥添加额外保护,也可以直接回车跳过:

Enter passphrase (empty for no passphrase):
4
查看生成的密钥

查看公钥内容:

cat ~/.ssh/id_rsa.pub
📁 密钥文件说明:
  • id_rsa - 私钥(保密)
  • id_rsa.pub - 公钥(上传到服务器)

上传公钥到服务器

方法1:使用ssh-copy-id(推荐)
ssh-copy-id username@server_ip

自动将公钥添加到服务器的 authorized_keys 文件

方法2:手动复制
  1. 复制公钥内容: cat ~/.ssh/id_rsa.pub
  2. 登录服务器: ssh username@server_ip
  3. 创建.ssh目录: mkdir -p ~/.ssh && chmod 700 ~/.ssh
  4. 添加公钥: echo "公钥内容" >> ~/.ssh/authorized_keys
  5. 设置权限: chmod 600 ~/.ssh/authorized_keys

禁用密码登录(可选但推荐)

⚠️ 确保密钥登录正常工作后再执行此操作!
  1. 编辑SSH配置文件: sudo nano /etc/ssh/sshd_config
  2. 修改以下配置:
    PasswordAuthentication no
    PubkeyAuthentication yes
    ChallengeResponseAuthentication no
  3. 重启SSH服务: sudo systemctl restart sshd

⌨️ 基础命令

Linux常用命令详解

系统信息

命令 说明 示例
pwd 显示当前目录路径 pwd
whoami 显示当前用户名 whoami
uname -a 显示系统信息 uname -a
df -h 查看磁盘使用情况 df -h
free -h 查看内存使用情况 free -h
top 实时查看进程状态 top

文件操作

命令 说明 示例
ls 列出目录内容 ls -la
cd 切换目录 cd /home
mkdir 创建目录 mkdir newfolder
touch 创建文件 touch file.txt
cp 复制文件/目录 cp file1.txt file2.txt
mv 移动/重命名 mv old.txt new.txt
rm 删除文件/目录 rm -rf folder

文件查看与编辑

命令 说明 示例
cat 显示文件内容 cat file.txt
less 分页查看文件 less largefile.log
head 显示文件开头 head -n 10 file.txt
tail 显示文件结尾 tail -f /var/log/syslog
nano 简单文本编辑器 nano file.txt
vim 高级文本编辑器 vim file.txt

权限管理

命令 说明 示例
chmod 修改文件权限 chmod 755 script.sh
chown 修改文件所有者 chown user:group file.txt
sudo 以管理员权限执行 sudo apt update
su 切换用户 su - username

实用技巧

📍 Tab自动补全

输入命令或路径时按Tab键可以自动补全

⬆️ 命令历史

使用上下箭头键浏览历史命令

🔍 搜索历史

Ctrl+R 搜索历史命令

📋 复制粘贴

Ctrl+Shift+C/V 在终端中复制粘贴

📁 文件传输

SSH文件传输方式

SCP - 安全复制

用于在本地和服务器之间复制文件

上传文件到服务器:
scp local_file.txt user@server:/remote/path/
从服务器下载文件:
scp user@server:/remote/file.txt ./local_path/
上传整个目录:
scp -r local_folder/ user@server:/remote/path/

SFTP - SSH文件传输协议

交互式文件传输,类似FTP但更安全

连接到服务器:
sftp user@server
常用SFTP命令:
ls - 列出远程目录
lls - 列出本地目录
get file.txt - 下载文件
put file.txt - 上传文件
exit - 退出SFTP

rsync - 高效同步

增量同步,只传输变化的部分

同步目录:
rsync -avz local_dir/ user@server:/remote_dir/
参数说明:
  • -a - 归档模式,保留权限
  • -v - 显示详细信息
  • -z - 压缩传输

图形化工具推荐

FileZilla

跨平台,支持SFTP

Windows / macOS / Linux
WinSCP

Windows专用,界面友好

Windows
Cyberduck

简洁美观,支持多协议

Windows / macOS

⚙️ SSH配置优化

客户端配置文件

创建或编辑 ~/.ssh/config 文件,简化SSH连接:

配置示例

# 我的VPS服务器
Host myvps
    HostName 192.168.1.100
    User root
    Port 22
    IdentityFile ~/.ssh/id_rsa
    
# 开发服务器
Host dev
    HostName dev.example.com
    User developer
    Port 2222
    ForwardAgent yes
使用方法:

配置后可以直接使用别名连接:

ssh myvps

而不需要输入完整命令:

ssh root@192.168.1.100

常用配置选项

选项 说明 示例
ServerAliveInterval 保持连接活跃,防止超时断开 ServerAliveInterval 60
Compression 启用压缩,提高传输速度 Compression yes
ForwardAgent 转发SSH代理 ForwardAgent yes
StrictHostKeyChecking 自动接受新主机密钥 StrictHostKeyChecking no
LocalForward 本地端口转发 LocalForward 8080 localhost:80

安全建议

🔒 修改默认端口

将SSH端口从22改为其他端口:

Port 2222
🚫 禁止root登录

强制使用普通用户登录:

PermitRootLogin no
📝 限制用户

只允许特定用户SSH登录:

AllowUsers user1 user2
⏱️ 登录超时

设置登录超时时间:

LoginGraceTime 60

🔧 故障排查

常见问题及解决方案

❌ Connection refused

可能原因:

  • SSH服务未启动
  • 防火墙阻止了SSH端口
  • SSH端口配置错误

解决方法:

  1. 检查SSH服务状态: systemctl status sshd
  2. 检查防火墙规则: ufw status
  3. 确认SSH端口: grep Port /etc/ssh/sshd_config

❌ Permission denied

可能原因:

  • 密码错误
  • 用户名错误
  • 密钥权限问题
  • SSH配置禁止该用户登录

解决方法:

  1. 确认用户名和密码
  2. 检查密钥文件权限: chmod 600 ~/.ssh/id_rsa
  3. 查看详细错误信息: ssh -vvv user@server

❌ Host key verification failed

可能原因:

  • 服务器重装系统
  • 服务器IP被其他主机使用
  • 中间人攻击(较少见)

解决方法:

  1. 删除旧的主机密钥: ssh-keygen -R server_ip
  2. 重新连接并接受新密钥

❌ Connection timeout

可能原因:

  • 网络连接问题
  • 服务器宕机
  • IP地址错误
  • 防火墙阻止

解决方法:

  1. ping测试连通性: ping server_ip
  2. 使用telnet测试端口: telnet server_ip 22
  3. 检查本地防火墙设置

调试技巧

🔍 详细输出

使用 -v 参数查看详细连接过程:

ssh -v user@server

更详细:-vv-vvv

📋 查看日志

服务器端SSH日志位置:

/var/log/auth.log

/var/log/secure
🧪 测试配置

测试SSH配置文件语法:

sshd -t

🎯 实践练习

完成以下练习,巩固所学知识:

练习1:基础连接

  1. 使用密码连接到您的VPS
  2. 查看当前目录和系统信息
  3. 创建一个测试文件

练习2:密钥认证

  1. 生成SSH密钥对
  2. 将公钥上传到服务器
  3. 测试密钥登录
  4. 禁用密码认证

练习3:文件传输

  1. 使用SCP上传文件
  2. 使用SFTP浏览服务器文件
  3. 使用rsync同步目录

掌握SSH了!接下来...

恭喜您学会了SSH的基础操作,可以继续学习: