linux ssh命令参数

99ANYc3cd6
预计阅读时长 18 分钟
位置: 首页 参数 正文

我们将参数分为几个类别,以便于理解和记忆:

linux ssh命令参数
(图片来源网络,侵删)
  1. 核心连接参数:用于指定连接目标。
  2. 安全与认证参数:用于身份验证和加密配置。
  3. 执行命令参数:用于在远程主机上执行单条命令。
  4. 端口转发/隧道参数:用于安全地转发网络连接。
  5. 调试与信息参数:用于排查问题和显示信息。
  6. 配置文件ssh 的行为可以通过配置文件来简化。

核心连接参数

这些参数用于告诉 ssh 你要连接到哪里,以及以什么身份连接。

-p--port

  • 作用:指定远程服务器的 SSH 端口号,默认是 22
  • 示例
    # 连接到 example.com 的 2222 端口
    ssh -p 2222 user@example.com

-l--user

  • 作用:指定登录的远程用户名,也可以直接在 前面写用户名。

  • 示例

    # 登录用户为 'admin'
    ssh -l admin example.com
    # 等同于
    ssh admin@example.com

-i--identityfile

  • 作用:指定用于身份验证的私钥文件路径,默认会使用 ~/.ssh/id_rsa, ~/.ssh/id_ecdsa, ~/.ssh/id_ed25519 等。
  • 示例
    # 使用 ~/.ssh/my_custom_key 作为私钥
    ssh -i ~/.ssh/my_custom_key user@example.com

-F--configfile

  • 作用:指定一个非默认的 SSH 配置文件。
  • 示例
    # 使用 ~/my_ssh_config 文件进行连接
    ssh -F ~/my_ssh_config user@example.com

安全与认证参数

这些参数用于控制认证方式和安全行为。

linux ssh命令参数
(图片来源网络,侵删)

-o--option

  • 作用:直接在命令行中指定一个配置选项,这对于临时覆盖配置文件中的设置非常有用。

  • 常用选项

    • StrictHostKeyChecking: 是否严格检查主机密钥。
      • yes: 首次连接必须手动确认,拒绝未知主机,最安全。
      • no: 自动接受并保存新主机密钥,不检查,不安全,易受中间人攻击。
      • ask (默认): 首次连接时询问用户是否接受。
    • PasswordAuthentication: 是否使用密码认证。
      • yes: 允许使用密码。
      • no: 禁止使用密码,强制使用密钥,推荐用于生产环境。
    • UserKnownHostsFile: 指定 known_hosts 文件的路径。
  • 示例

    # 禁用主机密钥检查(不推荐,仅用于测试)
    ssh -o "StrictHostKeyChecking=no" user@example.com
    # 禁用密码认证,强制使用密钥
    ssh -o "PasswordAuthentication=no" user@example.com

-v-vv-vvv

  • 作用:显示详细的调试信息。v 的数量越多,信息越详细,这对于排查连接问题至关重要。

    linux ssh命令参数
    (图片来源网络,侵删)
  • 示例

    # 显示基本调试信息
    ssh -v user@example.com
    # 显示更详细的调试信息
    ssh -vvv user@example.com

-q--quiet

  • 作用:安静模式,只显示错误信息,不显示警告和诊断信息。
  • 示例
    # 在脚本中使用,避免输出干扰
    ssh -q user@example.com "some_command"

执行命令参数

这些参数让你可以直接在远程主机上执行命令,而无需进入交互式 shell。

-C--compress

  • 作用:打开数据压缩,对于低速网络或执行多个命令时可以减少传输数据量。
  • 示例
    # 压缩传输数据
    ssh -C user@example.com "ls -l /var/log"

-N

  • 作用:不执行远程命令。这个参数非常重要,通常只与端口转发结合使用。
  • 示例
    # 建立一个空的 SSH 连接,用于端口转发
    ssh -N -L 8080:localhost:80 user@example.com

-t-tt

  • 作用:强制分配伪终端,这对于在远程机器上运行需要交互式终端的程序(如 top, vim, bash -i)是必需的。

    • -t: 分配一个伪终端。
    • -tt: 强制分配一个伪终端,即使本地没有连接到一个终端,在脚本中运行交互式命令时很有用。
  • 示例

    # 在远程服务器上打开一个交互式 bash shell
    ssh -t user@example.com "bash -l"
    # 在脚本中运行远程的交互式命令
    ssh -tt user@example.com "sudo reboot"

-T

  • 作用:禁用伪终端分配,当你只想执行命令,不希望看到交互式提示或格式化输出时非常有用。
  • 示例
    # 执行一个命令,不分配 TTY,适合脚本
    ssh -T user@example.com "some_command > output.log 2>&1"

端口转发/隧道参数

这是 SSH 最强大的功能之一,可以在不修改防火墙规则的情况下,安全地访问远程或本地网络服务。

-L (Local Port Forwarding - 本地端口转发)

  • 作用:将本地机器的一个端口转发到远程机器的某个端口。

  • 格式-L [本地主机:]本地端口:远程主机:远程端口

  • 示例

    # 将本地电脑的 8080 端口,通过 example.com,转发到远程服务器 example.com 的 80 端口
    # 访问 http://localhost:8080 就相当于访问了 http://example.com:80
    ssh -L 8080:localhost:80 user@example.com
    # 将本地电脑的 3306 端口,通过 example.com,转发到数据库服务器 db.example.com 的 3306 端口
    ssh -L 3306:db.example.com:3306 user@example.com

-R (Remote Port Forwarding - 远程端口转发)

  • 作用:将远程机器的一个端口转发到本地机器的某个端口,这相当于在远程服务器上开了一个“洞”,指向你的本地机器。
  • 格式-R [远程主机:]远程端口:本地主机:本地端口
  • 示例
    # 在 example.com 服务器上开放 8888 端口,访问该端口就相当于访问你本地电脑的 3000 端口
    # 这可以让外部网络访问你本地的开发服务器
    ssh -R 8888:localhost:3000 user@example.com

-D (Dynamic Port Forwarding - 动态端口转发 / SOCKS 代理)

  • 作用:在本地创建一个 SOCKS 代理服务器,所有通过这个代理的网络流量都会通过 SSH 隧道转发到远程主机。
  • 格式-D [本地主机:]本地端口
  • 示例
    # 在本地 1080 端口创建一个 SOCKS 代理
    # 配置浏览器或系统代理为 socks5://localhost:1080
    # 所有网络流量都会通过 example.com 转发,实现匿名访问
    ssh -D 1080 user@example.com

调试与信息参数

-V

  • 作用:显示 ssh 程序的版本信息。
  • 示例
    ssh -V
    # OpenSSH_8.9p1 Ubuntu-3ubuntu0.1, OpenSSL 3.0.2 15 Mar 2025

-G

  • 作用:显示 ssh 将要使用的配置参数(合并了默认配置、用户配置文件和命令行参数),然后退出,对于调试配置非常有用。
  • 示例
    ssh -G user@example.com
    # 会输出大量配置项,如 port, user, identityfile 等

SSH 配置文件 (~/.ssh/config)

为了避免每次都输入一长串参数,你可以使用 SSH 配置文件,这是一个强大的功能,能让你的连接命令变得极其简洁。

文件路径~/.ssh/config ( 代表你的家目录)

示例配置

# Host myprod
#   HostName production.server.com
#   User admin
#   Port 2222
#   IdentityFile ~/.ssh/prod_key
#   StrictHostKeyChecking yes
# Host myweb
#   HostName 192.168.1.100
#   User webuser
#   LocalForward 8080 localhost:80
# Host github
#   HostName github.com
#   User git
#   IdentityFile ~/.ssh/id_ed25519_github

使用方法: 配置好上述文件后,你就可以用简短的 Host 别名来连接了。

# 连接到 myprod,相当于执行 ssh -p 2222 -i ~/.ssh/prod_key admin@production.server.com
ssh myprod
# 连接到 myweb,会自动建立本地端口转发
ssh myweb
# 克隆 GitHub 仓库,ssh 会自动使用正确的密钥
git clone git@github.com:user/repo.git

常用组合示例

  1. 安全地复制文件 (虽然 scp 是独立命令,但它内部调用 ssh):

    # 使用指定端口和密钥,从远程复制文件到本地
    scp -P 2222 -i ~/.ssh/my_key user@example.com:/path/to/remote/file.txt /path/to/local/
  2. 在远程服务器上以 root 权限执行命令

    # 先切换到 root 用户,然后执行命令
    ssh -t user@example.com "sudo reboot"
    # 或者直接以 root 用户登录(不推荐,但有时必要)
    ssh root@example.com
  3. 在后台保持端口转发

    # 使用 -N -f 让 ssh 在后台运行
    ssh -N -f -L 8080:localhost:80 user@example.com
  4. 调试连接问题

    # 尝试连接,并显示所有调试信息
    ssh -vvv user@example.com

希望这份详细的总结能帮助你全面掌握 ssh 命令的参数!

-- 展开阅读全文 --
头像
dell 14 5480 拆机
« 上一篇 今天
ipod touch 2 拆机后内部结构如何?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

最近发表

标签列表

目录[+]