凌峰创科服务平台

Linux SSH 登录服务器,如何操作更安全?

目录

  1. SSH 是什么?
  2. 基本登录方法
  3. 常用参数与技巧
  4. 更安全的密钥登录(推荐)
  5. 配置文件 (~/.ssh/config)
  6. 其他实用 SSH 命令
  7. 最佳安全实践

SSH 是什么?

SSH(Secure Shell)是一种网络协议,用于计算机之间的安全通信和数据传输,当你通过 SSH 登录服务器时,所有传输的数据(包括密码)都是经过加密的,有效防止了信息被窃听。

Linux SSH 登录服务器,如何操作更安全?-图1
(图片来源网络,侵删)

基本登录方法

这是最直接、最简单的登录方式。

命令格式:

ssh [用户名]@[服务器IP地址或域名]

示例: 假设你的服务器用户名是 ubuntu,IP 地址是 168.1.100

ssh ubuntu@192.168.1.100

首次登录: 当你第一次连接到一个新的服务器时,系统会显示服务器的公钥指纹(fingerprint),并询问你是否信任该主机,这是因为 SSH 无法确认你连接的就是正确的服务器,可能存在中间人攻击的风险。

Linux SSH 登录服务器,如何操作更安全?-图2
(图片来源网络,侵删)
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 命令有很多有用的参数,可以让你更高效、更安全地工作。

Linux SSH 登录服务器,如何操作更安全?-图3
(图片来源网络,侵删)
参数 全称 描述 示例
-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_rsaid_rsa.pub 文件(或者你想生成一个新的),请运行以下命令:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  • -t rsa: 指定密钥类型为 RSA。
  • -b 4096: 指定密钥长度为 4096 位,更安全。
  • -C "...": 添加一个注释,通常是你的邮箱,方便识别。

命令会提示你:

  1. 保存位置:直接按回车,使用默认的 ~/.ssh/id_rsa
  2. 密码(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 不可用,你可以手动操作。

  1. 查看公钥内容

    cat ~/.ssh/id_rsa.pub

    复制输出的全部内容(形如 ssh-rsa AAAA... your_email@example.com)。

  2. 登录到服务器(使用密码登录):

    ssh user@remote_host
  3. 在服务器上创建目录和文件

    # 确保目录存在
    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。

最佳安全实践

  1. 使用密钥登录:始终优先使用 SSH 密钥对进行认证,并为其设置 Passphrase。
  2. 禁用密码登录:在服务器的 SSH 配置文件 (/etc/ssh/sshd_config) 中,将 PasswordAuthentication 设置为 no,修改后需要重启 SSH 服务 (sudo systemctl restart sshd),这可以极大地防止暴力破解攻击。
  3. 使用非标准端口:将 SSH 默认的 22 端口修改为一个其他不常用的端口,可以自动过滤掉大量自动化扫描攻击。
  4. 使用防火墙:只允许来自特定 IP 地址的连接访问 SSH 端口。
  5. 定期更新:保持你的系统和 OpenSSH 软件包为最新版本。
  6. 使用 fail2ban:这是一个防止暴力破解的工具,它可以自动封禁在短时间内多次登录失败的黑客 IP。

希望这份详细的指南能帮助你熟练掌握 Linux SSH 登录!

分享:
扫描分享到社交APP
上一篇
下一篇