29.4 关于SSH主机别名

    在实际应用中,有时需要使用多套公钥/私钥对,例如:

    使用默认的公钥访问服务器的git账号,可以执行git命令,但不能进行shell登录。

    使用特别创建的公钥访问服务器的git账号,能够获取shell,登录后可以对Git服务器软件进行升级、维护等工作。

    访问Github(免费的Git服务托管商)使用其他公钥(非默认公钥)。

    从上面的说明中可以看出,用户可能拥有不只一套公钥/私钥对。为了创建不同的公钥/私钥对,在使用ssh-keygen命令时就需要通过-f参数指定不同的私钥名称。用法如下:


    $ssh-keygen-f~/.ssh/<filename>

    请将<filename>替换为有意义的名称。命令执行完毕后,会在~/.ssh目录下创建指定的公钥/私钥对:文件<filename>是私钥,文件<filename>.pub是公钥。

    将新生成的公钥添加到远程主机登录用户主目录下的.ssh/authorized_keys文件中,就可以使用新创建的公钥建立到远程主机<server>的<user>账户的无口令登录(采用公钥认证)。操作如下:


    $ssh-copy-id-i.ssh/<filename>.pub<user>@<server>

    现在用户存在多个公钥/私钥对,那么当执行下面的ssh登录指令时,用到的是哪个公钥呢?


    $ssh<user>@<server>

    当然是默认公钥~/.ssh/id_rsa.pub。那么如何用新建的公钥连接server呢?

    SSH的客户端配置文件~/.ssh/config可以通过创建主机别名,在连接主机时选择使用特定的公钥。例如~/.ssh/config文件中的下列配置:


    host bj user git hostname bj.ossxp.com port 22 identityfile~/.ssh/jiangxin

    执行下面的SSH登录命令:


    $ssh bj

    或者执行下面的Git命令:


    $git clone bj:path/to/repos/myrepo.git

    虽然这两条命令各不相同,但是都使用了SSH协议,以及相同的主机别名:bj。参考上面在~/.ssh/config文件中建立的主机别名,可以做出如下判断:

    登录的SSH主机名为bj.ossxp.com。

    登录时使用的用户名为git。

    认证时使用的公钥文件为~/.ssh/jiangxin.pub。