【linux】(24)SSH
1. SSH 基本概念
SSH(Secure Shell)是一种用于安全远程登录和其他网络服务的加密协议。它提供了在不安全网络上安全传输数据的机制。
2. 安装和配置
安装 OpenSSH
在大多数 Linux 发行版上,可以通过包管理器安装 OpenSSH:
在 Debian/Ubuntu 系统上:
sudo apt update
sudo apt install openssh-server
在 RHEL/CentOS 系统上:
sudo yum install openssh-server
在 Fedora 系统上:
sudo dnf install openssh-server
启动并配置 SSH 服务
启动 SSH 服务:
sudo systemctl start sshd
设置开机启动:
sudo systemctl enable sshd
检查 SSH 服务状态:
sudo systemctl status sshd
配置 SSH
SSH 的配置文件通常位于 /etc/ssh/sshd_config
。可以使用任何文本编辑器进行编辑:
sudo nano /etc/ssh/sshd_config
常见的配置选项包括:
- Port: 设置 SSH 服务监听的端口,默认是 22。
- PermitRootLogin: 是否允许 root 用户登录,建议设为
no
。 - PasswordAuthentication: 是否允许密码验证,建议设为
no
并使用密钥验证。
编辑完配置文件后,重新启动 SSH 服务以应用更改:
sudo systemctl restart sshd
3. 基本操作
连接到远程主机
使用 SSH 客户端连接到远程主机:
ssh username@hostname
例如:
ssh user@192.168.1.100
使用密钥验证
生成 SSH 密钥对:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
生成的密钥对默认保存在 ~/.ssh/
目录下,包括 id_rsa
(私钥)和 id_rsa.pub
(公钥)。
将公钥复制到远程主机:
ssh-copy-id username@hostname
传输文件
使用 scp
命令在本地和远程主机之间传输文件:
从本地传输到远程:
scp /path/to/local/file username@hostname:/path/to/remote/directory
从远程传输到本地:
scp username@hostname:/path/to/remote/file /path/to/local/directory
使用 rsync
进行同步传输:
rsync -avz /path/to/local/directory/ username@hostname:/path/to/remote/directory/
远程执行命令
在远程主机上执行命令而不进入交互式 shell:
ssh username@hostname 'command'
例如:
ssh user@192.168.1.100 'ls -l /var/www'
4. 高级使用技巧
端口转发
本地端口转发:
将远程主机的端口转发到本地端口:
ssh -L local_port:remote_host:remote_port username@hostname
例如,将远程主机的 3306 端口转发到本地的 3306 端口:
ssh -L 3306:localhost:3306 user@192.168.1.100
远程端口转发:
将本地主机的端口转发到远程端口:
ssh -R remote_port:local_host:local_port username@hostname
例如,将本地主机的 8080 端口转发到远程主机的 8080 端口:
ssh -R 8080:localhost:8080 user@192.168.1.100
SSH 配置文件
你可以在 ~/.ssh/config
文件中定义常用的 SSH 连接配置,以便简化连接命令:
Host myserver
HostName 192.168.1.100
User user
Port 22
IdentityFile ~/.ssh/id_rsa
这样,你可以通过以下命令连接到服务器:
ssh myserver
使用 ssh-agent
管理密钥
ssh-agent
是一个用于管理 SSH 私钥的守护进程。可以使用 ssh-add
命令将私钥添加到 ssh-agent
中,以便在多个会话中使用:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
5. 安全性建议
- 禁用 root 登录:编辑
sshd_config
文件,将PermitRootLogin
设为no
。 - 禁用密码验证:使用密钥验证并将
PasswordAuthentication
设为no
。 - 修改默认端口:将
Port
设置为非 22 的端口,如 2222。 - 使用防火墙限制 SSH 访问:只允许特定 IP 地址访问 SSH 端口。
sudo ufw allow 2222/tcp
sudo ufw enable