
SSH(Secure Shell)是Linux/Unix系统中用于安全远程登录的标准协议和工具集。它通过加密技术保护网络连接的安全性,防止窃听、连接劫持等攻击。ssh命令是OpenSSH套件的核心组件,提供了安全的远程命令行访问能力。
除了基本的远程登录,SSH还支持文件传输(scp、sftp)、端口转发、X11转发、代理认证等丰富功能。作为系统管理和自动化运维的基础工具,掌握SSH是每个Linux用户的必备技能。
1. 基本连接
| 命令 | 说明 |
|---|
ssh user@host | |
ssh host | |
ssh -p 2222 user@host | |
ssh user@host "ls -la" | |
ssh -v user@host | |
ssh -q user@host | |
2. SSH密钥管理
| 命令 | 说明 |
|---|
ssh-keygen | |
ssh-keygen -t ed25519 | |
ssh-keygen -t rsa -b 4096 | |
ssh-keygen -p -f ~/.ssh/id_ed25519 | |
ssh-keygen -y -f ~/.ssh/id_ed25519 | |
ssh-keygen -R hostname | |
ssh-keygen -H | |
ssh-keygen -F hostname | |
3. 复制SSH密钥
| 命令 | 说明 |
|---|
ssh-copy-id user@host | |
ssh-copy-id -i ~/.ssh/key.pub user@host | |
ssh-copy-id -p 2222 user@host | |
cat ~/.ssh/id_rsa.pub | ssh user@host "cat >> ~/.ssh/authorized_keys" | |
4. SSH代理管理
| 命令 | 说明 |
|---|
eval "$(ssh-agent -s)" | |
ssh-add | 添加默认密钥(~/.ssh/id_rsa等)到代理 |
ssh-add ~/.ssh/id_ed25519 | |
ssh-add -l | |
ssh-add -L | |
ssh-add -d ~/.ssh/id_ed25519 | |
ssh-add -D | |
ssh-add -t 3600 | |
5. SCP安全复制
| 命令 | 说明 |
|---|
scp file user@host:/path | |
scp user@host:/path/file . | |
scp -r dir user@host:/path | |
scp -P 2222 file user@host:/path | |
scp -C file user@host:/path | |
scp -p file user@host:/path | |
scp -3 user1@host1:/path/file user2@host2:/path | |
6. SFTP交互式传输
| 命令 | 说明 |
|---|
sftp user@host | |
sftp -P 2222 user@host | |
sftp -b batchfile user@host | |
get file | |
put file | |
ls, cd, pwd | |
lls, lcd, lpwd | |
mkdir, rm, rename | |
exit 或 quit | |
7. SSH隧道(端口转发)
| 命令 | 说明 |
|---|
ssh -L 8080:localhost:80 user@host | |
ssh -R 8080:localhost:80 user@host | |
ssh -D 1080 user@host | |
ssh -N -L 8080:localhost:80 user@host | |
ssh -f -N -L 8080:localhost:80 user@host | |
ssh -L 3306:db-server:3306 jump-host | |
8. SSH配置文件
~/.ssh/config 文件示例及常用选项:
| 配置项 | 说明与示例 |
|---|
Host | |
HostName | |
User | |
Port | |
IdentityFile | |
ProxyJump | |
ForwardAgent | |
ForwardX11 | |
ServerAliveInterval | |
StrictHostKeyChecking | |
配置示例:
Host prod
HostName 192.168.1.100
User deploy
Port 2222
IdentityFile ~/.ssh/prod-key
Host bastion
HostName bastion.example.com
User jumpuser
Host internal-*
ProxyJump bastion
User admin
9. 连接选项
| 选项 | 说明 |
|---|
-p port | |
-i keyfile | |
-o option=value | |
-F configfile | |
-J host | |
-X | |
-Y | |
-A | |
-t | |
-T | |
-n | |
-N | |
-f | |
10. 安全加固选项
| 选项 | 说明 |
|---|
-o StrictHostKeyChecking=yes | |
-o UserKnownHostsFile=/dev/null | |
-o PasswordAuthentication=no | |
-o PubkeyAuthentication=yes | |
-o ConnectTimeout=10 | |
-o ServerAliveInterval=60 | |
-o ServerAliveCountMax=3 | |
-o LogLevel=VERBOSE | |
11. 实用组合模式
| 命令/操作 | 说明 |
|---|
ssh user@host "tar czf - /data" | tar xzf - -C /restore | |
ssh user@host "mysqldump dbname | gzip" > backup.sql.gz | |
ssh -t user@host "sudo systemctl restart nginx" | |
ssh -o ConnectTimeout=5 user@host || echo "连接失败" | |
for host in host1 host2 host3; do ssh $host uptime; done | |
ssh -f -N -M -S /tmp/ssh-socket -L 8080:localhost:80 user@host | |
12. 故障排查
| 问题 | 解决方法 |
|---|
| Connection refused | 检查目标主机SSH服务是否运行:systemctl status sshd;端口是否正确 |
| Permission denied (publickey) | 确认私钥正确;检查远程~/.ssh/authorized_keys;验证权限(600/700) |
| Host key verification failed | 主机密钥变更,使用ssh-keygen -R hostname移除旧记录 |
| Connection timed out | 检查网络连通性;防火墙是否允许SSH端口;路由是否正确 |
| Too many authentication failures | 指定正确的私钥:ssh -i key;使用IdentitiesOnly=yes |
| agent refused operation | 检查ssh-agent状态;确认密钥已添加:ssh-add -l |
| 通道建立后无法连接 | 确认端口转发绑定地址;检查防火墙策略;使用-v调试 |
提示: 密钥认证比密码认证更安全,建议使用Ed25519或RSA 4096位密钥,并设置密码保护私钥。对于日常管理的服务器,建议配置~/.ssh/config简化连接命令。使用跳板机时,ProxyJump选项比传统的ProxyCommand更简洁高效。生产环境建议禁用root直接登录(PermitRootLogin no)和密码认证(PasswordAuthentication no)。
关注公众号(haopython),请回复: LLTSSH