SSH/zh-cn

SSH (Secure SHell) 是一个加密的终端程序，用于替代类Unix操作系统上传统的 telnet 工具.

SSH已经发展成为一组软件系列，除了提供用于远程终端访问的ssh这个主要的程序，还包括其他的工具如 scp (secure copy) 和 sftp (secure file transfer protocol).

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

Check install
Most deployments of Gentoo Linux will already have OpenSSH installed on the system. This can be checked by running the ssh command. If it is installed a usage statement should be printed:

If no usage statement is printed ssh is either corrupted or not installed. It is also possible that a user is simply rebuilding OpenSSH to include a new USE configuration. Whatever the case, proceed on to view possible USE settings.

Emerge OpenSSH
After changing the necessary USE flags, do not forget to install (or rebuild) OpenSSH:

服务器端
OpenSSH 服务器可以通过 /etc/init.d/ssh start，/etc/init.d/ssh stop 和 /etc/init.d/ssh restart 来控制，就像其它 OpenRC 管理的服务一样.

将openssh添加到默认的运行级别，如果之前没有做的话.

用下面的命令启动sshd守护进程：

OpenSSH服务器可以像其他的由OpenRC管理的服务那样控制：

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

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

生成用于SSH协议版本1的密钥（通常并不启用，因为已经被废弃，取而代之的是协议版本2）：

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

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

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

客户端配置
ssh 客户端与相关的程序（scp，sftp 等等）可以通过下面的文件进行配置：

更多的信息请阅读 手册：

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

客户端
在客户端执行下面的命令：

服务器
确保服务器上存在用户的帐号，然后把客户端的文件拷贝到服务器端的文件.

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

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

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

OpenSSH的客户端和服务器可以被配置为发送一个'keep alive'，或不可见的消息，旨在保持并确认连接的实时状态.
 * 要保证所有的客户端链接到你的本地服务器的连接都保持活跃，在文件中设置ClientAliveInterval 30 (或者其他的值，单位为秒).
 * 要保证你本地客户端到所有服务器的连接都保持活跃，在文件中设置ServerAliveInterval 30 (或者其他的值，单位为秒).

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

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

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

如果服务器端设置了 ，通常你应该得到类似于"localhost:10.0"或者"localhost2.local:10.0"这样的结果. 如果你得到的结果是":0.0"，请检查并确定你没有在中取消了或者初始化了 变量. 如果是的话，删除或者注释掉你自定义初始化 的语句，或者在SSH登录的时候阻止的执行.

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

阻止入侵
ssh 是一个经常被攻击的服务. sshguard 和 fail2ban 会监控日志并阻止将多次登录失败的远程用户加入黑名单.

参考

 * Securing OpenSSH - Gentoo开发者文档
 * OpenSSH Key Management Part1 - Gentoo文档, 请将全部的3部分都看一下
 * [Keychainl Gentoo Linux Keychain Guide]
 * autossh - 侦测何时SSH连接被断开并自动重新连接

External resources

 * Securing OpenSSH - Gentoo developer documentation.
 * OpenSSH Key Management Part1 - Gentoo documentation, have a look at all 3 parts.