跳转到内容

OpenSSH/客户端应用程序

100% developed
来自 Wikibooks,开放世界中的开放书籍

在客户端侧,ssh(1)scp(1)sftp(1) 提供了广泛的功能。交互式登录和文件传输仅仅是冰山一角。

ssh(1) - 基本的类似 shell 的登录客户端程序。
sftp(1) - 使用 SSH 协议工作的类似 FTP 的程序。
scp(1) - 类似 rcp(1) 的文件复制程序。
ssh_config(5) - 客户端配置文件。

SSH 客户端

[编辑 | 编辑源代码]

ssh(1) 是一个程序,它为在不安全网络上主机之间进行安全、加密的通信提供客户端。它的主要用途是登录到远程主机并运行程序。它还可以用于保护远程 X11 连接并转发任意 TCP 端口以保护旧版协议。ssh 的制作部分是为了替换不安全的工具,如 rshtelnet。它在这方面取得了很大成功。rshtelnet 在交互式会话或其他任何地方都很少见。ssh 可以使用普通密码或借助公钥/私钥对进行身份验证。可以使用更多选项进行配置,例如使用 Kerberos、智能卡或一次性密码。

远程登录,通过密码身份验证

另一种登录到相同帐户的方式

$ ssh -l fred somehost.example.org

当客户端通过远程主机上的 shell 运行时,可以交互式地运行远程程序。或者,当作为参数传递给 SSH 客户端时,它们可以被直接运行。它们甚至可以在身份验证密钥或服务器配置中预先配置。

在远程机器上运行 uname(1)

$ ssh -l fred  somehost.example.org  "uname -a"

查看挂载了哪些文件系统以及使用了多少空间

$ ssh -l fred  somehost.example.org  "mount; df -h"

可以详细配置哪些程序允许哪些帐户使用。有许多选项组合可以提供额外的功能,例如为多个会话重用单个连接或通过中间机器传递。借助 sudo(8),可以进一步提高粒度级别。

SSH 客户端环境变量 - 服务器端

[编辑 | 编辑源代码]

当然,大多数 SSH 活动的基础都围绕着 shell 的使用。连接成功后,OpenSSH 会设置几个环境变量。

SSH_CLIENT='192.168.223.17 36673 22'
SSH_CONNECTION='192.168.223.17 36673 192.168.223.229 22'
SSH_TTY=/dev/pts/6

SSH_CLIENT 显示客户端系统的地址、客户端系统上的出站端口号和服务器上的入站端口。SSH_CONNECTION 显示客户端的地址、客户端上的出站端口、服务器的地址和服务器上的入站端口。SSH_TTY 命名服务器上由连接使用的伪终端设备(简称 PTY)。有关伪终端的更多信息,请参阅 ptm(4)tty(1)tty(4)

可以使用服务器配置中的 ForceCommand 或授权密钥文件中的 Command="..." 将登录会话限制为单个程序,并使用预定的参数集。发生这种情况时,将设置一个额外的环境变量 SSH_ORIGINAL_COMMAND

SSH_ORIGINAL_COMMAND=echo "hello, world"

如果服务器已设置 ExposeAuthInfo,则 SSH_USER_AUTH 环境变量指向一个临时文件,其中列出了有关用于启动当前会话的身份验证方法的详细信息。

SSH_USER_AUTH=/tmp/sshauth.4JmbYfF0bhF6C17

会话结束时会删除该文件。

其他变量根据用户的 shell 设置和系统自身的设置进行设置。

SSH 客户端配置选项

[编辑 | 编辑源代码]
GSSAPI 或通用安全服务应用程序编程接口,是 RFC 2743 定义的标准接口,提供了一种方法,通过该方法,具有通用身份验证和安全消息传递手段的独立模块可以相互交互。Kerberos V 是使用它的更常见的服务之一。

配置选项可以作为参数传递给 ssh(1),请参阅 ssh(1)ssh_config(5) 的手册页以获取完整列表。

连接非常详细的输出,GSSAPI 身份验证

$ ssh -vv -K -l account host.example.org

可以在服务器主机上,与特定密钥一起,在用户的授权密钥文件中定义一部分选项。请参阅 sshd(8) 以了解确切的子集。

command="/usr/local/sbin/backup.sh",no-pty ssh-rsa AAAAB3NzaC1yc2EAAAQEAsY6u71N...
command="/usr/games/wump",no-port-forwarding,no-pty ssh-ed25519 AAAAC3NzaC1lZDI1...
environment="gtm_dist=/usr/local/gtm/utf8",environment="gtm_principal_editing=NOINSERT:EDITING" ssh-rsa AAAA8a2s809poloh05yhh...

请注意,某些指令(例如设置环境变量)默认情况下处于禁用状态,必须在服务器配置中命名才能供客户端使用。用户可以在 ~/.ssh/config 中设置更多配置指令,或者系统管理员可以在 /etc/ssh/ssh_config 中设置更多配置指令。可以使用 -o 将这些相同的配置指令作为参数传递。请参阅 ssh_config(5) 以获取带有描述的完整列表。

$ ssh -o "ServerAliveInterval=60" -o "Compression=yes" -l fred server.example.org

客户端主机系统管理员可以在 /etc/ssh/config 中设置一些全局默认值。可以使用 Match 指令将这些全局设置中的某些设置针对特定组或用户。

例如,如果特定 SSH 服务器可以通过端口 2022 访问,则让客户端自动尝试该端口可能很方便。OpenBSD 的一些匿名 CVS 服务器接受该端口上的 SSH 连接。但是,在这种情况下,不应使用压缩,因为 CVS 已经使用压缩。因此,应该将其关闭。因此,可以在 $HOME/.ssh/config 配置文件中指定以下内容,以便默认端口为 2022,并且连接在没有压缩的情况下建立。

Host anoncvs anoncvs.example.org
        Compression no
        Port 2022

请参阅 ssh_config(5)(客户端)和 sshd_config(5)(服务器端)以获取带有描述的完整列表。

SFTP 客户端

[编辑 | 编辑源代码]

sftp(1) 是一个交互式文件传输程序,它通过加密的 SSH 传输通道执行所有操作。它还可以使用 ssh(1) 的许多功能,例如公钥身份验证和压缩。它也是所用协议的名称。

SFTP 协议在某些方面类似于现在已经很有名的文件传输协议 (FTP),只是整个会话(包括登录)都是加密的。但是,SFTP 不是 FTPS。后者是通过 SSH/SSL 隧道传输的旧式 FTP。相反,SFTP 实际上是一个全新的协议。sftp(1) 也可以设置为在远程主机上的特定目录中启动。

$ sftp [email protected]:/var/www

通常,SFTP 用于连接并登录到指定主机,并进入交互式命令模式。请参阅 sftp(1) 手册页以了解可用的交互式命令,例如 getputrename 等等。此外,与 ssh(1) 适用的相同配置选项也适用于 sftp(1)sftp(1) 接受所有 ssh_config(5) 选项,并且这些选项可以在运行时作为参数传递。一些选项有明确的快捷方式。

$ sftp -i ~/.ssh/some.key.ed25519 [email protected]:/var/www

而其他选项可以使用 -o 选项通过完整名称指定。

$ sftp -o "ServerAliveInterval=60" -o "Compression=yes" [email protected]

另一种传输方法是自动发送或接收文件。如果使用非交互式身份验证方法,则可以使用批处理模式使整个过程自动化。

$ sftp -b session.batch -i ~/.ssh/some_key_rsa [email protected]

批处理仅适用于非交互式身份验证。

SCP 客户端

[编辑 | 编辑源代码]

scp(1) 用于在主机之间加密传输文件,使用方法类似于常规的 cp(1)。从 9.0[1] 版本开始,它在底层使用 SFTP 协议,而之前的版本则借鉴了伯克利软件发行版 (BSD) 的远程复制协议 (RCP),并成为了该协议的安全的替代方案。新旧版本都使用 SSH 来加密连接。

scp(1) 客户端与 SFTP 客户端不同,它不基于任何正式标准。它的目标是实现与旧版 rcp 几乎完全相同的行为,并以相同的方式做出响应。由于它需要在连接的两端使用相同的程序,并且需要与其他 SSH 实现保持互操作性。功能上的改变可能会破坏这种互操作性,因此新功能更有可能被添加到 sftp(1) 中(如果可能的话)。因此,在可能的情况下,最好倾向于使用 sftp(1)。同样,最近的 scp(1) 版本只是 SFTP 协议的前端而已。

从远程复制到本地

$ scp [email protected]:*.txt .

从本地复制到远程,递归

$ scp -r /etc/ [email protected]:.

作为 SFTP 协议的前端,新的 scp(1) 客户端可以涵盖旧客户端的大部分行为,但并非全部,而且在 bug 上并不完全兼容。一个显著的变化是,在 OpenSSH 8.7 或更高版本中,服务器端修复了波浪号 (~) 展开的问题。因此添加了 "[email protected]" 协议扩展来支持它。另一个可能出现问题的地方是,当文件名中包含 shell 元字符,例如 * 或 ?时。

另请参见上面关于 SFTP 客户端的部分。

GUI 客户端

[编辑 | 编辑源代码]

有很多图形化工具支持 SFTP 和 SSH。许多工具最初是使用过时的传统协议 FTP 的传输工具,随着时间的推移,它们开始支持 SSH 和 SFTP。不幸的是,许多工具尽管现代化了,但仍然保留着 FTP 程序的名称。其他一些工具则是更通用的文件管理器,它们将 SFTP 支持作为一种网络透明度的方式。大多数(如果不是全部)都提供完整的 SFTP 支持,包括 Kerberos 认证。

下面列出了一些示例,可以了解可用选项的范围。

Bluefish 是一款网站管理工具和网页编辑器,内置支持 SFTP。据称,闭源的竞争对手 XMetaL 和 Dreamweaver 至少部分支持 SFTP。截至本文撰写之时,Quanta+ 或 Kompozer 不支持 SFTP。 http://bluefish.openoffice.nl/

Cyberduck 是一款适用于 Mac 的远程文件浏览器。除了 SFTP,它还支持许多其他协议。 http://cyberduck.ch/

Dolphin 是一款功能强大的 KDE 桌面文件管理器,但也可以在其他桌面环境中运行。它包含 SFTP 支持。

Fetch,由 Fetch Softworks 开发,是一款可靠且知名度很高的 Mac SFTP 客户端。它自 1989 年就存在,最初只是一个 FTP 客户端。它具有许多实用的功能,同时又易于使用。它是一个闭源软件,但学术机构可以免费获得网站许可。 http://fetchsoftworks.com/fetch/

Filezilla 被称为一个 FTP 工具,但它内置支持 SFTP。它在 GPL 的免费软件许可证下提供给多个平台。 http://filezilla-project.org/

FireFTP 是 Mozilla Firefox 的 SFTP 插件。尽管它被宣传为 FTP 插件,但它支持 SFTP。它在 MIT 许可证和 GPL 许可证下提供。 http://fireftp.mozdev.org/

Fugu 由密歇根大学研究系统 Unix 小组开发,是 Mac 上 SFTP 的图形化前端。 http://rsug.itd.umich.edu/software/fugu/

gFTP 是一款多线程文件传输客户端。 http://www.gftp.org/

JuiceSSH 是一款适用于 Android/Linux 的 SSH 客户端。它使用 jsch Java 实现的 SSH2。 https://juicessh.com/

Konqueror 是 KDE 桌面上的文件管理器和通用文档查看器,但也可以在其他环境中运行。它包含 SFTP 支持。 http://www.konqueror.org/

lftp 是一款支持多种协议的文件传输程序。 http://lftp.yar.ru/

Midnight Commander 是一款基于文本界面的可视化文件管理器,因此可以通过终端或控制台使用。它包含 SFTP 支持。 https://midnight-commander.org/

Nautilus 是 GNOME 桌面上的默认文件管理器,但也可以在其他环境中运行。它包含 SFTP 支持。

PCManFM 是一款速度极快、轻量级且功能丰富的带选项卡浏览的文件管理器,它是 LXDE 的默认管理器。它包含 SFTP 支持。 http://wiki.lxde.org/en/PCManFM

PuTTY 是 Telnet 和 SSH 的另一个 FOSS 实现,适用于传统平台和 Unix 平台。它在 MIT 许可证下发布,除了 xterm 终端仿真器外,还包括一个 SFTP 客户端 PSFTP,以及其他工具,例如密钥代理 Paegent。它主要由 Simon Tatham 编写和维护。 http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

Remmina 是一款使用 GTK+ 编写的远程桌面客户端,它支持多种网络协议,包括 SSH。 http://www.remmina.org/

RemoteShell 是 MorphOS 的默认 SSH 客户端,使用 C 语言编写,使用 GUI 库 Magic User Interface (MUI)。该操作系统还包含命令行工具 ssh(1)scp(1)sftp(1)http://www.morphos-team.net

SecPanel 是一个用于管理和运行 SSH 和 scp 连接的 GUI。它不是协议或软件套件的新实现,而是建立在 SSH 软件套件(例如 http://themediahost.de/secpanel/)之上的。

Thunar 是 XFCE 桌面的默认文件管理器。它包含 SFTP 支持。 http://docs.xfce.org/xfce/thunar/start

Transfer 是 MorphOS 的默认 SFTP 客户端,使用 C 语言编写,使用 GUI 库 Magic User Interface (MUI)。 http://www.morphos-team.net

Yafc 是 Yet Another FTP Client,尽管名称如此,但它也支持 SFTP。 http://yafc.sourceforge.net/

 


  1. "OpenSSH 9.0 版本说明". www.openssh.com. 2022-04-08. 检索于 2022-04-10.
华夏公益教科书