我们老大上次提到了一句话非常好,他说他每安装一个工具,都要 equery files toolname 来查看这个工具到底会带有多少小工具.
就像我没有执行 equery 查询,我也不会发现,原来 ssh 自带了这么多好用的工具!

RTFM

man ssh
man sshd
man ssh_config
man sshd_config

关于ssh config

ssh_config 有两个文件:~/.ssh/config/etc/ssh/config

config文件的格式:

空行和#开头的是注释文件
Host指定特定的主机,*表示默认的
具体可以参考/etc/ssh/config样例

比如可能有多个私钥文件,其中对于所有网站,要用私钥A。而对于某一个网站,必须用私钥B
则可以配置:
Host xxx
    IdentityFile ~/.ssh/tankywoo     # tankywoo就是私钥文件

Host name还可以用匹配,具体可以man ssh_config

ssh-agent

ssh-agent 是一个ssh私钥的认证代理工具,类似于 windows 下的 Pageant

这类 authentication agent 适合于特别多私钥需要管理,或者私钥有密码等情况

思想是 ssh-agent 启动一个会话(X-session/login session),然后其他程序在这个会话里使用ssh时,都会通过使用agent的环境变量自动加载私钥来认证

ssh-agent 后可以接一些参数和命令,一般接shell名称就可以启动一个新的加载ssh-agent环境变量的会话,如:

ssh-agent zsh

然后就可以用ssh-add加载私钥了,加载后可以用 ssh-add -l 查看当前会话加载了哪些私钥。

通过 ssh-agent 启动一个会话,然后用 ssh-add 加载私钥,以后使用ssh就无需关心私钥的事情了。

Github: 'Error: Key already in use' 问题

2013-07-28 补充:

今天在给 Github 上的一个 repo 添加公钥时, 提示 Error: Key already in use

TODO 我是记得这个 公钥 给同一个账户下的另外一个 repo 添加过, 但是没想到居然会冲突, 看来要么加成全局公钥, 要么一个公钥只能指定到一个 特定 repo

搜到 官方的Help 有讲到这个问题:

$ ssh -T -i ~/.ssh/id_rsa git@github.com
# Connect to github.com using a specific ssh key
# Hi username! You've successfully authenticated, but GitHub does not
# provide shell access.

通过 -i 指定 密钥, 然后通过输出的 username 可以知道是哪个 repo 在使用这个密钥.

ssh卡住如何退出

2013-09-13 补充:

有时因为网络或其他原因, ssh远程登录其他机器时, 会卡住, 但是又没有自动退出, ctrl-c 也没用.

其实 man ssh 里已经讲了解决方法了.

查看 ESCAPE CHARACTERS 这一块:

~.      Disconnect.

其它

获取公钥的fingerprint, 比如将公钥加到github后台, 会有一个fingerprint id, 有时在不通帐号添加的公钥都是用的同一个邮箱名, 不知道对应的是哪个公钥, 本地对公钥:

$ ssh-keygen -lf /path/to/ssh/key.pub

如果有一个私钥, 可以重新生成找到公钥:

$ ssh-keygen -y -f /path/to/ssh/key