ssh 是Linux系统中最常用的远程登录工具,通过加密的SSH协议提供安全的网络服务。它可以用于远程登录、执行命令、传输文件等操作,是系统管理员管理远程服务器的必备工具。
ssh [选项] [用户名@]主机名 [命令]
ssh [选项] [用户名@]主机地址 [命令]
| 选项 | 说明 |
|---|---|
-p 端口号 |
指定连接的端口号(默认22) |
-i 私钥文件 |
指定身份验证的私钥文件 |
-l 用户名 |
指定登录用户名 |
-v |
显示详细调试信息(可重复使用增加详细级别) |
-X |
启用X11转发(图形界面转发) |
-L [绑定地址:]端口:主机:主机端口 |
创建本地端口转发 |
-R [绑定地址:]端口:主机:主机端口 |
创建远程端口转发 |
-D [绑定地址:]端口 |
创建动态端口转发(SOCKS代理) |
-f |
后台运行ssh命令 |
-N |
不执行远程命令(用于端口转发) |
-C |
启用压缩 |
-o 选项 |
设置SSH配置选项 |
SSH配置文件位于 ~/.ssh/config,可以预先配置常用连接参数:
# ~/.ssh/config 示例配置
Host myserver
HostName 192.168.1.100
User admin
Port 2222
IdentityFile ~/.ssh/id_rsa_myserver
Host github.com
User git
IdentityFile ~/.ssh/id_rsa_github
Compression yes
使用用户名和密码登录远程服务器:
# 使用默认端口(22)登录
ssh username@192.168.1.100
# 使用特定端口登录
ssh -p 2222 username@192.168.1.100
# 使用配置文件中定义的别名
ssh myserver
配置免密码登录(推荐的安全方式):
# 1. 生成本地密钥对(如果没有)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 2. 将公钥复制到远程服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub username@192.168.1.100
# 3. 使用密钥登录
ssh -i ~/.ssh/id_rsa username@192.168.1.100
在远程服务器上执行单条命令而不进入交互式shell:
# 查看远程服务器磁盘使用情况
ssh username@192.168.1.100 "df -h"
# 查看远程服务器运行时间
ssh username@192.168.1.100 "uptime"
# 执行多条命令
ssh username@192.168.1.100 "cd /var/log && ls -la | grep error"
# 传输变量到远程命令
local_var="test"
ssh username@192.168.1.100 "echo $local_var > /tmp/test.txt"
创建安全的隧道连接:
# 本地端口转发:将远程服务器的3306端口映射到本地的13306端口
ssh -L 13306:localhost:3306 username@192.168.1.100
# 然后可以在本地使用 mysql -h 127.0.0.1 -P 13306 连接远程MySQL
# 远程端口转发:将本地服务的80端口映射到远程服务器的8080端口
ssh -R 8080:localhost:80 username@192.168.1.100
# 动态端口转发(SOCKS代理)
ssh -D 1080 username@192.168.1.100
# 配置浏览器使用 SOCKS5 代理 127.0.0.1:1080
在本地显示远程服务器的图形界面:
# 启用X11转发
ssh -X username@192.168.1.100
# 登录后运行图形程序
gedit &
firefox &
# 启用详细输出调试连接问题
ssh -vvv username@192.168.1.100
# 后台运行ssh连接(用于端口转发)
ssh -f -N -L 8080:localhost:80 username@192.168.1.100
# 设置连接超时和保活参数
ssh -o ConnectTimeout=10 -o ServerAliveInterval=30 username@192.168.1.100
# ~/.ssh/config 高级配置示例
Host *
# 启用压缩,加快传输速度
Compression yes
# 保持连接,防止超时断开
ServerAliveInterval 60
ServerAliveCountMax 3
# 连接超时设置
ConnectTimeout 10
# 使用密钥验证
PreferredAuthentications publickey
# 禁用密码认证(更安全)
PasswordAuthentication no
Host production-server
HostName prod.example.com
User deploy
IdentityFile ~/.ssh/deploy_key
Port 2222
# 使用特定的加密算法
Ciphers aes256-gcm@openssh.com
| 选项 | 说明 |
|---|---|
HostName |
真实的主机名或IP地址 |
User |
登录用户名 |
Port |
端口号 |
IdentityFile |
私钥文件路径 |
Compression |
是否启用压缩(yes/no) |
ConnectTimeout |
连接超时时间(秒) |
ServerAliveInterval |
服务器活动检查间隔(秒) |
ForwardX11 |
是否启用X11转发(yes/no) |
LocalForward |
本地端口转发配置 |
RemoteForward |
远程端口转发配置 |
~/.ssh/authorized_keys文件中chmod 600 ~/.ssh/id_rsa)# 1. 检查连接和端口
telnet 192.168.1.100 22
nc -zv 192.168.1.100 22
# 2. 详细调试模式
ssh -vvv username@192.168.1.100
# 3. 检查远程服务器SSH服务状态
# 在远程服务器上执行:
systemctl status sshd
journalctl -u sshd -f
# 4. 检查防火墙设置
sudo ufw status
sudo firewall-cmd --list-all
# 5. 检查密钥权限
ls -la ~/.ssh/
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
chmod 700 ~/.ssh/
scp - 安全的文件传输sftp - 安全的FTP替代工具ssh-keygen - 生成SSH密钥对ssh-copy-id - 复制公钥到远程服务器ssh-agent - SSH代理管理ssh-add - 向代理添加密钥sshd - SSH服务器守护进程