SSH(Secure Shell)是一种加密网络协议,用于在不安全的网络中为Linux/Unix系统提供安全的远程登录、文件传输(SCP/SFTP)和端口转发等功能。它通过加密技术防止数据窃取或篡改,是Linux系统管理的核心工具之一。
要让Linux系统接受远程SSH连接,需安装openssh-server(客户端openssh-client通常默认安装):
sudo apt update && sudo apt install openssh-server
sudo yum install openssh-server # CentOS/RHEL 7及以下
sudo dnf install openssh-server # CentOS/RHEL 8+/Fedora
安装完成后,启动SSH服务并配置为开机自动启动:
ssh):sudo systemctl start ssh # 启动服务
sudo systemctl enable ssh # 开机自启
sshd):sudo systemctl start sshd # 启动服务
sudo systemctl enable sshd # 开机自启
通过以下命令检查SSH服务是否运行:
sudo systemctl status ssh # Debian/Ubuntu
sudo systemctl status sshd # CentOS/RHEL/Fedora
若显示“active (running)”,则表示服务已正常启动。
SSH的主要配置文件为/etc/ssh/sshd_config,修改前建议备份:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
用文本编辑器(如nano)打开配置文件:
sudo nano /etc/ssh/sshd_config
Port 22改为非标准端口(如2222),减少自动扫描攻击:Port 2222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
user1、user2)登录:AllowUsers user1 user2
192.168.1.100):ListenAddress 192.168.1.100
修改配置文件后,重启SSH服务使变更生效:
sudo systemctl restart ssh
sudo systemctl restart sshd
若系统启用了防火墙(如ufw/firewalld),需开放SSH端口:
sudo ufw allow 2222/tcp # 若修改了端口
sudo ufw enable # 启用防火墙
sudo firewall-cmd --permanent --add-port=2222/tcp # 若修改了端口
sudo firewall-cmd --reload
若修改了SSH端口,需更新SELinux策略:
sudo yum install policycoreutils-python-utils # 安装工具
sudo semanage port -a -t ssh_port_t -p tcp 2222 # 添加端口到SELinux
sudo restorecon -Rv /etc/ssh # 恢复SSH目录上下文
通过SSH客户端连接远程服务器,基本语法:
ssh username@remote_host
username:远程服务器上的用户名(如root、user1);remote_host:远程服务器的IP地址或域名(如192.168.1.100、example.com)。ssh user1@192.168.1.100 # 使用默认端口(22)
ssh -p 2222 user1@192.168.1.100 # 指定端口(如2222)
yes即可(避免中间人攻击)。exit或按Ctrl+D退出远程会话。SSH支持通过scp(安全复制)和sftp(安全FTP)传输文件:
scp local_file user@remote_host:remote_path
示例:将本地example.txt上传到远程/home/user目录:scp example.txt user1@192.168.1.100:/home/user
scp user@remote_host:remote_path local_path
示例:从远程/home/user/example.txt下载到本地当前目录:scp user1@192.168.1.100:/home/user/example.txt .
sftp user@remote_host
常用命令:
put local_file remote_path:上传文件;get remote_file local_path:下载文件;ls:列出远程目录文件;exit:退出SFTP会话。密钥认证比密码认证更安全,步骤如下:
ssh-keygen生成RSA密钥对(默认保存在~/.ssh目录):ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
按提示操作(直接按回车键使用默认路径和空密码)。ssh-copy-id将公钥(id_rsa.pub)复制到远程服务器的~/.ssh/authorized_keys文件中:ssh-copy-id user1@192.168.1.100
输入远程用户密码后,公钥会自动追加到服务器的authorized_keys文件中。ssh user1@192.168.1.100
ssh-copy-id不可用,可手动复制公钥内容:cat ~/.ssh/id_rsa.pub | ssh user1@192.168.1.100 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
确保服务器上~/.ssh目录权限为700,authorized_keys文件权限为600:chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
systemctl status ssh/sshd)、防火墙是否开放端口、服务器IP是否正确。~/.ssh目录权限为700,authorized_keys文件权限为600(权限过高会导致密钥认证失败)。sshd_config后未重启服务,或配置项语法错误(如注释符号错误)。