SSH连接与基础操作
本指南将教您如何使用SSH安全连接到VPS,配置密钥认证,以及掌握Linux系统的基础命令操作。学完本教程,您将能够熟练管理您的VPS服务器。
什么是SSH
SSH(Secure Shell)是一种网络协议,用于在不安全的网络中安全地访问和管理远程服务器。
SSH的主要特点
加密传输
所有数据都经过加密,防止中间人攻击
身份验证
支持密码和密钥两种认证方式
远程管理
可以像操作本地电脑一样管理服务器
端口转发
支持安全的端口转发功能
🌐 默认端口
SSH默认使用 22端口 进行通信。为了安全,建议修改为其他端口。
SSH客户端选择
不同操作系统的SSH客户端
🪟 Windows系统
🍎 macOS系统
🐧 Linux系统
首次连接
密码认证连接步骤
获取连接信息
从VPS服务商处获取:
- IP地址:如 192.168.1.100
- 用户名:通常是 root
- 密码:初始密码或自设密码
- 端口:默认22(可能已修改)
打开SSH客户端
根据您的操作系统打开相应的终端或SSH客户端
输入连接命令
基础格式:
ssh username@ip_address
指定端口:
ssh -p 2222 username@ip_address
实际示例:
ssh root@192.168.1.100
首次连接确认
第一次连接时会看到主机密钥确认提示:
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
并回车确认
输入密码
输入密码时屏幕不会显示任何字符(这是正常的安全特性)
成功登录
看到类似下面的提示表示登录成功:
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:~#
首次登录后建议操作
1. 修改root密码
passwd
设置一个强密码,包含大小写字母、数字和特殊字符
2. 更新系统
apt update && apt upgrade -y
更新所有软件包到最新版本
3. 创建普通用户
adduser username
避免直接使用root账户进行日常操作
4. 配置防火墙
ufw allow 22/tcp && ufw enable
开启防火墙保护服务器安全
密钥认证
为什么使用SSH密钥?
设置SSH密钥认证
在本地生成密钥对
生成密钥
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
参数说明:
-t rsa
:使用RSA算法-b 4096
:密钥长度4096位-C
:添加注释(通常是邮箱)
选择保存位置
按回车使用默认位置,或输入自定义路径:
Enter file in which to save the key (/home/user/.ssh/id_rsa):
设置密码短语(可选)
为密钥添加额外保护,也可以直接回车跳过:
Enter passphrase (empty for no passphrase):
查看生成的密钥
查看公钥内容:
cat ~/.ssh/id_rsa.pub
id_rsa
- 私钥(保密)id_rsa.pub
- 公钥(上传到服务器)
上传公钥到服务器
方法1:使用ssh-copy-id(推荐)
ssh-copy-id username@server_ip
自动将公钥添加到服务器的 authorized_keys 文件
方法2:手动复制
- 复制公钥内容:
cat ~/.ssh/id_rsa.pub
- 登录服务器:
ssh username@server_ip
- 创建.ssh目录:
mkdir -p ~/.ssh && chmod 700 ~/.ssh
- 添加公钥:
echo "公钥内容" >> ~/.ssh/authorized_keys
- 设置权限:
chmod 600 ~/.ssh/authorized_keys
禁用密码登录(可选但推荐)
- 编辑SSH配置文件:
sudo nano /etc/ssh/sshd_config
- 修改以下配置:
PasswordAuthentication no PubkeyAuthentication yes ChallengeResponseAuthentication no
- 重启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 / LinuxWinSCP
Windows专用,界面友好
WindowsCyberduck
简洁美观,支持多协议
Windows / macOSSSH配置优化
客户端配置文件
创建或编辑 ~/.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
安全建议
🔒 修改默认端口
将SSH端口从22改为其他端口:
Port 2222
🚫 禁止root登录
强制使用普通用户登录:
PermitRootLogin no
📝 限制用户
只允许特定用户SSH登录:
AllowUsers user1 user2
⏱️ 登录超时
设置登录超时时间:
LoginGraceTime 60
故障排查
常见问题及解决方案
❌ Connection refused
可能原因:
- SSH服务未启动
- 防火墙阻止了SSH端口
- SSH端口配置错误
解决方法:
- 检查SSH服务状态:
systemctl status sshd
- 检查防火墙规则:
ufw status
- 确认SSH端口:
grep Port /etc/ssh/sshd_config
❌ Permission denied
可能原因:
- 密码错误
- 用户名错误
- 密钥权限问题
- SSH配置禁止该用户登录
解决方法:
- 确认用户名和密码
- 检查密钥文件权限:
chmod 600 ~/.ssh/id_rsa
- 查看详细错误信息:
ssh -vvv user@server
❌ Host key verification failed
可能原因:
- 服务器重装系统
- 服务器IP被其他主机使用
- 中间人攻击(较少见)
解决方法:
- 删除旧的主机密钥:
ssh-keygen -R server_ip
- 重新连接并接受新密钥
❌ Connection timeout
可能原因:
- 网络连接问题
- 服务器宕机
- IP地址错误
- 防火墙阻止
解决方法:
- ping测试连通性:
ping server_ip
- 使用telnet测试端口:
telnet server_ip 22
- 检查本地防火墙设置
调试技巧
🔍 详细输出
使用 -v 参数查看详细连接过程:
ssh -v user@server
更详细:-vv
或 -vvv
📋 查看日志
服务器端SSH日志位置:
/var/log/auth.log
或
/var/log/secure
🧪 测试配置
测试SSH配置文件语法:
sshd -t
🎯 实践练习
完成以下练习,巩固所学知识:
练习1:基础连接
- 使用密码连接到您的VPS
- 查看当前目录和系统信息
- 创建一个测试文件
练习2:密钥认证
- 生成SSH密钥对
- 将公钥上传到服务器
- 测试密钥登录
- 禁用密码认证
练习3:文件传输
- 使用SCP上传文件
- 使用SFTP浏览服务器文件
- 使用rsync同步目录