目录
- SSH 是什么?
- 基本登录方法
- 常用参数与技巧
- 更安全的密钥登录(推荐)
- 配置文件 (
~/.ssh/config) - 其他实用 SSH 命令
- 最佳安全实践
SSH 是什么?
SSH(Secure Shell)是一种网络协议,用于计算机之间的安全通信和数据传输,当你通过 SSH 登录服务器时,所有传输的数据(包括密码)都是经过加密的,有效防止了信息被窃听。

基本登录方法
这是最直接、最简单的登录方式。
命令格式:
ssh [用户名]@[服务器IP地址或域名]
示例:
假设你的服务器用户名是 ubuntu,IP 地址是 168.1.100。
ssh ubuntu@192.168.1.100
首次登录: 当你第一次连接到一个新的服务器时,系统会显示服务器的公钥指纹(fingerprint),并询问你是否信任该主机,这是因为 SSH 无法确认你连接的就是正确的服务器,可能存在中间人攻击的风险。

The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
输入 yes 并回车,该主机的信息就会被保存在你本地的 ~/.ssh/known_hosts 文件中,之后再次连接就不会再提示了。
输入密码: 连接确认后,系统会提示你输入该用户的密码。注意:输入密码时不会显示任何字符(光标也不会移动),这是正常的安全设计,直接输入后按回车即可。
ubuntu@192.168.1.100's password:
登录成功后,你就可以在服务器的命令行界面进行操作了。
常用参数与技巧
SSH 命令有很多有用的参数,可以让你更高效、更安全地工作。

| 参数 | 全称 | 描述 | 示例 |
|---|---|---|---|
-p |
port |
指定连接的端口号,SSH 默认使用 22 端口。 | ssh -p 2222 user@host |
-i |
identity_file |
指定用于身份验证的私钥文件路径。 | ssh -i ~/.ssh/my_key user@host |
-l |
login_name |
指定登录用户名,与 user@host 中的 user 效果相同。 |
ssh -l admin host |
-C |
compression |
启用数据压缩,对于慢速网络很有用。 | ssh -C user@host |
-X |
X11_forwarding |
启用 X11 转发,允许你在本地运行远程服务器上的图形界面程序。 | ssh -X user@host |
-Y |
trusted_X11_forwarding |
启用受信任的 X11 转发,安全性低于 -X,但功能更强。 |
ssh -Y user@host |
-N |
no_shell |
不执行远程命令,仅用于端口转发。 | ssh -N -L 8080:localhost:80 user@host |
-f |
background |
在后台运行 SSH 命令,常与 -N 配合使用。 |
ssh -f -N -L 8080:localhost:80 user@host |
-v |
verbose |
详细模式,用于调试连接问题,可以重复使用(如 -vvv)来显示更多信息。 |
ssh -v user@host |
更安全的密钥登录(强烈推荐)
每次输入密码既麻烦又不安全,SSH 密钥对是一种更安全、更便捷的认证方式。
工作原理:
- 你在你的电脑上生成一对密钥:一个私钥(必须保密,保存在本地)和一个公钥(可以公开)。
- 你将公钥上传到服务器上的
~/.ssh/authorized_keys文件中。 - 当你登录时,SSH 会用你的私钥去证明你的身份,整个过程无需输入密码。
在本地电脑生成密钥对
如果你的 ~/.ssh 目录下没有 id_rsa 和 id_rsa.pub 文件(或者你想生成一个新的),请运行以下命令:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
-t rsa: 指定密钥类型为 RSA。-b 4096: 指定密钥长度为 4096 位,更安全。-C "...": 添加一个注释,通常是你的邮箱,方便识别。
命令会提示你:
- 保存位置:直接按回车,使用默认的
~/.ssh/id_rsa。 - 密码(Passphrase):可以为私钥设置一个额外的密码,这会在使用私钥时再次要求输入,即使私钥文件被盗也无法直接使用。强烈建议设置! 如果不想设置,直接按回车。
执行后,你会得到两个文件:
~/.ssh/id_rsa:私钥,不要泄露!~/.ssh/id_rsa.pub:公钥,可以放心分享。
将公钥上传到服务器
你有两种常用方法将公钥内容复制到服务器上。
使用 ssh-copy-id 命令(最简单)
如果你的本地系统支持这个命令(大多数 Linux 和 macOS 都有),这是最简单的方法。
ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote_host
它会自动将公钥追加到服务器上 user 用户的 ~/.ssh/authorized_keys 文件中,并设置好正确的权限。
手动复制
ssh-copy-id 不可用,你可以手动操作。
-
查看公钥内容:
cat ~/.ssh/id_rsa.pub
复制输出的全部内容(形如
ssh-rsa AAAA... your_email@example.com)。 -
登录到服务器(使用密码登录):
ssh user@remote_host
-
在服务器上创建目录和文件:
# 确保目录存在 mkdir -p ~/.ssh # 设置正确的权限(非常重要!) chmod 700 ~/.ssh # 将公钥内容追加到 authorized_keys 文件中 # (粘贴你刚才复制的公钥内容) echo "粘贴你的公钥内容到这里" >> ~/.ssh/authorized_keys # 设置文件权限 chmod 600 ~/.ssh/authorized_keys
使用密钥登录
你可以直接尝试登录了,系统将不再提示你输入密码。
ssh user@remote_host
如果你在生成密钥时设置了 Passphrase,系统会要求你输入它,如果你不想每次都输入,可以使用 ssh-agent 来缓存密码。
配置文件 (~/.ssh/config)
当你需要频繁连接多台服务器时,每次都输入长长的命令会很繁琐。~/.ssh/config 文件可以帮你解决这个问题。
编辑配置文件:
nano ~/.ssh/config
配置示例:
# 为公司服务器起个别名 'work-server'
Host work-server
HostName 192.168.1.100
User admin
Port 2222
IdentityFile ~/.ssh/work_key
Compression yes
# 为个人服务器起个别名 'home-pi'
Host home-pi
HostName home.example.com
User pi
IdentityFile ~/.ssh/pi_key
# 默认配置,适用于所有未明确指定的主机
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
配置项说明:
Host: 你在命令行中使用的别名(ssh work-server)。HostName: 服务器的真实 IP 或域名。User: 默认登录用户名。Port: 默认端口号。IdentityFile: 默认使用的私钥文件路径。Compression: 是否启用压缩。
使用配置文件后,登录变得非常简单:
ssh work-server
SSH 会自动从配置文件中读取所有相关信息。
其他实用 SSH 命令
-
安全地复制文件 (
scp)scp(secure copy) 基于 SSH 协议,用于在本地和远程之间安全地复制文件。# 从本地复制到远程 scp -P 2222 /path/to/local_file.txt user@remote:/path/to/remote_dir/ # 从远程复制到本地 scp -P 2222 user@remote:/path/to/remote_file.txt /path/to/local_dir/ # 复制整个目录(加上 -r 参数) scp -r -P 2222 /path/to/local_dir/ user@remote:/path/to/remote_dir/
-
安全地同步目录 (
rsync)rsync是一个更强大的工具,它可以只同步文件的变化,非常适合备份。# 同步本地目录到远程目录 rsync -avz -e "ssh -p 2222" /path/to/local_dir/ user@remote:/path/to/remote_dir/
-a: 归档模式,保留权限、时间戳等。-v: 详细模式。-z: 压缩数据传输。-e "...": 指定远程 shell 为带特定端口的 SSH。
最佳安全实践
- 使用密钥登录:始终优先使用 SSH 密钥对进行认证,并为其设置 Passphrase。
- 禁用密码登录:在服务器的 SSH 配置文件 (
/etc/ssh/sshd_config) 中,将PasswordAuthentication设置为no,修改后需要重启 SSH 服务 (sudo systemctl restart sshd),这可以极大地防止暴力破解攻击。 - 使用非标准端口:将 SSH 默认的 22 端口修改为一个其他不常用的端口,可以自动过滤掉大量自动化扫描攻击。
- 使用防火墙:只允许来自特定 IP 地址的连接访问 SSH 端口。
- 定期更新:保持你的系统和 OpenSSH 软件包为最新版本。
- 使用
fail2ban:这是一个防止暴力破解的工具,它可以自动封禁在短时间内多次登录失败的黑客 IP。
希望这份详细的指南能帮助你熟练掌握 Linux SSH 登录!
