Linux SSH连接

1 Openssh组件

OpenSSH 是一个非常流行的开源软件套件,用于提供安全的远程登录和其他网络服务。以下是关于 OpenSSH 的详细介绍:

1.1 什么是 OpenSSH?

OpenSSH 是一个基于 SSH(Secure Shell)协议的开源实现,旨在提供安全的远程登录和文件传输功能。它通过加密技术保护数据在网络传输过程中的安全,防止数据被窃听、篡改或中间人攻击。

1.2 主要组件

OpenSSH 包含以下几个主要组件:

  1. sshd (SSH Daemon)

    • 功能:这是一个后台服务程序,负责处理来自客户端的连接请求,并提供安全的会话。
    • 配置文件/etc/ssh/sshd_config
    • 启动和管理
      1
      2
      3
      sudo systemctl start sshd
      sudo systemctl enable sshd
      sudo systemctl status sshd
  2. ssh (SSH Client)

    • 功能:这是一个命令行工具,用于从本地机器安全地连接到远程主机。
    • 常用选项
      • -i:指定身份文件(私钥)
      • -p:指定远程主机的端口号
      • -l:指定登录用户名
      • -v:增加详细级别,显示调试信息
  3. scp (Secure Copy)

    • 功能:用于在本地和远程主机之间安全地复制文件。
    • 常用命令
      1
      2
      scp local_file user@remote_host:/remote_directory/
      scp user@remote_host:/remote_file local_directory/
  4. sftp (Secure File Transfer Protocol)

    • 功能:提供了一个交互式的文件传输界面,类似于 FTP,但使用 SSH 协议进行加密。
    • 常用命令
      1
      sftp user@remote_host
  5. ssh-keygen

    • 功能:用于生成、管理和转换认证密钥对(公钥和私钥)。
    • 常用命令
      1
      ssh-keygen -t rsa -b 4096
  6. ssh-agent

    • 功能:用于管理多个 SSH 密钥的身份验证代理。
    • 常用命令
      1
      2
      eval `ssh-agent -s`
      ssh-add ~/.ssh/id_rsa

1.3 安全特性

  1. 加密通信

    • OpenSSH 使用多种加密算法(如 AES、RSA、ECDSA 等)来保护数据传输的安全性。
  2. 身份验证

    • 支持多种身份验证方法,包括密码、公钥、证书和 Kerberos 等。
  3. 密钥管理

    • 提供了生成、管理和存储密钥的工具,确保密钥的安全性。
  4. 防火墙和端口转发

    • 支持端口转发和隧道功能,可以在不安全的网络环境中建立安全的通信通道。

1.4 配置

  1. sshd 配置文件

    • 位置:/etc/ssh/sshd_config
    • 常用配置项:
      • Port:指定 SSH 服务监听的端口号
      • PermitRootLogin:控制是否允许 root 用户登录
      • PasswordAuthentication:控制是否允许密码认证
      • PubkeyAuthentication:控制是否允许公钥认证
      • AllowUsersDenyUsers:指定允许或拒绝特定用户登录
      • AllowGroupsDenyGroups:指定允许或拒绝特定用户组登录
  2. ssh 配置文件

    • 位置:~/.ssh/config
    • 常用配置项:
      • Host:定义特定主机的配置
      • User:指定默认的登录用户名
      • Port:指定默认的端口号
      • IdentityFile:指定默认的身份文件

1.5 常见命令示例

  1. 启动和停止 SSH 服务

    1
    2
    3
    4
    sudo systemctl start sshd
    sudo systemctl stop sshd
    sudo systemctl restart sshd
    sudo systemctl status sshd
  2. 生成密钥对

    1
    ssh-keygen -t rsa -b 4096
  3. 添加密钥到远程主机

    1
    ssh-copy-id user@remote_host
  4. 使用 SSH 登录远程主机

    1
    ssh user@remote_host
  5. 使用 SCP 复制文件

    1
    scp local_file user@remote_host:/remote_directory/
  6. 使用 SFTP 传输文件

    1
    sftp user@remote_host

2 Openssh的使用

在 Ubuntu 系统中,OpenSSH 的相关包名称如下:

  1. openssh-server:这是 OpenSSH 服务器包,包含了 sshd 守护进程,用于提供 SSH 服务。
  2. openssh-client:这是 OpenSSH 客户端包,包含了 sshscpsftp 等命令行工具,用于连接到 SSH 服务器。

2.1 安装 OpenSSH 服务器

如果你需要安装 OpenSSH 服务器,可以使用以下命令:

1
2
sudo apt update
sudo apt install openssh-server

2.2 安装 OpenSSH 客户端

如果你需要安装 OpenSSH 客户端,可以使用以下命令:

1
2
sudo apt update
sudo apt install openssh-client

2.3 检查已安装的 OpenSSH 包

你可以使用以下命令来检查系统上是否已经安装了 OpenSSH 服务器和客户端:

1
dpkg -l | grep openssh

这将列出所有与 OpenSSH 相关的已安装包。

2.4 启动和启用 SSH 服务

安装完成后,你可以启动并启用 SSH 服务,使其在系统启动时自动运行:

1
2
sudo systemctl start ssh
sudo systemctl enable ssh

2.5 检查 SSH 服务状态

你可以使用以下命令来检查 SSH 服务的状态:

1
sudo systemctl status ssh

这将显示 SSH 服务的当前状态,包括是否正在运行、最近的日志条目等信息。

2.6 配置 SSH 服务

SSH 服务的配置文件位于 /etc/ssh/sshd_config。你可以编辑这个文件来修改 SSH 服务的配置,例如更改监听端口、设置允许的用户等:

1
sudo nano /etc/ssh/sshd_config

修改配置后,记得重启 SSH 服务以应用更改:

1
sudo systemctl restart ssh

3 SSH 密钥对

SSH 密钥对用于安全地进行身份验证,替代传统的密码认证。不同ssh服务其之间对于ssh密钥类型的支持可能不同,以下是几种常见的 SSH 密钥类型及其特点:

3.1 . RSA (Rivest-Shamir-Adleman)

  • 算法:基于大数因式分解的难度。
  • 默认长度:2048 位,但可以生成更长的密钥(如 4096 位)以提高安全性。
  • 安全性:相对较低,但仍广泛使用,特别是在较老的系统中。
  • 命令
    1
    ssh-keygen -t rsa -b 4096

3.2 . DSA (Digital Signature Algorithm)

  • 算法:基于离散对数问题。
  • 默认长度:1024 位。
  • 安全性:已经不推荐使用,因为被认为不够安全。
  • 命令
    1
    ssh-keygen -t dsa

3.3 . ECDSA (Elliptic Curve Digital Signature Algorithm)

  • 算法:基于椭圆曲线离散对数问题。
  • 默认长度:256 位(NIST P-256)、384 位(NIST P-384)、521 位(NIST P-521)。
  • 安全性:较高,计算效率较好。
  • 命令
    1
    ssh-keygen -t ecdsa -b 521

3.4 . Ed25519

  • 算法:基于 EdDSA(Edwards-curve Digital Signature Algorithm)。
  • 默认长度:256 位。
  • 安全性:非常高,计算效率高,被认为是目前最安全的密钥类型之一。
  • 命令
    1
    ssh-keygen -t ed25519

3.5 . ECDSA-SK (Elliptic Curve Digital Signature Algorithm with Security Key)

  • 算法:基于椭圆曲线离散对数问题,结合硬件安全密钥(如 YubiKey)。
  • 默认长度:256 位(NIST P-256)。
  • 安全性:非常高,结合硬件安全密钥提供额外的安全性。
  • 命令
    1
    ssh-keygen -t ecdsa-sk

3.6 . Ed25519-SK (Ed25519 with Security Key)

  • 算法:基于 EdDSA,结合硬件安全密钥(如 YubiKey)。
  • 默认长度:256 位。
  • 安全性:非常高,结合硬件安全密钥提供额外的安全性。
  • 命令
    1
    ssh-keygen -t ed25519-sk

3.7 选择合适的密钥类型

  • 安全性:Ed25519 和 Ed25519-SK 是目前最安全的密钥类型,推荐在新系统中使用。
  • 兼容性:RSA 是最兼容的密钥类型,适用于大多数系统,但建议使用较长的密钥长度(如 4096 位)。
  • 性能:ECDSA 和 Ed25519 在计算效率上优于 RSA,适用于资源受限的环境。

3.8 生成 SSH 密钥对

生成 SSH 密钥对的通用命令格式如下:

1
ssh-keygen -t <type> -b <bits>
  • <type>:密钥类型(如 rsa, ecdsa, ed25519)。
  • <bits>:密钥长度(如 4096 位)。

3.9 示例

生成一个 4096 位的 RSA 密钥对:

1
ssh-keygen -t rsa -b 4096

生成一个 Ed25519 密钥对:

1
ssh-keygen -t ed25519

生成一个 521 位的 ECDSA 密钥对:

1
ssh-keygen -t ecdsa -b 521