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的当前目录中。