SSH/zh-cn

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

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

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

安装
多数的部署已经安装了OpenSSH(通过软件包). 这个软件包使用的USE标记如下：

修改USE标记之后，不要忘记重新编译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.