SSH远程连接入门:安全高效地管理服务器
服务器在机房,怎么远程操作?用SSH。
今天教你SSH的基本用法,让远程管理变得简单。
最基本的连接
bash
ssh 用户名@服务器IP
例如:
bash
ssh root@192.168.1.100
第一次连接会问你确认指纹,输入yes。然后输入密码就连上了。
指定端口
默认端口是22,如果改了:
bash
ssh -p 2222 root@192.168.1.100
用密钥登录(推荐)
每次输密码太麻烦,用密钥更安全更方便。
第一步:生成密钥对
bash
ssh-keygen -t rsa -b 4096
一路回车,会在~/.ssh/生成两个文件:
id_rsa- 私钥,绝对不能泄露id_rsa.pub- 公钥,放到服务器上
第二步:把公钥传到服务器
bash
ssh-copy-id root@192.168.1.100
或者手动复制:
bash
cat ~/.ssh/id_rsa.pub | ssh root@192.168.1.100 "cat >> ~/.ssh/authorized_keys"
第三步:测试
bash
ssh root@192.168.1.100
不用输密码直接连上了!
配置别名
每次输IP太长,可以配置别名。
编辑~/.ssh/config:
Host myserver
HostName 192.168.1.100
User root
Port 22
IdentityFile ~/.ssh/id_rsa
以后直接:
bash
ssh myserver
一个单词搞定!
常用操作
执行单条命令不登录:
bash
ssh root@192.168.1.100 "df -h"
上传文件:
bash
scp file.txt root@192.168.1.100:/tmp/
下载文件:
bash
scp root@192.168.1.100:/var/log/app.log ./
上传目录:
bash
scp -r mydir/ root@192.168.1.100:/opt/
端口转发
本地转发(访问本地端口=访问远程服务):
bash
ssh -L 8080:localhost:80 root@192.168.1.100
现在访问本地8080就相当于访问服务器的80端口。
远程转发(让远程能访问本地服务):
bash
ssh -R 8080:localhost:3000 root@192.168.1.100
保持连接不断开
SSH连接久了不操作会断开,配置保活。
编辑~/.ssh/config:
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
每60秒发一次心跳,3次没响应才断开。
跳板机登录
服务器在内网,需要通过跳板机:
bash
ssh -J user@跳板机IP root@目标服务器IP
或者在config里配置:
Host target
HostName 192.168.1.100
User root
ProxyJump user@跳板机IP
安全建议
1. 禁用root密码登录
编辑/etc/ssh/sshd_config:
PermitRootLogin prohibit-password
PasswordAuthentication no
只允许密钥登录。
2. 修改默认端口
Port 2222
3. 限制登录IP
AllowUsers root@192.168.1.*
4. 重启SSH服务
bash
systemctl restart sshd
常见问题
Q:连接超时?
检查:
- 服务器IP是否正确
- 防火墙是否开放22端口
- SSH服务是否运行
Q:密钥登录不生效?
检查服务器上的权限:
bash
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Q:连接老是断?
配置ServerAliveInterval,或者用screen/tmux保持会话。
更便捷的方案
管理多台服务器,每台都配置SSH挺麻烦的。特别是有些在内网,还得配跳板机。
我现在用星空组网把所有服务器组到一个虚拟网络,每台服务器有个固定的虚拟IP。SSH配置简单多了:
Host server1
HostName 10.26.1.10
User root
Host server2
HostName 10.26.1.11
User root
不用跳板机,不用记公网IP,在哪都能直接连。
小结
SSH基本用法:
- 连接:
ssh user@ip - 密钥登录:
ssh-keygen+ssh-copy-id - 配置别名:编辑
~/.ssh/config - 传文件:
scp
配好密钥和别名,远程管理效率翻倍。
有问题评论区交流~