> 网络管理 > ssh

SSH(安全外壳)命令指南

SSH(安全外壳)是一种网络协议,允许安全地连接到远程计算机并执行命令。通过加密通信提供数据安全性,广泛用于远程服务器管理、文件传输等多种用途。通过本指南了解SSH的主要功能和使用方法。

SSH 概述

SSH采用客户端-服务器模型,使用SSH客户端连接到SSH服务器。默认使用22号端口,并通过强大的加密技术保护通信免受中间人攻击和数据窃取等威胁。

SSH的主要功能

SSH提供以下主要功能:

SSH主要功能

  • 远程命令执行: 可以直接在远程服务器上执行命令。
  • 安全文件传输: `scp`(安全拷贝)或`sftp`(SSH文件传输协议)可以安全地进行文件传输。
  • 端口转发(隧道): 创建本地端口和远程端口之间的加密隧道,以安全地访问特定服务。
  • X11转发: 允许在本地PC上运行远程服务器的GUI应用程序。
  • SSH密钥基础认证: 使用公钥-私钥对而不是密码,提供更强大和方便的认证方式。

主要 SSH 命令

了解如何使用SSH命令连接到远程服务器并执行各种操作。根据需要组合各个选项以利用所需功能。

1. 基本连接与认证

2. 高级功能与转发

生成的命令:

请尝试组合命令。

描述:

`ssh` 执行命令。

通过组合这些选项,您可以与 AI 一起虚拟地执行命令。

SSH 密钥基础认证

SSH密钥基础认证比密码认证更安全、更方便。使用公钥和私钥对进行认证,可以降低密码泄露的风险。

SSH 密钥生成

使用`ssh-keygen`命令生成公钥和私钥对。默认情况下,会生成`~/.ssh/id_rsa`(私钥)和`~/.ssh/id_rsa.pub`(公钥)文件。

SSH 密钥生成命令

ssh-keygen -t rsa -b 4096

在磁盘上生成新的SSH密钥对。可以设置密钥存储位置和密码。

公钥分发

生成的公钥(`id_rsa.pub`)必须添加到远程服务器的用户主目录下的`~/.ssh/authorized_keys`文件中。此文件中注册的公钥用户可以使用对应的私钥无密码地连接服务器。

复制公钥到服务器(使用ssh-copy-id)

ssh-copy-id user@hostname

使用`ssh-copy-id`命令可以轻松将公钥复制到远程服务器。这是最推荐的方法。

手动复制公钥(使用scp)

scp ~/.ssh/id_rsa.pub user@hostname:~/
ssh user@hostname "mkdir -p ~/.ssh && cat ~/id_rsa.pub >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys && rm ~/id_rsa.pub"

如果无法使用`ssh-copy-id`,可以使用`scp`将公钥文件复制到服务器上,然后手动添加到`authorized_keys`中。

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

使用SSH配置文件(`~/.ssh/config`)可以方便地保存常用服务器的连接信息。无需每次输入复杂的选项,可以通过别名轻松连接。

配置文件示例

以下是`~/.ssh/config`文件的示例。可以定义多个主机的连接设置。

config文件内容

Host myserver
  HostName 192.168.1.100
  User myuser
  Port 2222
  IdentityFile ~/.ssh/my_server_key.pem

Host dev-web
  HostName dev.example.com
  User webadmin
  ForwardAgent yes
  LocalForward 8080 localhost:80

主要设置选项

在`config`文件中可用的主要选项。

  • Host: 此设置块的别名。可以使用`ssh myserver`。
  • HostName: 实际连接的远程主机的IP地址或域名。
  • User: 连接到远程服务器的用户名。
  • Port: 连接的端口号。
  • IdentityFile: 用于认证的私钥文件的路径。
  • LocalForward: 设置本地端口转发。`LocalForward [local_port] [remote_host]:[remote_port]`
  • RemoteForward: 设置远程端口转发。`RemoteForward [remote_port] [local_host]:[local_port]`
  • ForwardAgent: 启用SSH代理转发。在经过多个服务器时非常有用。
  • ServerAliveInterval: 定期向服务器发送信号,以防止SSH连接断开。(以秒为单位)
  • StrictHostKeyChecking: 设置是否检查主机密钥。`yes`或`no`

使用配置文件进行连接

ssh myserver

如果在`~/.ssh/config`文件中定义了名为`myserver`的Host别名,可以这样简单地连接。

使用示例

通过SSH命令的各种使用示例,了解远程服务器管理和文件传输等实际场景。

基本SSH连接

ssh testuser@192.168.1.100

以testuser身份连接到192.168.1.100服务器。将提示输入密码。

使用SSH密钥文件连接

ssh -i ~/.ssh/my_key.pem ubuntu@ec2-1-2-3-4.compute-1.amazonaws.com

使用`~/.ssh/my_key.pem`私钥文件连接到服务器,而不是密码。(在云环境中经常使用)

远程执行单个命令

ssh user@hostname "ls -l /var/log"

不登录服务器,直接在远程服务器上执行`ls -l /var/log`命令并将结果带回本地。

本地端口转发(访问Web服务)

ssh -L 8888:localhost:80 user@hostname

通过本地PC的8888端口访问远程服务器的80端口(Web服务器)。就像Web服务器在本地一样可以访问。

使用SCP复制文件(本地 -> 远程)

scp mylocalfile.txt user@hostname:/tmp/

将本地的`mylocalfile.txt`文件复制到远程服务器的`/tmp/`目录中。

使用SCP复制文件(远程 -> 本地)

scp user@hostname:/var/log/syslog .

将远程服务器的`/var/log/syslog`文件复制到本地PC的当前目录中。


相同类别命令