在Linux环境下,SSH已成为远程登录与控制服务器最主流的协议。通过SSH,用户可以安全地在本地终端执行远程命令、传输文件,甚至进行加密隧道通信。相比传统的Telnet或FTP,SSH不仅支持加密传输,还具备认证灵活、安全性高、配置灵活等优点。本文将系统讲解如何在Linux中使用SSH命令连接远程服务器。
一、SSH协议的基本原理
SSH是建立在TCP协议之上的一种加密远程通信协议,默认使用22端口。其设计初衷是取代明文传输的Telnet,实现安全加密的远程登录、命令执行与文件操作。
SSH通信采用公钥加密与对称加密相结合的方式:在初次连接时通过公钥交换验证身份,会话中使用对称加密加快传输效率,支持基于密码或密钥的认证方式。这使得即便在公网环境下,攻击者也无法窃取登录凭据或监听命令内容。
二、SSH命令基本语法
在Linux系统中,SSH客户端已内置在大多数发行版中。其基本连接命令格式为:
ssh [用户]@[主机] [-p 端口号] [参数]
例如:
ssh root@192.168.1.100
这表示以 root 用户身份连接目标服务器 192.168.1.100,默认使用22端口。
如果目标服务器端口非默认,可使用 -p 参数指定:
ssh user@example.com -p 2222
连接后,系统会提示输入目标主机账号的登录密码。若验证成功,即进入远程命令行交互状态。
三、使用密钥认证替代密码登录
虽然SSH支持密码认证,但为了提升安全性,推荐使用非对称密钥认证方式。
1. 在本地生成密钥对
执行以下命令:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
过程会提示输入保存路径(默认 ~/.ssh/id_rsa)和可选的密码短语。
完成后,会生成两份文件:
id_rsa:私钥文件,严禁泄露;
id_rsa.pub:公钥文件,可安全传输。
2. 将公钥上传到远程服务器
可使用 ssh-copy-id 命令:
ssh-copy-id -i ~/.ssh/id_rsa.pub user@192.168.1.100
系统将自动将公钥追加到远程主机的 ~/.ssh/authorized_keys 文件中。
也可手动上传并设置权限:
scp ~/.ssh/id_rsa.pub user@remote:/tmp
ssh user@remote
mkdir -p ~/.ssh
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
rm /tmp/id_rsa.pub
3. 使用密钥连接远程主机
之后可直接执行:
ssh user@192.168.1.100
无需输入密码,若私钥设置了短语,会提示输入短语。
如密钥文件不在默认位置,可指定私钥路径:
ssh -i /path/to/id_rsa user@host
四、配置 SSH 客户端文件简化连接
频繁连接多个服务器时,可配置 ~/.ssh/config 文件,提高效率。例如:
Host devserver
HostName 192.168.1.100
User ubuntu
Port 2222
IdentityFile ~/.ssh/dev_rsa
之后只需执行:
ssh devserver
就能自动带入用户名、端口、密钥路径等参数。
多个配置块可共存,例如:
Host ali-prod
HostName 47.91.x.x
User root
Port 22
IdentityFile ~/.ssh/ali_rsa
Host tencent-test
HostName 119.29.x.x
User ubuntu
Port 2022
IdentityFile ~/.ssh/tencent_id_rsa
五、如何上传和下载文件?
SSH支持基于SCP和SFTP的文件传输。
1. 使用 scp 上传文件
scp localfile.txt user@remote:/home/user/
将 localfile.txt 上传至远程服务器指定路径。
递归上传目录:
scp -r myfolder/ user@remote:/home/user/
2. 从远程服务器下载文件
scp user@remote:/home/user/data.zip .
下载 data.zip 至当前目录。
3. 使用 sftp 进行交互式操作
sftp user@remote
登录后可使用:
ls:列出远程目录;
cd:切换远程目录;
put localfile:上传;
get remotefile:下载。
六、增强 SSH 安全性的实践建议
为了保障远程服务器不被恶意攻击,可按如下策略配置:
1. 禁用密码登录
编辑远程主机 /etc/ssh/sshd_config:
PasswordAuthentication no
PermitRootLogin no
然后重启服务:
sudo systemctl restart sshd
确保仅通过密钥登录。
2. 修改默认端口号
将 Port 22 改为其他不常见端口(如 2222、2828)以减少扫描破解。
Port 2222
修改后别忘记在本地连接命令中使用 -p 指定新端口。
3. 使用 Fail2Ban 防止破解
安装:
sudo apt install fail2ban
配置 /etc/fail2ban/jail.local,开启 SSH 防护策略。
掌握 SSH 命令不仅是 Linux 运维人员的基本技能,更是开发者、数据库工程师、安全工程师日常工作的必备工具。从最初的命令行连接,到密钥认证、配置优化、安全策略部署,再到隧道转发与文件同步,SSH 涵盖了远程管理中最重要的一系列环节。
正确使用 SSH,可以极大提升服务器访问的效率与安全性。尤其是在多节点部署、自动化脚本、CI/CD集成的场景下,SSH的自动登录与无缝控制能力已成为系统架构中的基础组件。