工具使用

FinalShell 玩转 Docker 和 SSH 连接?这几个实战技巧帮你搞定!

2026-10-22 · FinalShell

FinalShell 玩转 Docker 和 SSH 连接?这几个实战技巧帮你搞定! 配图

很多朋友在日常开发和运维中,都喜欢用 FinalShell 来连接服务器。它功能强大,界面也比较友好。但实际用起来,尤其是在连接 Docker 容器或者进行一些高级操作时,难免会遇到各种小麻烦。这篇文章就来手把手教你解决 FinalShell 在 SSH 连接、Docker 环境调试以及端口转发等方面的常见痛点。

FinalShell 常见问题 Q&A

FinalShell 怎么连接 Docker 容器的 SSH?

连接 Docker 容器的 SSH 和连接普通服务器略有不同,因为 Docker 容器默认通常没有 SSH 服务。你需要先在容器内部安装并启动 SSHD 服务,然后才能通过 FinalShell 连接。我以一个 Ubuntu 容器为例,带你走一遍流程:

  1. 准备 Docker 容器:首先,你要有一个运行 SSHD 的 Docker 镜像。如果没有,可以自己构建一个,或者直接进入一个已运行的容器进行配置。比如,进入你的 Ubuntu 容器:
    docker exec -it <容器ID或名称> bash
    
  2. 在容器内安装 SSHD: 在容器内部执行以下命令安装 OpenSSH Server 并启动服务:
    apt update
    apt install -y openssh-server
    mkdir /var/run/sshd
    # 设置 root 密码,或者创建新用户并设置密码
    echo 'root:your_strong_password' | chpasswd
    # 允许 root 登录(生产环境不建议,此处仅为方便测试)
    sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
    sed -i 's/UsePAM yes/UsePAM no/' /etc/ssh/sshd_config
    # 启动 SSH 服务
    /usr/sbin/sshd
    
    如果你想让容器每次启动都自动运行 SSHD,你需要创建一个自定义的 Dockerfile。
  3. 映射容器端口:在启动 Docker 容器时,你需要将容器内部的 SSH 端口(默认为 22)映射到宿主机的一个端口上。例如,将容器的 22 端口映射到宿主机的 2222 端口:
    docker run -d -p 2222:22 --name my_ssh_container your_image_name
    
    如果你是 FinalShell 4.5.0 版本,连接时可以直接在新建 SSH 连接窗口中填写宿主机的 IP 地址和映射后的端口(如 2222),用户名和密码就是你在容器内设置的。
  4. FinalShell 连接:打开 FinalShell,点击左上角的“连接”图标,选择“新建 SSH 连接”。
    • 名称:Docker SSH (Ubuntu)
    • 主机:你的宿主机 IP 地址 (例如 192.168.1.100)
    • 端口:2222 (你在 Docker 中映射的宿主机端口)
    • 用户名:root (或者你在容器内创建的用户)
    • 密码:your_strong_password 保存并连接,就能在 FinalShell 中直接操作 Docker 容器了。如果你想了解更多 FinalShell 的基础使用,可以参考这篇 FinalShell Windows 安装指南。

SSH 连接老是断开或者卡顿怎么办?

SSH 连接不稳定是经常让人头疼的问题,特别是在网络环境不好的情况下。我踩过一个坑,有次远程调试一个线上服务,每隔几分钟连接就断一次,弄得我心力交瘁。后来发现,可以通过 FinalShell 的设置和一些网络排查来改善。

  1. 设置 FinalShell 保持连接: FinalShell 自身提供了“心跳包”机制来防止连接超时断开。在 FinalShell 中,右键你的连接会话,选择“会话设置” -> “SSH”,勾选“保持连接(秒)”并设置一个值(例如 300 秒,也就是 5 分钟),这样 FinalShell 会定期发送空数据包,让服务器知道连接依然活跃。
  2. 检查服务器 SSH 配置: 有时候服务器的 sshd_config 配置也会影响连接稳定性。可以在服务器上检查 /etc/ssh/sshd_config 文件中的 ClientAliveInterval 和 ClientAliveCountMax 参数。例如:
    ClientAliveInterval 60
    ClientAliveCountMax 3
    
    这表示如果客户端 60 秒内没有响应,服务器会发送一个请求,如果连续 3 次都没有响应,就断开连接。修改后记得重启 SSH 服务:systemctl restart sshd。
  3. 检查网络环境:
    • 本地网络:确保你的本地网络稳定,尝试用 ping 命令测试服务器的延迟和丢包率。
    • 服务器网络:检查服务器的网络负载和带宽使用情况。
    • 中间网络设备:有时是路由器或防火墙的空闲会话超时导致,可以尝试调整这些设备的配置,或者联系网络管理员。

FinalShell 怎么通过 SSH 隧道访问内网服务?

当你需要访问一台只有你的跳板机(堡垒机)才能访问的内网服务时,SSH 隧道(端口转发)就派上用场了。比如,你想访问内网数据库 192.168.1.50 的 3306 端口,但你只能直连跳板机 10.0.0.10。

  1. 打开 FinalShell 端口转发: 在 FinalShell 中,右键你已连接的跳板机会话,选择“会话设置” -> “隧道” -> “本地转发”。
  2. 添加本地转发规则: 点击“添加”按钮,配置规则:
    • 监听地址:127.0.0.1 (本地 IP)
    • 监听端口:33060 (本地任意一个未被占用的端口)
    • 目标地址:192.168.1.50 (内网数据库的实际 IP)
    • 目标端口:3306 (内网数据库的实际端口) 这样配置好后,当你连接到跳板机,你在本地访问 127.0.0.1:33060 时,实际上就是通过跳板机访问了 192.168.1.50:3306。这对于开发调试内网服务非常方便。关于端口转发的更多细节,可以参考这篇教程:FinalShell SSH 端口转发指南。

我在 FinalShell 里怎么管理和部署 Docker 容器?

FinalShell 本身不直接提供 Docker 容器管理界面,但作为强大的 SSH 客户端,你可以通过它连接到运行 Docker 的服务器,然后像在本地终端一样执行所有的 Docker 命令。

  1. 连接到 Docker 主机: 首先,通过 FinalShell 连接到你运行 Docker 的服务器。
  2. 执行 Docker 命令: 连接成功后,你就可以在 FinalShell 的终端界面中,输入任何 Docker 命令来管理容器,例如:
    • docker ps:查看所有运行中的容器
    • docker images:查看所有镜像
    • docker start <容器ID或名称>:启动一个容器
    • docker stop <容器ID或名称>:停止一个容器
    • docker restart <容器ID或名称>:重启一个容器
    • docker logs -f <容器ID或名称>:实时查看容器日志,这在调试时特别有用。
    • docker exec -it <容器ID或名称> bash:进入容器内部进行操作。 FinalShell 的分屏功能在这时会非常方便,你可以一边查看日志,一边执行命令。你也可以编写 Shell 脚本来自动化部署和管理 Docker 容器,然后在 FinalShell 中一键执行。

SSH 密钥登录老是失败,有啥排查方法?

SSH 密钥登录比密码登录更安全、更方便,但配置不当就容易失败。当你遇到密钥登录问题时,通常是以下几个方面出了岔子:

  1. 密钥文件权限问题: 服务器上的 ~/.ssh 目录及其下的文件权限是关键。不正确的权限会导致 SSHD 拒绝密钥认证。
    • ~/.ssh 目录权限必须是 700 (drwx------)。
    • ~/.ssh/authorized_keys 文件权限必须是 600 (-rw-------)。
    • 在服务器上,你可以使用以下命令修正:
      chmod 700 ~/.ssh
      chmod 600 ~/.ssh/authorized_keys
      
  2. authorized_keys 文件内容格式: 确保你的公钥完整且没有额外字符。一个公钥通常以 ssh-rsa、ssh-ed25519 或 ecdsa-sha2-nistp256 开头,以你的主机名或用户名结尾。每行一个公钥。
  3. SELinux/AppArmor 阻止: 在某些系统(如 CentOS/RHEL 或 Ubuntu)上,SELinux 或 AppArmor 可能会阻止 SSHD 访问 ~/.ssh 目录。可以暂时禁用或配置相关规则,但在生产环境请谨慎。
  4. FinalShell 密钥配置: 确保在 FinalShell 的会话设置中,你选择了正确的私钥文件,并且私钥文件格式正确(通常是 OpenSSH 格式)。如果你用的是 PuTTYgen 生成的 *.ppk 格式,FinalShell 可能需要你先将其转换为 OpenSSH 格式。更多关于 SSH 密钥的配置,可以参考 FinalShell SSH 密钥配置指南。

一个程序员正在用笔记本电脑敲代码的图片

常见问题

FinalShell 传输大文件慢怎么办?

如果你通过 FinalShell 的 SFTP 功能传输大文件觉得慢,可以尝试以下方法:

  1. 网络环境:检查服务器和本地的网络带宽,确保没有瓶颈。使用工具测试网络速度。
  2. 服务器负载:确保服务器在传输时没有进行高负载运算,以免影响 IO 性能。
  3. 压缩传输:虽然 SFTP 本身不直接支持压缩,但你可以先在服务器端将大文件或目录打包压缩成一个文件(例如 .tar.gz),然后再通过 SFTP 传输这一个压缩包。这样可以有效减少传输的数据量。FinalShell 也支持在 SFTP 传输时,对部分文件进行压缩。关于 SFTP 传输的更多信息,你可以看看这篇:FinalShell SFTP 文件传输指南。

命令行界面显示乱码了怎么办?

FinalShell 默认通常会自动检测编码,但如果出现乱码,多半是客户端和服务器的编码不一致导致的。你可以这样做:

  1. 检查 FinalShell 编码设置:在 FinalShell 中,右键你的连接会话,选择“会话设置” -> “终端”,在“编码”选项中尝试切换为“UTF-8”或者服务器实际使用的编码(例如 GBK 或 GB18030)。
  2. 检查服务器编码设置:在服务器上,执行 locale 命令查看当前的语言环境设置。如果发现服务器编码不是 UTF-8,并且你也无法修改服务器设置,那就需要让 FinalShell 的编码设置与之匹配。
  3. 临时修改服务器编码:如果你有权限,可以在服务器上临时设置 LANG 环境变量,例如 export LANG=en_US.UTF-8,然后再次测试。

延伸阅读

若需进一步查阅,可先看本站以下教程: