Linux Shell SSH命令
ssh(Secure Shell)是一个用于安全远程登录和执行命令的网络协议工具
基本语法 ssh [选项] [用户@]主机名 [命令]
常用选项详解
连接选项
-p port:指定远程主机的端口(默认22)
-l username:指定登录用户名
-i identity_file:指定私钥文件
-o option:设置配置选项
认证选项
-k:禁用GSSAPI认证
-K:启用GSSAPI认证
-X:启用X11转发
-Y:启用可信X11转发
其他选项
-v:详细模式(可重复使用增加详细程度:-vv, -vvv)
-q:安静模式
-N:不执行远程命令
-T:禁用伪终端分配
-C:启用压缩
-f:后台运行
-L:本地端口转发
-R:远程端口转发
-D:动态端口转发
常用用法示例
# 使用当前用户名连接
ssh 192.168.1.100
# 指定用户名连接
ssh username@192.168.1.100
# 指定端口连接
ssh -p 22 username@192.168.1.100
2. 使用密钥认证
# 使用指定私钥文件
ssh -i ~/.ssh/mykey.pem username@hostname
# 生成SSH密钥对
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 复制公钥到远程主机
ssh-copy-id username@hostname
3. 执行远程命令
# 执行单条命令
ssh username@hostname "ls -l /tmp"
# 执行多条命令
ssh username@hostname "cd /var/log && tail -f syslog"
4. 端口转发
# 本地端口转发(将本地8080转发到远程80)
ssh -L 8080:localhost:80 username@hostname
# 远程端口转发(将远程8080转发到本地80)
ssh -R 8080:localhost:80 username@hostname
# 动态端口转发(SOCKS代理)
ssh -D 1080 username@hostname
5. 文件传输配合
# 使用scp传输文件(基于ssh)
scp localfile.txt username@hostname:/remote/path/
# 使用rsync(基于ssh)
rsync -avz -e ssh localdir/ username@hostname:/remote/path/
配置文件
SSH客户端配置
编辑 ~/.ssh/config 文件可以保存常用连接配置:
Host myserver
HostName 192.168.1.100
User username
Port 2222
IdentityFile ~/.ssh/mykey.pem
ServerAliveInterval 60
ServerAliveCountMax 3
Host github.com
User git
IdentityFile ~/.ssh/github_key
服务器端配置
主要配置文件:/etc/ssh/sshd_config
重要配置项:
Port 22 # SSH端口
PermitRootLogin no # 禁止root登录
PasswordAuthentication no # 禁用密码认证
PubkeyAuthentication yes # 启用公钥认证
AllowUsers username # 允许的用户
安全最佳实践
使用密钥认证:禁用密码认证,使用SSH密钥
修改默认端口:减少自动化攻击
禁用root登录:使用普通用户登录后切换
使用强密码:如果必须使用密码认证
限制用户访问:只允许必要的用户
使用防火墙:限制SSH访问来源IP
定期更新:保持SSH软件最新版本
故障排查
调试连接问题
# 详细输出查看连接过程
ssh -vvv username@hostname
# 测试特定端口连通性
telnet hostname 22
# 检查密钥权限
chmod 600 ~/.ssh/id_rsa
chmod 700 ~/.ssh
常见问题解决
# 清除已知主机记录(当主机密钥变更时)
ssh-keygen -R hostname
# 重新接受主机密钥
ssh -o StrictHostKeyChecking=no username@hostname
SSH 隧道
# 创建持久隧道
ssh -f -N -L 3306:localhost:3306 username@hostname
# 通过跳板机连接
ssh -J jumpuser@jumpserver username@targetserver
链接保持
# 在配置文件中添加
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
