Linux下使用SSH进行远程管理的完整指南
SSH远程管理需要SSH客户端(发起连接)和SSH服务端(接受连接)配合使用。大多数Linux发行版默认安装了SSH客户端,但服务端需手动安装并配置。
sudo apt update && sudo apt install openssh-server;sudo yum install openssh-server。sudo systemctl start sshd # 启动服务(Ubuntu/Debian用'ssh')
sudo systemctl enable sshd # 设置开机自启
sudo systemctl status sshd确认服务是否运行(显示“active (running)”即为正常)。username(远程服务器用户名)和remote_host(服务器IP/域名):ssh username@remote_host
例如:ssh root@192.168.1.100。yes并回车,将服务器指纹添加到本地~/.ssh/known_hosts文件中。-p参数:ssh -p 2222 username@remote_host
密码认证易受暴力破解,建议使用SSH密钥对(公钥+私钥)实现免密登录。
ssh-keygen -t rsa -b 4096(推荐使用RSA 4096位或Ed25519算法),按提示选择密钥保存路径(默认~/.ssh/id_rsa)和密码(可留空)。
~/.ssh/id_rsa(需严格保密,仅本地保存);~/.ssh/id_rsa.pub(需上传至服务器)。ssh-copy-id命令自动将公钥复制到服务器的~/.ssh/authorized_keys文件中:ssh-copy-id username@remote_host
输入远程用户密码后,公钥将自动添加。ssh username@remote_host,无需输入密码即可登录。通过编辑本地~/.ssh/config文件,可为常用服务器设置别名,减少重复输入。
nano ~/.ssh/config(或vim ~/.ssh/config),添加以下内容(以myserver为例):Host myserver
HostName 192.168.1.100 # 服务器IP/域名
User root # 登录用户名
Port 22 # SSH端口(默认22可省略)
IdentityFile ~/.ssh/id_rsa # 私钥路径(密钥认证时需指定)
ServerAliveInterval 60 # 每60秒发送保活信号(防止超时断开)
ssh myserver即可快速连接,无需再写完整命令。ssh username@remote_host "command"。例如:ssh root@192.168.1.100 "df -h" # 查看远程服务器磁盘空间
ssh user@myserver "systemctl restart nginx" # 重启远程Nginx服务
scp local_file username@remote_host:remote_path(如scp ~/test.txt root@192.168.1.100:/tmp);scp username@remote_host:remote_file local_path(如scp root@192.168.1.100:/tmp/test.txt ~/);-r参数(如scp -r ~/project root@192.168.1.100:/var/www)。ssh -L local_port:remote_host:remote_port username@ssh_server(如ssh -L 8080:localhost:80 myserver,本地8080端口访问远程服务器的80端口);ssh -D local_port username@remote_host(如ssh -D 1080 myserver,本地1080端口作为SOCKS代理,用于访问远程网络资源)。为防止未经授权的访问,需修改SSH服务配置文件/etc/ssh/sshd_config(修改后需重启服务生效):
Port 22改为其他端口(如Port 2222),减少自动化工具的扫描攻击。PermitRootLogin no,禁止root用户直接登录,建议使用普通用户登录后通过sudo提权。AllowUsers username1 username2(如AllowUsers alice bob),仅允许指定用户登录;或通过AllowGroups sshusers限制用户组。PubkeyAuthentication yes(默认开启),禁用密码认证(PasswordAuthentication no),仅允许密钥认证。sudo systemctl restart sshd使配置生效。sudo systemctl status sshd(未运行则启动);sudo ufw allow 22(Ubuntu)或sudo firewall-cmd --add-port=22/tcp --permanent(CentOS);~/.ssh/authorized_keys文件,或私钥路径是否正确(IdentityFile配置)。~/.ssh/known_hosts文件,删除对应服务器的旧密钥记录,重新连接确认。