SSH客户端使用:远程服务器登录完全攻略 – wiki词典

SSH客户端使用:远程服务器登录完全攻略

SSH (Secure Shell) 是一种加密的网络协议,用于在不安全的网络上安全地执行网络服务。最常见的用途是远程登录到服务器,执行命令行操作。本攻略将详细介绍SSH客户端的使用,帮助您轻松实现远程服务器登录。

一、 SSH工作原理简介

SSH协议基于客户端-服务器模型。当您使用SSH客户端连接到远程SSH服务器时,双方会建立一个安全的加密通道。在这个通道中,所有传输的数据(包括您的用户名、密码、命令和服务器响应)都将被加密,从而防止窃听和篡改。

SSH支持多种认证方式:
1. 密码认证 (Password Authentication):最简单也最常见的认证方式,需要输入服务器上用户的密码。
2. 密钥认证 (Key-based Authentication):更安全、更推荐的方式。客户端生成一对密钥(公钥和私钥),将公钥上传到服务器,私钥保留在客户端。连接时,服务器会使用公钥验证客户端的私钥,无需输入密码。

二、 常用SSH客户端

不同的操作系统有不同的SSH客户端:

1. Linux/macOS (内置)
Linux和macOS系统自带OpenSSH客户端,可以直接在终端中使用 ssh 命令。

2. Windows
* Windows 10/11 (内置OpenSSH):现代Windows版本也内置了OpenSSH客户端,可以在PowerShell或命令提示符中使用 ssh 命令。
* PuTTY:一款历史悠久且功能强大的第三方SSH客户端,界面友好,适合习惯图形界面的用户。
* Git Bash:如果您安装了Git for Windows,Git Bash也提供了OpenSSH客户端。
* WSL (Windows Subsystem for Linux):在WSL环境中,您可以像在Linux中一样使用 ssh 命令。

三、 SSH基本用法 (以Linux/macOS/Windows内置OpenSSH为例)

最基本的SSH登录命令格式如下:

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

示例:
假设您的服务器IP是 192.168.1.100,用户名是 user

bash
ssh [email protected]

  • 首次连接
    首次连接一台新的服务器时,系统会提示您确认服务器的RSA密钥指纹。这是为了验证您连接的是正确的服务器,防止中间人攻击。输入 yes 并按回车键,该服务器的指纹将被添加到 ~/.ssh/known_hosts 文件中。

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

  • 输入密码
    确认指纹后,系统会提示您输入密码(如果您使用的是密码认证)。

    bash
    [email protected]'s password:

    输入密码时,屏幕上不会显示任何字符(包括星号),这是正常的安全行为。输入完毕后按回车键即可。

  • 指定端口
    如果SSH服务器运行在非标准端口(默认为22),您需要使用 -p 参数指定端口号:

    “`bash
    ssh -p [端口号] [用户名]@[服务器IP地址或域名]

    示例:服务器SSH端口为2222

    ssh -p 2222 [email protected]
    “`

四、 密钥认证 (更安全、更推荐)

密钥认证比密码认证更安全,因为它不需要在每次登录时传输密码。

1. 生成SSH密钥对 (客户端操作)

在您的本地机器上,打开终端或PowerShell,运行以下命令生成密钥对:

bash
ssh-keygen -t rsa -b 4096

  • -t rsa:指定密钥类型为RSA。
  • -b 4096:指定密钥长度为4096位(更安全,默认为2048)。

命令执行后,会有一系列提示:
* Enter file in which to save the key (~/.ssh/id_rsa):
这是密钥对的保存路径。默认是 ~/.ssh/id_rsa (私钥) 和 ~/.ssh/id_rsa.pub (公钥)。直接按回车使用默认路径即可。
* Enter passphrase (empty for no passphrase):
为您的私钥设置一个密码(passphrase)。这是一个非常重要的安全措施。即使私钥被盗,没有passphrase也无法使用。强烈建议设置一个复杂passphrase。如果您选择不设置,直接按回车,但安全性会降低。

成功生成后,您会在 ~/.ssh/ 目录下看到两个文件:
* id_rsa:您的私钥 (Private Key)。绝对不能泄露给任何人!
* id_rsa.pub:您的公钥 (Public Key)。可以安全地分享给服务器。

2. 将公钥上传到服务器 (客户端操作)

将公钥上传到远程服务器有几种方法:

  • 使用 ssh-copy-id (推荐,如果可用)
    这是最简单自动化的方式。

    “`bash
    ssh-copy-id -i ~/.ssh/id_rsa.pub [用户名]@[服务器IP地址或域名]

    示例

    ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
    ``
    该命令会连接到服务器,并尝试将
    id_rsa.pub的内容添加到服务器用户目录下的~/.ssh/authorized_keys` 文件中。您可能需要输入一次服务器密码。

  • 手动上传
    如果 ssh-copy-id 不可用,您可以手动将公钥内容复制到服务器。
    a. 在本地终端查看公钥内容:
    bash
    cat ~/.ssh/id_rsa.pub

    复制输出的完整内容。

    b. 使用密码认证登录到服务器:
    bash
    ssh [email protected]

    c. 在服务器上创建 .ssh 目录并设置权限 (如果不存在):
    bash
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh

    d. 将公钥内容追加到 authorized_keys 文件中:
    bash
    echo "【在这里粘贴您复制的公钥内容】" >> ~/.ssh/authorized_keys

    注意: 确保您粘贴的是一行完整的公钥,不要有换行。

    e. 设置 authorized_keys 文件的权限:
    bash
    chmod 600 ~/.ssh/authorized_keys

    f. 退出服务器:
    bash
    exit

3. 使用密钥登录

一旦公钥成功上传到服务器,下次登录时,您就可以使用密钥进行认证了。

bash
ssh [email protected]

如果您的私钥设置了passphrase,系统会提示您输入passphrase,而不是服务器密码。

五、 SSH配置文件 (~/.ssh/config)

为了方便管理多个SSH连接,您可以编辑 ~/.ssh/config 文件来简化登录命令。

创建或编辑配置文件:
bash
nano ~/.ssh/config # 或者 vim ~/.ssh/config

示例配置:

“`
Host myserver
HostName 192.168.1.100
User user
Port 22
IdentityFile ~/.ssh/id_rsa # 如果您的私钥不是默认的id_rsa
# If using multiple keys, you can specify individual ones for each host

Host devserver
HostName dev.example.com
User admin
Port 2222
IdentityFile ~/.ssh/dev_key # 假设为devserver生成了专用密钥

Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/github_rsa # 适用于GitHub的密钥
IdentitiesOnly yes # 仅使用此处指定的IdentityFile
“`

使用配置文件登录:

配置完成后,您就可以使用更简洁的别名进行登录了:

bash
ssh myserver
ssh devserver
ssh github.com

六、 其他常用SSH命令和技巧

  • ssh-agent:用于缓存您的私钥passphrase,避免每次连接时重复输入。
    • 启动 ssh-agent (通常在桌面环境启动时自动运行):
      bash
      eval "$(ssh-agent -s)"
    • 将私钥添加到 ssh-agent
      bash
      ssh-add ~/.ssh/id_rsa
      # 如果有passphrase,会提示输入
  • 文件传输 (SCP/SFTP)

    • SCP (Secure Copy Protocol):通过SSH安全地复制文件。
      • 从本地复制到远程:
        bash
        scp /path/to/local/file user@myserver:/path/to/remote/directory
      • 从远程复制到本地:
        bash
        scp user@myserver:/path/to/remote/file /path/to/local/directory
      • 复制目录:添加 -r 参数
        bash
        scp -r /path/to/local/directory user@myserver:/path/to/remote/directory
    • SFTP (SSH File Transfer Protocol):一个交互式的FTP-like文件传输程序,通过SSH进行。
      bash
      sftp user@myserver

      进入SFTP会话后,可以使用 ls, cd, get, put 等命令。
  • 端口转发 (Port Forwarding)

    • 本地端口转发 (Local Port Forwarding):将本地机器上的某个端口转发到远程服务器可访问的某个端口。
      bash
      ssh -L [本地端口]:[目标主机]:[目标端口] user@myserver
      # 示例:将本地的8000端口转发到myserver可访问的example.com的80端口
      ssh -L 8000:example.com:80 user@myserver

      然后访问本地 localhost:8000 即可访问 example.com:80
    • 远程端口转发 (Remote Port Forwarding):将远程服务器上的某个端口转发到本地机器可访问的某个端口。
      bash
      ssh -R [远程端口]:[目标主机]:[目标端口] user@myserver
  • 保持连接活跃 (KeepAlive)
    如果SSH连接经常因空闲而断开,可以在 ~/.ssh/config 中添加:
    Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

    这会在每60秒发送一个空包,并重试3次。

七、 常见问题与故障排除

  • Permission denied (publickey,password).
    • 密码认证问题:检查用户名和密码是否正确。
    • 密钥认证问题
      • 确保您的公钥已正确添加到服务器的 ~/.ssh/authorized_keys 文件中。
      • 检查服务器端 ~/.ssh 目录及其文件的权限是否正确 (700 for .ssh, 600 for authorized_keys)。
      • 确保您在本地使用了正确的私钥 (ssh -i /path/to/your/private_key user@host)。
      • 如果私钥有passphrase,确保输入正确。
      • 服务器的SSH配置 (/etc/ssh/sshd_config) 可能禁用了密码认证或密钥认证。
  • Connection refused
    • 服务器SSH服务可能没有运行。
    • 防火墙阻止了连接(服务器端或客户端)。
    • 您连接的IP地址或端口号不正确。
  • Host key verification failed.
    这意味着服务器的SSH指纹发生了变化,可能是服务器重装、IP更换,也可能是中间人攻击。如果确定是合法原因,需要从 ~/.ssh/known_hosts 文件中删除对应服务器的旧指纹行。
    bash
    ssh-keygen -R [服务器IP地址或域名]

总结

SSH是远程服务器管理的基石。掌握其基本用法、密钥认证和配置文件管理,将极大地提高您管理服务器的效率和安全性。强烈推荐使用密钥认证并为私钥设置passphrase,以确保您的远程会话安全可靠。

滚动至顶部