SSH/zh-cn

SSH (Secure SHell) 是 telnet 工具. ]]

SSH已经发展成为一组软件系列，除了提供用于远程终端访问的 这个主要的程序，还包括其他的工具如 (Secure Copy Program) 和  (Secure File Transfer Protocol).

最初，SSH并不是免费的. 然而，当今最流行并成为实际标准的SSH实现是 [httsp://www.openbsd.org/ OpenBSD] 的OpenSSH，它在Gentoo中已预安装.

检查安装
绝大多数的 Gentoo Linux 系统都已经预装了 OpenSSH. 可以通过运行  命令进行检查. 如果已经安装，会输出使用说明：

如果没有输出使用说明，那么  要么损坏了要么没有安装. 也有可能是用户添加了新的 USE 配置之后正在重新编译 OpenSSH. 无论何种情况，请继续查看可能的 USE 设定.

Emerge
在修改了必要的 USE 标志之后，不要忘记安装（或重装） OpenSSH：

创建密钥
为了提供一个安全的 shell，加密的密钥用于管理 SSH 提供的加密、解密和哈希功能.

在第一次启动 SSH 服务的时候，会生成系统密钥. 密钥可以使用 （重新）生成.

生成SSH协议2的密钥（DSA和RSA算法）：

这篇文章 Secure Secure Shell 建议使用 Ed25519 和 RSA 公钥算法：

服务器端配置
SSH服务器配置文件通常是 ，虽然也有可能通过OpenRC的文件进行进一步的配置，包括修改配置文件的位置. 关于如何配置服务器的详细信息请参考sshd_config man page.

您也应该学习 的这篇偏重于安全配置的OpenSSH 指南.

The server provides means to validate its configuration using test mode:

客户端配置
客户端与相关的程序(， 等)可以通过下面的文件进行配置：



更多的信息请阅读 手册：

防御入侵
SSH 是一个易受攻击的服务. 像 sshguard 和 fail2ban 这样的工具会监控日志并将多次尝试登录失败的远程用户加入黑名单. 根据需要来使用这些工具以确保这个易受攻击系统的安全.

OpenRC
将OpenSSH服务加入缺省的运行级别：

启动sshd服务：

OpenSSH服务可以像其它被OpenRC管理的服务一样被控制：

systemd
当系统启动时同时启动OpenSSH:

现在启动OpenSSH服务：

检查服务是否已经启动：

转义序列

在活动的SSH会话期间，按波形符键可启动转义序列. 输入以下内容以获取选项列表：

无密码验证
对于管理 git 服务器非常便利.

客户端
在客户端应先创建一个密钥对. 如果你之前没有创建的话，可以执行下面的命令来完成（当然，请不要输入密码）：

服务器
确保服务器上存在用户的帐号，然后把客户端的 文件拷贝到服务器端用户 home 目录的  文件. 这可以通过在客户端计算机上运行以下命令来实现（这里，需要输入用户在服务器上的密码）：

然后就应该可以进行无密码登录了：

接着在服务器上，这个文件 里应该设置.

单机测试
上面的步骤可以在本地测试：

故障排除
有三种不同级别的调试模式可以帮助排除故障. 配合  参数 SSH 会输出关于其进度的调试信息. 这有助于调试连接、验证和配置的问题. 多个  参数会增加调试信息的详细程度. 最大的详细程度是三级.

长连接被关闭
许多互联网接入设备进行网络地址转换 (NAT)，使在专用网络（典型的例子像家里或者某个营业场所）内的设备可以访问外部网络如互联网，尽管该设备只拥有专用网络上的一个IP地址. 不幸的是，不是所有的NAT设备都是一样的，其中一些会错误的关闭那些长时间连接，不经常使用的TCP连接，比如SSH使用的连接. 这一问题通常的表现是突然无法和远程的服务器交互，尽管  客户端程序并未退出.

OpenSSH的客户端和服务器可以被配置为发送一个'keep alive'，或不可见的消息，旨在保持并确认连接的实时状态：


 * 为了给连接到您的本地服务器的所有客户端使能keep alive，请在文件中设置  （或者其它值，以秒为单位）.
 * 为了给连接到您的本地客户端的所有服务器使能keep alive，请在文件中设置 （或者其它值，以秒为单位）.

X11转发/隧道不工作
问题: 在对配置文件做了必要的修改以允许 X11 转发, 却发现 X 应用程序在服务器端执行却没有转发到客户端.

解决办法: 可能是在SSH登录到远程服务器或者主机的过程中， DISPLAY 变量被取消了或者在 SSH session 设置这一变量之后又被重设了.

远程登录后按如下步骤测试这一现象：

如果服务器端设置了 ，通常应该得到类似于   或者   这样的结果. 如果显示的不是 ，请检查并确定没有在  中取消了或者重新初始化了 DISPLAY 变量. 如果是的话，删除或者注释掉自定义初始化 DISPLAY 变量的语句，以阻止 SSH 登录的时候执行 中的这些代码：

请将上面命令中的 替换为适当的用户名.

一个小技巧是在用户的 中将此命令定义为一个 alias.

ssh-agent
OpenSSH comes with, a daemon to cache and prevent from frequent ssh password entries. When run, the environment variable SSH_AUTH_SOCK is used to point to ssh-agent's communication socket. The normal way to setup is to run it as the top most process of the user's session. Otherwise the environment variables will not be visible inside the session.

Depending on the way the graphical user session is configured to launch, it can be tricky to find a suitable way to launch. As an example for the display manager, you may edit and change  from

into

To tell the password once per session, either run   manually or make use of the   option.

Recent Xfce will start (and ) automatically. If both are installed both will be started which makes identity management especially with SmartCards more complicated. Either stop XFCE from autostarting at least SSH's agent or disable both and use your shell, X-session or similar.

参考

 * Securing the SSH service（安全手册）
 * Gentoo Linux 钥匙串指南
 * autossh - 侦测何时SSH连接被断开并自动重新连接.
 * SCP - SSH 自带的安全拷贝程序.
 * SFTP - SSH 自带的安全文件传输协议客户端.
 * SSHFS - 基于 FUSE 和 SSH 的挂载客户端.
 * Gentoo手册 — 安装 — 启动SSH服务
 * Sakaki%27s_EFI_Install_Guide/Setting_Up_Networking_and_Connecting_via_ssh

外部资源

 * Securing OpenSSH - Gentoo 开发者文档.
 * — SSH 代理命令 -- connect.c
 * https://lonesysadmin.net/2011/11/08/ssh-escape-sequences-aka-kill-dead-ssh-sessions/amp/ - 一篇关于转义序列的博客.
 * https://hackaday.com/2017/10/18/practical-public-key-cryptography/ - 实用公钥密码学 （Hackaday）.
 * ArchWiki上的SSH条目