linux ssh命令

提示:ssh(Secure Shell)命令用于安全地远程登录到Linux服务器并进行管理操作

命令简介

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

使用示例

示例1:基本远程登录

使用用户名和密码登录远程服务器:

# 使用默认端口(22)登录
ssh username@192.168.1.100

# 使用特定端口登录
ssh -p 2222 username@192.168.1.100

# 使用配置文件中定义的别名
ssh myserver

示例2:使用密钥认证

配置免密码登录(推荐的安全方式):

# 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

示例3:远程执行命令

在远程服务器上执行单条命令而不进入交互式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"

示例4:端口转发

创建安全的隧道连接:

# 本地端口转发:将远程服务器的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

示例5:X11图形界面转发

在本地显示远程服务器的图形界面:

# 启用X11转发
ssh -X username@192.168.1.100

# 登录后运行图形程序
gedit &
firefox &

示例6:连接管理和调试

# 启用详细输出调试连接问题
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

示例7:SSH配置文件优化

# ~/.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

常用SSH配置文件选项

选项 说明
HostName 真实的主机名或IP地址
User 登录用户名
Port 端口号
IdentityFile 私钥文件路径
Compression 是否启用压缩(yes/no)
ConnectTimeout 连接超时时间(秒)
ServerAliveInterval 服务器活动检查间隔(秒)
ForwardX11 是否启用X11转发(yes/no)
LocalForward 本地端口转发配置
RemoteForward 远程端口转发配置

注意事项

  1. 首次连接新主机时,SSH会提示验证主机指纹,确认无误后再继续
  2. 建议禁用root用户的SSH登录,使用普通用户登录后再切换
  3. 使用密钥认证比密码认证更安全,建议禁用密码认证
  4. 定期更换SSH密钥,避免密钥泄露带来的安全风险
  5. 使用非标准端口(非22)可以减少自动化攻击
  6. SSH连接默认不加密终端会话,敏感操作建议使用VPN或跳板机
  7. 公钥应放在远程服务器的~/.ssh/authorized_keys文件中
  8. 私钥文件权限应为600(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/

相关命令